栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

从GridSearchCV检索特定的分类器和数据

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

从GridSearchCV检索特定的分类器和数据

GridSearchCV不包含原始数据(如果包含原始数据,那将是荒谬的)。它包括的唯一数据是它自己的簿记,即每个CV折页尝试的详细得分和参数。在

best_estimator_
返回的是该模型适用于遇到的任何新数据所需要的唯一的事,但如果像你说的,你想在细节上深入挖掘,充分结果在其返回
cv_results_
属性。

使用您自己的网格将示例从文档改编为knn分类器

knn_parameters
(但是删除
n_jobs
,这只会影响拟合速度,并且不是算法的真正超参数),
cv=3
为简单起见,我们拥有:

from sklearn.neighbors import KNeighborsClassifierfrom sklearn.datasets import load_irisfrom sklearn.model_selection import GridSearchCVimport pandas as pdiris = load_iris()knn_parameters = [{    'n_neighbors': [1,3,5,7, 9, 11],    'leaf_size': [5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60],    'algorithm': ['auto', 'ball_tree', 'kd_tree', 'brute'],    'weights': ['uniform', 'distance']}]knn_classifier = KNeighborsClassifier()clf = GridSearchCV(estimator = knn_classifier, param_grid = knn_parameters, scoring = 'accuracy', n_jobs=-1, cv=3)clf.fit(iris.data, iris.target)clf.best_estimator_# result:KNeighborsClassifier(algorithm='auto', leaf_size=5, metric='minkowski',          metric_params=None, n_jobs=None, n_neighbors=5, p=2,          weights='uniform')

因此,如上所述,最后的结果告诉您将算法应用于任何新数据(验证,测试,来自部署等)的所有知识。此外,您可能会发现,实际上除去

n_jobs
从进入
knn_parameters
电网和要求,而不是用于
n_jobs=-1
GridSearchCV
一个对象中的结果
快CV过程。不过,如果您想使用
n_jobs=-1
最终模型,则可以轻松地操纵
best_estimator_
来做到这一点:

clf.best_estimator_.n_jobs = -1clf.best_estimator_# resultKNeighborsClassifier(algorithm='auto', leaf_size=5, metric='minkowski',          metric_params=None, n_jobs=-1, n_neighbors=5, p=2,          weights='uniform')

这实际上回答了您的第二个问题,因为您也可以类似地操纵

best_estimator_
来更改其他超参数。

因此,找到最好的模型是大多数人停止的地方。但是,如果出于某种原因想要进一步深入了解整个网格搜索过程的详细信息,则将在

cv_results_
属性中返回详细结果,甚至可以将其导入到pandas数据框中以方便检查:

cv_results = pd.Dataframe.from_dict(clf.cv_results_)

例如,

cv_results
数据框包括一列
rank_test_score
,顾名思义,该列包含每个参数组合的等级:

cv_results['rank_test_score']# result:0      4811      4812      1453      1454        1      ... 571      1572    145573    145574    433575      1Name: rank_test_score, Length: 576, dtype: int32

这里的

1
意思是最好的,您可以很容易地看到有不止一种组合被排名为
1
-因此,实际上,我们这里有不止一种“最佳”模型(即参数组合)!尽管在这里这很可能是由于所用虹膜数据集的相对简单性,但原则上也没有理由在实际情况下也不会发生这种情况。在这种情况下,返回
best_estimator_
的只是这些情况中的第一个-
这里是组合编号4:

cv_results.iloc[4]# result:mean_fit_time  0.000669559std_fit_time   1.55811e-05mean_score_time 0.00474652std_score_time 0.000488042param_algorithm       autoparam_leaf_size          5param_n_neighbors        5param_weights      uniformparams    {'algorithm': 'auto', 'leaf_size': 5, 'n_neigh...split0_test_score     0.98split1_test_score     0.98split2_test_score     0.98mean_test_score       0.98std_test_score0rank_test_score          1Name: 4, dtype: object

您可以轻松地看到与我们

best_estimator_
上面的参数相同的参数。但是现在您可以通过以下方法检查所有“最佳”模型:

cv_results.loc[cv_results['rank_test_score']==1]

就我而言,这将导致不少于144个模型(在

6*12*4*2 =576
尝试的所有模型中)!因此,您实际上可以在更多选择中进行选择,甚至可以使用其他附加条件,例如返回分数的标准偏差(越小越好,尽管此处的最小值为0),而不是仅仅依赖于最大平均分数,这是自动过程将返回的分数。

希望这些足以让您入门…



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/633909.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号