交叉验证网格搜索

交叉验证网格搜索

参考网址:(博客园)
https://www.cnblogs.com/dalege/p/14175192.html

https://blog.csdn.net/weixin_45901519/article/details/113688570?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-4.pc_relevant_default&spm=1001.2101.3001.4242.3&utm_relevant_index=7

GridSearchCV——

GridSearch和CV,即网格搜索和交叉验证。
网格搜索,搜索的是参数,即在指定的参数范围内,按步长依次调整参数,利用调整的参数训练学习器,从所有的参数中找到在验证集上精度最高的参数,这其实是一个训练和比较的过程。
k折交叉验证将所有数据集分成k份,不重复地每次取其中一份做测试集,用其余k-1份做训练集训练模型,之后计算该模型在测试集上的得分,将k次的得分取平均得到最后的得分。
网址:(博客园)
https://www.cnblogs.com/dalege/p/14175192.html
参数说明:
sklearn.model_selection.GridSearchCV(estimator, param_grid, *, scoring=None, n_jobs=None, iid='deprecated', refit=True, cv=None, verbose=0, pre_dispatch='2*n_jobs', error_score=nan, return_train_score=False)

1,estimator
选择使用的分类器 并且传入除需要确定最佳的参数之外的其他参数
eg:
estimator = RandomForestClassifier(min_sample_split=100,min_samples_leaf = 20,max_depth = 8,max_features = 'sqrt' , random_state =10)
随机森林分类器(传入参数)

2,param_grid:
给定需要最优化的参数的取值 
eg:(字典形式)
param_grid = param_test1, param_test1 = {'n_estimators' : range(10,71,10)}
或者:(列表形式)
param_grid = [{'n_estimators': [3, 10, 30],'max_features': [2, 4, 6, 8]},{'bootstrap': [False],'n_estimators': [3, 10],'max_features': [2, 3, 4]},]

3,scoring:
模型评价标准 根据分类器采用的模型选择采用误差估计函数或者其它score方法
默认为None,使用estimator的误差估计函数;
或者使用score函数,如scoring = 'roc_auc',根据所选模型不同,评价准则不同,字符串(函数名),或是可调用对象,需要其函数签名,形如:scorer(estimator,X,y)

4,n_jobs:
并行数 建议设置为-1
默认为1
当n_jobs = -1:表示使用所有处理器

6,(iid略过了)

7,refit 
(re是重新的意思,fit是构建分类器的时候常用的 它的意思就是用交叉验证得到的最佳参数重新构建一个更好的分类器)
不用管即可 不用写上去
默认为True,程序将会以交叉验证训练集得到的最佳参数,重新对所有可能的训练集与开发集进行,作为最终用于性能评估的最佳模型参数。即在搜索参数结束后,用最佳参数结果再次fit一遍全部数据集。

8,cv 
交叉验证参数 指定折数
默认为None,使用五折交叉验证。
指定fold数量,默认为5(之前版本为3),也可以是yield训练/测试数据的生成器。 
GridSearchCV属性说明
(1) cv_results_ : dict of numpy (masked) ndarrays
具有键作为列标题和值作为列的dict,可以导入到DataFrame中。注意,“params”键用于存储所有参数候选项的参数设置列表。
(2) best_estimator_ : estimator
通过搜索选择的估计器,即在左侧数据上给出最高分数(或指定的最小损失)的估计器,估计器括号里包括选中的参数。如果refit = False,则不可用。
(3)best_score_ :float  
best_estimator的最高分数
(4)best_parmas_ : dict  
在保存数据上给出最佳结果的参数设置
(5)best_index_ : int 
对应于最佳候选参数设置的索引(cv_results_数组)
(6)search.cv_results _ ['params'] 
[search.best_index_]中的dict给出了最佳模型的参数设置,给出了最高的平均分数(search.best_score_)
关于DataFrame(基于pandas)
https://blog.csdn.net/xtfge0915/article/details/52938740
4、进行预测的常用方法和属性
grid.fit(X)  :运行网格搜索
grid_scores_   :给出不同参数情况下的评价结果
predict(X) : 使用找到的最佳参数在估计器上调用预测。
best_params_  :描述了已取得最佳结果的参数的组合
best_score_    :提供优化过程期间观察到的最好的评分
cv_results_  :具体用法模型不同参数下交叉验证的结果

应用举例

from sklearn import svm
from sklearn.model_selection import GridSearchCV
#选择分类器模型,进行相应的网格搜索交叉验证
params = {
            'C': [7.5],
            'gamma': [0.01]
        }
clf_svc = svm.SVC(probability=True)
#print(clf_svc)
gs = GridSearchCV(estimator=clf_svc, param_grid=params, cv=5, n_jobs=3)
gs.fit(X_train, Y_train)
#print(gs.best_params_, gs.best_score_)

#采用搜索得到的最佳参数重新构建分类器并预测
clf_svc = gs.best_estimator_
pred = clf_svc.predict(X_test)
#predict_proba:  模型预测输入样本属于每种类别的概率,概率和为1,每个位置的概率分别对应classe中对应位置的类别标签
pred_porb = clf_svc.predict_proba(X_test)

思路分析

  1. 导入
  2. 设置复杂参数param_grid
  3. 选择分类器
  4. 设置网格搜索交叉验证
  5. 对训练数据进行网格搜索交叉验证
  6. 输出已取得最佳结果的参数的组合
  7. 采用最佳参数重新构建模型 并完成测试
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值