Matplotlib错误:’height’必须是长度为5的数组或标量

我正在尝试使用Python 2.7中的matplotlib将脚本的输出绘制成一个包含两系列的条形图。

我的脚本打印了’msg’,结果如下所示:

KNN: 90.000000 (0.322734)

LDA: 83.641395 (0.721210)

CART: 92.600996 (0.399870)

NB: 29.214167 (1.743959)

随机森林: 92.617598 (0.323824)

在代码输出’msg’的结果后,我尝试使用matplotlib将结果绘制成一个包含两系列的条形图,然后得到了以下错误:

Traceback (most recent call last):  File "comparison.py", line 113, in <module>    label='mean')  File "C:\Users\Scot\Anaconda2\lib\site-packages\matplotlib\pyplot.py", line 2650, in bar    **kwargs)  File "C:\Users\Scot\Anaconda2\lib\site-packages\matplotlib\__init__.py", line 1818, in inner    return func(ax, *args, **kwargs)  File "C:\Users\Scot\Anaconda2\lib\site-packages\matplotlib\axes\_axes.py", line 2038, in bar    "must be length %d or scalar" % nbars)ValueError: incompatible sizes: argument 'height' must be length 5 or scalar

我不确定如何解决这个问题,我认为可能是由于结果的值是浮点数造成的?任何帮助将不胜感激。以下是我的代码:

# Modulesimport pandasimport numpyimport osfrom pandas.tools.plotting import scatter_matriximport matplotlib.pyplot as pltfrom matplotlib import styleplt.rcdefaults()from sklearn import preprocessingfrom sklearn import cross_validationfrom sklearn.metrics import classification_reportfrom sklearn.metrics import confusion_matrixfrom sklearn.metrics import accuracy_score, precision_recall_curve, average_precision_scorefrom sklearn.linear_model import LogisticRegressionfrom sklearn.ensemble import RandomForestClassifierfrom sklearn.tree import DecisionTreeClassifierfrom sklearn.neighbors import KNeighborsClassifierfrom sklearn.discriminant_analysis import LinearDiscriminantAnalysisfrom sklearn.naive_bayes import GaussianNBfrom scipy.stats import ttest_ind, ttest_ind_from_statsfrom scipy.special import stdtrfrom sklearn.svm import SVCfrom collections import defaultdictfrom sklearn.preprocessing import LabelEncoderimport warnings# Load KDD datasetdata_set = "NSL-KDD/KDDTest+.arff"import osos.system("cls")print "Loading: ", data_setwith warnings.catch_warnings():    warnings.simplefilter("ignore")    names = ['duration', 'protocol_type', 'service', 'flag', 'src_bytes', 'dst_bytes', 'land', 'wrong_fragment', 'urgent', 'hot', 'num_failed_logins', 'logged_in', 'num_compromised', 'su_attempted', 'num_root', 'num_file_creations',             'num_shells', 'num_access_files', 'num_outbound_cmds', 'is_host_login', 'is_guest_login', 'count', 'srv_count', 'serror_rate', 'srv_serror_rate', 'rerror_rate', 'srv_rerror_rate', 'same_srv_rate', 'diff_srv_rate', 'srv_diff_host_rate',             'dst_host_count', 'dst_host_srv_count', 'dst_host_same_srv_rate', 'dst_host_diff_srv_rate', 'dst_host_same_src_port_rate', 'dst_host_srv_diff_host_rate', 'dst_host_serror_rate', 'dst_host_srv_serror_rate', 'dst_host_rerror_rate', 'class',             'dst_host_srv_rerror_rate']    dataset = pandas.read_csv(data_set, names=names)    for column in dataset.columns:        if dataset[column].dtype == type(object):            le = LabelEncoder()            dataset[column] = le.fit_transform(dataset[column])    array = dataset.values    X = array[:, 0:40]    Y = array[:, 40]    # Split-out validation dataset    validation_size = 0.20    seed = 7    X_train, X_validation, Y_train, Y_validation = cross_validation.train_test_split(        X, Y, test_size=validation_size, random_state=seed)    # Test options and evaluation metric    num_folds = 10    num_instances = len(X_train)    seed = 10    scoring = 'accuracy'    #  Algorithms    models = []    models.append(('KNN', KNeighborsClassifier()))      models.append(('LDA', LinearDiscriminantAnalysis()))      models.append(('CART', DecisionTreeClassifier()))      models.append(('NB', GaussianNB()))      models.append(('Random Forest', RandomForestClassifier()))      # models.append(('LR', LogisticRegression()))     # evaluate each model in turn    results = []    names = []    for name, model in models:        kfold = cross_validation.KFold(n=num_instances, n_folds=num_folds, random_state=seed)        cv_results = cross_validation.cross_val_score(            model, X_train, Y_train, cv=kfold, scoring=scoring)        results.append(cv_results)        names.append(name)        msg = "%s: %f (%f)" % (name, cv_results.mean() * 100, cv_results.std()                               * 100)  # multiplying by 100 to show percentage        print(msg)        # print cv_results * 100 # plots all values that make the average    print ("\n")    # Perform T Test on each iteration of models.    for i in range(len(results) - 1):        for j in range(i, len(results)):            t, p = ttest_ind(results[i], results[j], equal_var=False)            print("T_Test between {} & {}: T Value = {}, P Value = {}".format(                names[i], names[j], t, p))            print("\n")    plt.style.use('ggplot')    n_groups = 5    # create plot    fig, ax = plt.subplots()    index = numpy.arange(n_groups)    bar_width = 0.35    opacity = 0.8    rects1 = plt.bar(index, cv_results, bar_width,                     alpha=opacity,                     #  color='b',                     label='mean') # Line 113    rects2 = plt.bar(index + bar_width, cv_results.std(), bar_width,                     alpha=opacity,                     color='g',                     label='standard_d')    plt.xlabel('Models')    plt.ylabel('Percentage')    plt.title('All Model Performance')    plt.xticks(index + bar_width, (names))    plt.legend()    plt.tight_layout()    plt.show()

编辑

打印cv_results显示如下,并且是7或8位小数:

[ 90.48146099  90.48146099  89.42999447  89.5960155   90.03873824  89.9833979   89.9833979   89.76203652  90.09407858  90.14941893][ 83.34255672  84.94742667  82.2910902   83.78527947  84.3386829  83.9513005   82.78915329  84.06198118  83.39789707  83.50857775][ 93.1931378   92.69507471  91.92030991  92.52905368  92.69507471  92.41837299  92.58439402  92.25235196  92.19701162  92.14167128][ 29.05368013  26.89540675  31.54399557  28.22357499  29.27504151  27.94687327  33.20420587  28.99833979  28.55561704  28.44493636][ 93.35915883  93.02711677  92.25235196  91.69894853  93.02711677  92.63973437  92.58439402  92.14167128  92.47371334  92.69507471]

回答:

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注