【问题标题】:Cannot reshape array - plot GridSearchCV [duplicate]无法重塑数组 - 绘制 GridSearchCV [重复]
【发布时间】:2019-12-27 21:33:03
【问题描述】:

代码很简单,并且有几个与此事相关的问题,但我对 python 的了解几乎为零,所以我不知道它是如何工作的。我正在尝试绘制我的 GridSearchCV 结果。 阅读文档没有帮助:https://docs.scipy.org/doc/numpy/reference/generated/numpy.reshape.html

from sklearn import svm, datasets
from sklearn.model_selection import GridSearchCV

clf = GridSearchCV(estimator=svm.SVC(),
               param_grid={'C': [1, 10], 'gamma': [0.001, 0.0001], 'kernel': ('linear', 'rbf')}, cv=10, n_jobs=None)
clf.fit(X_train, Y_train)

scores = [x[1] for x in clf.cv_results_]    
print np.array(scores).shape # outputs: (33L,)
scores = np.array(scores).reshape(len([1, 10]), len([0.001, 0.0001]))

for ind, i in enumerate([1, 10]):
    plt.plot([0.001, 0.0001], scores[ind])

plt.legend()
plt.xlabel('Gamma')
plt.ylabel('Mean score')
plt.show()

输出错误:

scores = np.array(scores).reshape(len([1, 10]), len([0.001, 0.0001]))
ValueError: cannot reshape array of size 33 into shape (2,2)

为什么会发生这种情况,我该如何解决?

【问题讨论】:

    标签: python matplotlib grid-search


    【解决方案1】:

    想通了。首先,为了绘制我的 GridSearchCV,我需要访问 clf.cv_results 数组中的 mean_test_score 字段。

    这使得要打印的数据大小为8,提示如下错误:

    scores = np.array(scores).reshape(len([1, 10]), len([0.001, 0.0001]))
    ValueError: cannot reshape array of size 8 into shape (2,2)
    

    稍微修改一下代码后,它看起来应该可以正常工作:

    scores = clf.cv_results_['mean_test_score'].reshape(len([1, 10]), len([0.001, 0.0006, 0.0003, 0.0001]))
    
    for ind, i in enumerate([1, 10]):
        plt.plot([0.001, 0.0006, 0.0003, 0.0001], scores[ind])
    
    plt.legend()
    plt.xlabel('Gamma')
    plt.ylabel('Mean score')
    plt.show()
    

    这使得 8 长度的数据被绘制在一个 2x4 矩阵中,可以容纳 8 个数据,这是我过去犯的错误 2*4 != 33(有点愚蠢的问题,但我缺乏有关其工作原理的基本知识)。

    【讨论】:

    • 请注意,您可以直接说arr.reshape(2, 4)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-13
    • 1970-01-01
    • 2020-07-11
    • 1970-01-01
    • 2020-08-29
    • 2020-07-15
    相关资源
    最近更新 更多