我在绘制散点图时遇到了问题
我想将音频特征的值绘制在散点图上,以便清晰展示(目前我的训练集中有5个音频文件 – 我将在增加数据集后使用这些数据来训练KNN/SVM等模型)
标记的训练标签是[0, 0, 1, 2, 1]
而训练特征值是
[ [103.359375, [11, 36, 60, 85, 110, 134, 159, 183, 208, 232, 257, 286, 310, 335]], [89.10290948275862, [11, 41, 69, 98, 127, 155, 184, 213, 241, 270, 299, 327, 356]], [151.99908088235293, [7, 24, 41, 57, 73, 90, 107, 123, 140, 157, 173, 189, 206, 223, 239, 256, 272, 290, 307, 325, 343, 360, 377]], [143.5546875, [39, 57, 77, 95, 114, 132, 150, 168, 186, 204, 222, 239, 256, 272, 288, 305, 322, 340]], [83.35433467741936, [8, 38, 70, 101, 137, 168, 199, 230, 266, 298, 334, 365]]]
每个待分类对象有两个特征,分别称为tempo
和beat per minute
我该如何在散点图上绘制这些数据?
我尝试了以下代码,但由于x和y的大小差异而失败
featureA = [x[0] for x in training_features]featureB = [x[1] for x in training_features]plt.scatter(featureA[:2], featureB[:2])plt.scatter(featureA[2:], featureB[2:], color='r')plt.xlabel('Beat Frame')plt.ylabel('Tempo')
这会给我一个错误ValueError: setting an array element with a sequence.
。请帮助我:)
编辑:还有一件事,我如何绘制多个特征(即>2个),我想使用光谱质心、零交叉率、mfcc等,然后绘制结果
回答:
正如ImportanceOfBeingEarnest所说,问题在于数组的大小。
对于散点图,你需要一个包含点坐标(x和y)的数组。但featureB是一个包含多个值的数组。
>>> print(featureB[:2])[[11, 36, 60, 85, 110, 134, 159, 183, 208, 232, 257, 286, 310, 335],[11, 41, 69, 98, 127, 155, 184, 213, 241, 270, 299, 327, 356]]
然后你需要将training_feature转换为类似这样的形式:
points = []for x in training_feature: for y in x[1]: points.append([x[0], y])points = np.array(points)points.shape # (80, 2)
现在我们可以使用plt.scatter了!
plt.scatter(points[:, 0], points[:, 1])
我不太明白你想要绘制什么,但我希望这对你有帮助!…