GridSearchCV 的结果作为表格
Posted
技术标签:
【中文标题】GridSearchCV 的结果作为表格【英文标题】:Result of GridSearchCV as table 【发布时间】:2020-03-09 03:52:07 【问题描述】:我在带有 RBF 内核的 SVM 上进行了网格搜索 + 交叉验证,以使用 GridShearchCV 类找到参数 C 和 gamma 的最佳值。现在我想以表格格式获得结果,例如
C/gamma 1e-3 1e-2 1e3
0.1 0.2 .. 0.3
1 0.9
10 ..
100 ..
其中单元格包含这对参数值的准确度得分。
或者至少,如果第一个解决方案是不可能的,那么更简单的方法,比如
C gamma accuracy
0.1 1e-4 0.2
...
我对 Python 不是很熟练,所以我不知道从哪里开始。你能给我一些方法来做这种表示吗?最好的解决方案是将表格作为图表,但在控制台中以这些格式进行简单打印就可以了。提前谢谢你。
【问题讨论】:
import pandas as pd;df = pd.Dataframe(grid.cv_results_)
?无法测试,是否有效?
嗨@Gianluca Amprimo,答案对你有用吗?
嗨@Gianluca Amprimo,如果以下解决方案对您有用,我恳请您接受它作为经过验证的答案,因为它会帮助其他可能稍后访问此问题的人。
【参考方案1】:
您可以使用gridsearchCV
对象的cv_results_
属性,如下所示:
from sklearn import svm, datasets
from sklearn.model_selection import GridSearchCV
iris = datasets.load_iris()
parameters = 'kernel':('linear', 'rbf'), 'C':[1, 10]
svc = svm.SVC(gamma="scale")
clf = GridSearchCV(svc, parameters, cv=5)
clf.fit(iris.data, iris.target)
现在你使用clf.cv_results_
'mean_fit_time': array([0.00049248, 0.00051575, 0.00051174, 0.00044131]),
'mean_score_time': array([0.0002739 , 0.00027657, 0.00023718, 0.00023627]),
'mean_test_score': array([0.98 , 0.96666667, 0.97333333, 0.98 ]),
'param_C': masked_array(data=[1, 1, 10, 10],
mask=[False, False, False, False],
fill_value='?',
dtype=object),
'param_kernel': masked_array(data=['linear', 'rbf', 'linear', 'rbf'],
mask=[False, False, False, False],
fill_value='?',
dtype=object),
'params': ['C': 1, 'kernel': 'linear',
'C': 1, 'kernel': 'rbf',
'C': 10, 'kernel': 'linear',
'C': 10, 'kernel': 'rbf'],
'rank_test_score': array([1, 4, 3, 1], dtype=int32),
'split0_test_score': array([0.96666667, 0.96666667, 1. , 0.96666667]),
'split1_test_score': array([1. , 0.96666667, 1. , 1. ]),
'split2_test_score': array([0.96666667, 0.96666667, 0.9 , 0.96666667]),
'split3_test_score': array([0.96666667, 0.93333333, 0.96666667, 0.96666667]),
'split4_test_score': array([1., 1., 1., 1.]),
'std_fit_time': array([1.84329827e-04, 1.34653950e-05, 1.26220210e-04, 1.76294378e-05]),
'std_score_time': array([6.23956317e-05, 1.34498512e-05, 3.57596078e-06, 4.68175419e-06]),
'std_test_score': array([0.01632993, 0.02108185, 0.03887301, 0.01632993])
您可以使用params
和mean_test_score
来构建您正在使用以下命令查看的数据框:
pd.concat([pd.DataFrame(clf.cv_results_["params"]),pd.DataFrame(clf.cv_results_["mean_test_score"], columns=["Accuracy"])],axis=1)
你的最终数据框看起来像
C kernel Accuracy
0 1 linear 0.980000
1 1 rbf 0.966667
2 10 linear 0.973333
3 10 rbf 0.980000
希望这会有所帮助!
【讨论】:
非常有帮助。谢谢!【参考方案2】:也许更容易:
pd.DataFrame('param': clf.cv_results_["params"], 'acc': clf.cv_results_["mean_test_score"])
或:
df = pd.DataFrame(clf.cv_results_)
【讨论】:
以上是关于GridSearchCV 的结果作为表格的主要内容,如果未能解决你的问题,请参考以下文章
在 GridSearchCV 中使用精度作为评分时如何指定正标签
我不清楚GridSearchCV中best_score_的含义
Sklearn gridsearchCV 对象在 pickle 转储/加载后更改
sklearn GridSearchCV 给出了有问题的结果