随机森林参数记录
- 1、先用默认参数看预测结果
- 2、然后用gridsearchcv探索n_estimators的最佳值
- 3、然后确定n_estimators,据此再搜索另外两个参数:再对内部节点再划分所需最小样本数min_samples_split和叶子节点最少样本数min_samples_leaf一起调参
param_test3= {‘min_samples_split’:range(80,150,20), ‘min_samples_leaf’:range(10,60,10)} - 4、最后我们再对最大特征数max_features做调参: param_test4= {‘max_features’:range(3,11,2)}
- 5、最后用得到的参数再次带入模型,得到结果。
import pandas as pd
import numpy as np
from sklearn.ensemble import RandomForestClassifier
from sklearn.grid_search import GridSearchCV
from sklearn import cross_validation, metrics
import matplotlib.pylab as plt
%matplotlib inline
train= pd.read_csv('C:\\Users\\86349\\Desktop\\train_modified\\train_modified.csv')
target='Disbursed'
IDcol= 'ID'
train['Disbursed'].value_counts()
0 19680
1 320
Name:Disbursed, dtype: int64
x_columns = [x for x in train.columns if x not in [target,IDcol]]
X = train[x_columns]
y = train['Disbursed']
rf0 = RandomForestClassifier(oob_score=True, random_state=10)
rf0.fit(X,y)
print rf0.oob_score_
y_predprob = rf0.predict_proba(X)[:,1]
print "AUC Score (Train): %f" % metrics.roc_auc_score(y,y_predprob)
param_test1= {'n_estimators':range(10,71,10)}
gsearch1= GridSearchCV(estimator = RandomForestClassifier(min_samples_split=100,
min_samples_leaf=20,max_depth=8,max_features='sqrt' ,random_state=10),
param_grid =param_test1, scoring='roc_auc',cv=5)
gsearch1.fit(X,y)
gsearch1.grid_scores_,gsearch1.best_params_, gsearch1.best_score_
([mean:0.80681, std: 0.02236, params: {'n_estimators': 10},
mean: 0.81600, std: 0.03275, params:{'n_estimators': 20},
mean: 0.81818, std: 0.03136, params:{'n_estimators': 30},
mean: 0.81838, std: 0.03118, params:{'n_estimators': 40},
mean: 0.82034, std: 0.03001, params:{'n_estimators': 50},
mean: 0.82113, std: 0.02966, params:{'n_estimators': 60},
mean: 0.81992, std: 0.02836, params:{'n_estimators': 70}],
{'n_estimators':60},
0.8211334476626017)
param_test2= {'max_depth':range(3,14,2), 'min_samples_split':range(50,201,20)}
gsearch2= GridSearchCV(estimator = RandomForestClassifier(n_estimators= 60,
min_samples_leaf=20,max_features='sqrt' ,oob_score=True,random_state=10),
param_grid = param_test2,scoring='roc_auc',iid=False, cv=5)
gsearch2.fit(X,y)
gsearch2.best_score_
{'max_depth':13, 'min_samples_split': 110},
0.8242016800050813)
rf1= RandomForestClassifier(n_estimators= 60, max_depth=13, min_samples_split=110,
min_samples_leaf=20,max_features='sqrt' ,oob_score=True,random_state=10)
rf1.fit(X,y)
printrf1.oob_score_
param_test3= {'min_samples_split':range(80,150,20), 'min_samples_leaf':range(10,60,10)}
gsearch3= GridSearchCV(estimator = RandomForestClassifier(n_estimators= 60,max_depth=13,
max_features='sqrt' ,oob_score=True, random_state=10),
param_grid = param_test3,scoring='roc_auc',iid=False, cv=5)
gsearch3.fit(X,y)
gsearch2.best_score_
{'min_samples_leaf':20, 'min_samples_split': 120},
0.8248650279471544)
param_test4= {'max_features':range(3,11,2)}
gsearch4= GridSearchCV(estimator = RandomForestClassifier(n_estimators= 60,max_depth=13, min_samples_split=120,
min_samples_leaf=20 ,oob_score=True, random_state=10),
param_grid = param_test4,scoring='roc_auc',iid=False, cv=5)
gsearch4.fit(X,y)
gsearch4.grid_scores_,gsearch4.best_params_, gsearch4.best_score_
([mean:0.81981, std: 0.02586, params: {'max_features': 3},
mean: 0.81639, std: 0.02533, params:{'max_features': 5},
mean: 0.82487, std: 0.02110, params:{'max_features': 7},
mean: 0.81704, std: 0.02209, params:{'max_features': 9}],
{'max_features':7},
0.8248650279471544)
rf2= RandomForestClassifier(n_estimators= 60, max_depth=13, min_samples_split=120,
min_samples_leaf=20,max_features=7 ,oob_score=True, random_state=10)
rf2.fit(X,y)
printrf2.oob_score_
logistic参数调优记录
- 1、先用默认参数预测结果
- 2、正则化参数选择,penalty,L1 or L2
- 3、优化算法选择器:solver,liblinear,lbfgs、newton-cg、sag
- 4、类型权重参数:class_weight,class_weight={0:0.9, 1:0.1}
由于不同类别数量不同,因此调高权重,还有误分类代价很高情况等。 - 5、正则化参数C
xgboost调参过程记录
1、xgboost参数主要分为三种:
- General Parameters:控制总体的功能
- Booster Parameters:控制单个学习器的属性
- Learning Task Parameters:控制调优的步骤
2、General Parameters 参数
- booster [default=gbtree]
选择每一次迭代中,模型的种类,有两个选择,gbtree:基于树的选择,gblearnear:线性模型 - silent[default=0]
设置为1则不打印执行信息,0则打印信息 - nthread [default to maximum number of threads available if not set]
几个核并发
3、Booster Parameters 有两种booster,通常树的booster较为常用
- eta [default=0.3] learning_rate
- 类似GBM里面的学习率
- 通过在每一步中缩小权重来让模型更加鲁棒
- 一般常用的数值:0.01-0.2
- min_child_weigh [default=1]
- 这个参数用来控制过拟合
- 定义每个child的最小权重
- 如果太大导致欠拟合
- max_depth[default=6]
- 树的最大深度
- 控制过拟合,如果深度太大导致过拟合
- 用CV调节,设置3-10
- max_lear_nodes
- 叶节点的最大值
- 如果叶节点确定了,二叉树高度也就确定了,以叶子树的高度为准
- gamma [default=0]
- 如果分裂能够使loss函数减小的值大于gamma,则这个节点才分裂,gamma设置了这个减小的最低阈值,如果gamma设置为0,表示只要使得loss函数减小,就分裂
- 这个值和具体的loss函数相关,需要调节
- max_delta_step[default=0]
- 如果设置为0,表示没有限制,如果设置为正值,会使得更新更加谨慎。不常用
- subsample[default=1]
- subsample对原始数据集进行随机采样来构建单个数,0.8表示抽取80%的个体来构建树
- 一般为0.5-1之间
- colsample_bytree[default=1]
- 创建树的时候,从所有列中选取的比例,0.8表示随机抽取80%的列来创建树
- 一般为0.5-1之间
- lambda[default=1] reg_lambda
- L2正则化项,可以用来考虑降低过拟合,L2可以防止过分看重某个特定的特征
- alpha[default=0] reg_alpha
- L1正则,类似lasso
- L2正则有助于产生稀疏的数据,有助于提升计算速度
4、Learning Task Parameters
- objective [default=reg:linear]
- 定义损失函数
- binary:logistic——二分类逻辑回归,返回预测的概率
- multi:softmax——多分类用softmax,需要设置num_class参数
- multi:softprob——返回属于各个分类的概率
- eval_metric[default according to objective]
- 评价验证数据的参数,回归默认rmse,分类一般为error
- rmse、mae、logloss、error、merror、mlogloss、auc
- seed[default=0]
- 为了产生能够重现的结果,如果不设置,每次产生的结果都不同
5、调参步骤
* 参数不大,采用GrideSearchCV来验证
* 设置初始参数,比如全部默认参数
* 保持learning rate 和其他booster参数不变,条件estimators参数
* 固定estimator,调节learning rate
* 固定learning rate,调节booste相关参数,首先从max_depth、min_child_weight开始,逐步调节可能有影响的booster参数
* 固定booster参数,GridSearchCV learning rate ,得到最佳的learning rate值
* 得到一组最终参数,过程类似上面描述的RandomForest的调参过程。