如何为数组的每个要素绘制精度条

时间:2016-05-02 20:58:31

标签: python-3.x matplotlib scikit-learn

我有一个数据集" x"及其标签矢量" y"。我想在应用NaiveBayes和交叉验证后绘制每个属性(对于" x"的每一列)的准确性。我想要一个条形图。 所以最后我需要3个酒吧,因为" x"有3列。分类必须运行3次。每个功能有3种不同的准确度。

每当我执行我的代码时,它会显示:
     ValueError:找到样本数不一致的数组:[1 3]      弃用警告:传递1d数组作为数据在0.17中被弃用,并且在0.19中将ValueError用于表示。如果您的数据具有单个要素,则使用X.reshape(-1,1)重新整形数据;如果包含单个样本,则使用X.reshape(1,-1)重新整形数据。

我做错了什么?

    import matplotlib.pyplot as plt
    import numpy as np
    from sklearn import cross_validation
    from sklearn.naive_bayes import GaussianNB
    clf = GaussianNB()

    x = np.array([[0, 0.51, 0.00101], [3, 0.54, 0.00105], [6, 0.57, 0.00108], [9, 0.60, 0.00111], [1, 0.73, 0.00114], [5, 0.76, 0.00117], [8, 0.89, 120]])
    y = np.array([1, 0, 0, 1, 1, 1, 0])

   scores = list()
   scores_std = list()
   for i in range(x.shape[1]): 
   xA=x[:, i]
   scoresKF2 = cross_validation.cross_val_score(clf, xA, y, cv=2)
   scores.append(np.mean(scoresKF2))
   scores_std.append(np.std(scoresKF2))
   plt.bar(x[:,i], scores)

plt.show()

1 个答案:

答案 0 :(得分:0)

检查输入数据的形状xA,向我们显示它是1维的 - 具体来说,它是(7,)形状。正如警告告诉我们的那样,您不能在这里传入1d数组。在返回的警告中解决此问题的关键如果数据具有单个特征,则使用X.reshape(-1,1)重塑数据,如果包含单个特征,则使用X.reshape(1,-1)重塑数据样品。因此,由于它只是一个功能,请执行此xA = x[:,i].reshape(-1, 1)而不是xA = x[:,i]

我认为绘图存在另一个问题。我不完全确定您期望看到的内容,但您应该将plt.bar(x[:,i], scores)替换为plt.bar(i, np.mean(scoresKF2))