python - 无法重塑数组 - 绘制 GridSearchCV
问题描述
代码很简单,并且有几个与此事相关的问题,但我对 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)
为什么会发生这种情况,我该如何解决?
解决方案
弄清楚了。首先,为了绘制我的 GridSearchCV,我需要访问数组mean_test_score
中的字段。clf.cv_results
这使得要打印的数据大小为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 (有点愚蠢的问题,但我缺乏关于这是如何工作的)。
推荐阅读
- c - 如何使用或调用以下函数?
- javascript - 如何使用cheerio数据抓取来解析javascipt代码
- c# - 用户登录后尝试隐藏导航栏中的按钮时出现错误堆栈溢出
- vba - 无法在无头模式下使用 vba/selenium 从网页收集价格
- java - Dagger 与 Guice 中的运行时值注入
- server - 从基本映像配置简化服务器设置
- django - Slack SocialAccount 错误 bad_redirect_uri django-allauth
- java - 基于任务的 Gradle 条件依赖
- android - 如何在包含 ViewPager 的 Activity 上实现 ViewBinding
- asp.net-core - 如何在一台服务器上部署 N 层 ASP.NET Core 应用程序?