2016-05-02 34 views
0

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

每当执行我的代码它显示:
ValueError异常:与样品的不一致数实测值数组:[1 3] DeprecationWarning:传递作为数据在0.17弃用,在0.19 willraise ValueError异常1D阵列。如果数据具有单个特征,则使用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() 

回答

0

检查输入数据,xA的形状,我们表明,它是一维 - 具体而言,它是(7,)形状。正如警告告诉我们的,你不允许在这里传入1d数组。在返回的警告中解决此问题的关键如果数据具有单个要素,则使用X.reshape(-1,1)或在包含单个样本的情况下使用X.reshape(1,-1)重整数据 。因此,由于它只是一个功能,因此请执行xA = x[:,i].reshape(-1, 1)而不是xA = x[:,i]

我认为绘图还有另外一个问题。我不完全确定你期望看到什么,但你应该用plt.bar(i, np.mean(scoresKF2))替换plt.bar(x[:,i], scores)

+0

谢谢你,你是对的。我改变了你告诉我的两个值,现在它可以工作。 – Aizzaac