gridsearchcv怎么调参
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gridsearchcv怎么调参相关的知识,希望对你有一定的参考价值。
参考技术A python sikit-learn包中有调参示例。网址http://scikit-learn.org。或者,有做随机森林或xgboost调参用到了这个函数。查一下
【zt】LogisticRegression 调参 & GridSearchCV
参考技术A 资料目录:1. LogisticRegression()参数解析
2. sklearn-GridSearchCV,CV调节超参使用方法
=====================================================================
C : float, optional (default=1.0)
Inverse of regularization strength; must be a positive float. Like in support vector machines, smaller values specify stronger regularization.
C为正则化系数λ的倒数,必须为正数,默认为1。和SVM中的C一样,值越小,代表正则化越强。
class_weight : dict, ‘auto’, optional 考虑类不平衡,类似于代价敏感
Over-/undersamples the samples of each class according to the given weights. If not given, all classes are supposed to have weight one. The ‘auto’ mode selects weights inversely proportional to class frequencies in the training set.
penalty : 正则化参数:’l1’,’l2’.默认是’l2’。
在调参时如果我们主要的目的只是为了解决过拟合,一般penalty选择L2正则化就够了。但是如果选择L2正则化发现还是过拟合,即预测效果差的时候,就可以考虑L1正则化。 另外,如果模型的特征非常多,我们希望一些不重要的特征系数归零,从而让模型系数稀疏化的话,也可以使用L1正则化。
penalty参数的选择会影响我们损失函数优化算法的选择。即参数solver的选择。
solver: 逻辑回归损失函数的优化方法,有四种算法供选择
‘newton-cg’:坐标轴下降法来迭代优化损失函数
‘lbfgs’:, ‘liblinear’:牛顿法变种
‘sag’:随机梯度下降
其中‘newton-cg’, ‘lbfgs’, ‘sag’只适用于L2惩罚项的优化,liblinear两种都适用。因为L1正则化的损失函数不是连续可导的,而‘newton-cg’, ‘lbfgs’,‘sag’这三种优化算法时都需要损失函数的一阶或者二阶连续导数。而‘liblinear’并没有这个依赖。
当样本数目比较大时,使用sag效果较好,因为它只使用一部分样本进行训练。
a) liblinear:使用了开源的liblinear库实现,内部使用了坐标轴下降法来迭代优化损失函数。
b) lbfgs:拟牛顿法的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。
c) newton-cg:也是牛顿法家族的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。
d) sag:即随机平均梯度下降,是梯度下降法的变种,和普通梯度下降法的区别是每次迭代仅仅用一部分的样本来计算梯度,适合于样本数据多的时候。
小结:
multi_class
‘ovr’, ‘multinomial’, default: ‘ovr’
OvR的思想很简单,无论你是多少元逻辑回归,我们都可以看做二元逻辑回归。multinomial相对复杂。
官网有个对比两种分类方式的例子: 链接地址 。
class_weight :类型权重参数。
用于标示分类模型中各种类型的权重。默认不输入,即所有的分类的权重一样。选择‘balanced’自动根据y值计算类型权重。自己设置权重,格式:class_label: weight。例如0,1分类的er'yuan二元模型,设置class_weight=0:0.9, 1:0.1,这样类型0的权重为90%,而类型1的权重为10%。
n_jobs=1 : 并行数
int:个数;-1:跟CPU核数一致;1:默认值。
其他参数:
dual=False: 对偶或者原始方法。Dual只适用于正则化相为l2的‘liblinear’的情况,通常样本数大于特征数的情况下,默认为False。
fit_intercept=True: 是否存在截距,默认存在。
intercept_scaling=1: 仅在正则化项为‘liblinear’,且fit_intercept设置为True时有用。
max_iter=100: 算法收敛的最大迭代次数。
tol=0.0001: 迭代终止判据的误差范围。
verbose=0: 日志冗长度int:冗长度;0:不输出训练过程;1:偶尔输出; >1:对每个子模型都输出
warm_start=False: 是否热启动,如果是,则下一次训练是以追加树的形式进行(重新使用上一次的调用作为初始化)。布尔型,默认False。
LogisticRegression类的常用方法
fit(X, y, sample_weight=None)
拟合模型,用来训练LR分类器,其中X是训练样本,y是对应的标记向量
返回对象,self。
fit_transform(X, y=None, **fit_params)
fit与transform的结合,先fit后transform。返回X_new:numpy矩阵。
predict(X)
用来预测样本,也就是分类,X是测试集。返回array。
predict_proba(X)
输出分类概率。返回每种类别的概率,按照分类类别顺序给出。如果是多分类问题,multi_class="multinomial",则会给出样本对于每种类别的概率。
返回array-like。
score(X, y, sample_weight=None)
返回给定测试集合的平均准确率(mean accuracy),浮点型数值。
对于多个分类返回,则返回每个类别的准确率组成的哈希矩阵。
上述内容汇总自不同网站,但多数内容来自于这个链接:https://www.jianshu.com/p/e51e92a01a9c
-----------------------------------------------------------------------------------------------
【其他】
sklearn-GridSearchCV,CV调节超参使用方法:https://blog.csdn.net/u012969412/article/details/72973055
GridSearchCV 简介:
GridSearchCV,它存在的意义就是自动调参,只要把参数输进去,就能给出最优化的结果和参数。但是这个方法适合于小数据集,一旦数据的量级上去了,很难得出结果。这个时候就是需要动脑筋了。数据量比较大的时候可以使用一个快速调优的方法——坐标下降。它其实是一种贪心算法:拿当前对模型影响最大的参数调优,直到最优化;再拿下一个影响最大的参数调优,如此下去,直到所有的参数调整完毕。这个方法的缺点就是可能会调到局部最优而不是全局最优,但是省时间省力,巨大的优势面前,还是试一试吧,后续可以再拿bagging再优化。回到sklearn里面的GridSearchCV,GridSearchCV用于系统地遍历多种参数组合,通过交叉验证确定最佳效果参数。
GridSearchCV官方网址: http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html
常用参数解读:
estimator :所使用的分类器,如estimator=RandomForestClassifier(min_samples_split=100,min_samples_leaf=20,max_depth=8,max_features='sqrt',random_state=10), 并且传入除需要确定最佳的参数之外的其他参数。每一个分类器都需要一个scoring参数,或者score方法。
param_grid :值为字典或者列表,即需要最优化的参数的取值,param_grid =param_test1,param_test1 = 'n_estimators':range(10,71,10)。
scoring : 准确度评价标准,默认None,这时需要使用score函数;或者如scoring='roc_auc',根据所选模型不同,评价准则不同。字符串(函数名),或是可调用对象,需要其函数签名形如:scorer(estimator, X, y);如果是None,则使用estimator的误差估计函数。scoring参数选择如下:
参考地址: http://scikit-learn.org/stable/modules/model_evaluation.html
cv :交叉验证参数,默认None,使用三折交叉验证。指定fold数量,默认为3,也可以是yield训练/测试数据的生成器。
refit :默认为True,程序将会以交叉验证训练集得到的最佳参数,重新对所有可用的训练集与开发集进行,作为最终用于性能评估的最佳模型参数。即在搜索参数结束后,用最佳参数结果再次fit一遍全部数据集。
iid :默认True,为True时,默认为各个样本fold概率分布一致,误差估计为所有样本之和,而非各个fold的平均。
verbose :日志冗长度,int:冗长度,0:不输出训练过程,1:偶尔输出,>1:对每个子模型都输出。
n_jobs: 并行数,int:个数,-1:跟CPU核数一致, 1:默认值。
pre_dispatch :指定总共分发的并行任务数。当n_jobs大于1时,数据将在每个运行点进行复制,这可能导致OOM,而设置pre_dispatch参数,则可以预先划分总共的job数量,使数据最多被复制pre_dispatch次
常用方法:
grid.fit():运行网格搜索
grid_scores_:给出不同参数情况下的评价结果
best_params_:描述了已取得最佳结果的参数的组合
best_score_:成员提供优化过程期间观察到的最好的评分
以上是关于gridsearchcv怎么调参的主要内容,如果未能解决你的问题,请参考以下文章
机器学习系列调参GridsearchCV随机森林GBDTLightGBM和XGBoost调参顺序,外加一些加速调参的小技巧(主要介绍坐标下降)
sklearn学习8-----GridSearchCV(自动调参)
【zt】LogisticRegression 调参 & GridSearchCV
XGBoost模型调参:GridSearchCV方法网格搜索优化参数