随机森林的参数
# 当n足够大时,这个概率收敛于1-(1/e),约等于0.632。因此,会有约37%的训练数据被浪费掉,没有参与建模,
# 这些数据被称为袋外数据(out of bag data,简写为oob)。除了我们最开始就划分好的测试集之外,这些数据也可
# 以被用来作为集成算法的测试集。,在使用随机森林时,我们可以不划分测试集和训练集,只需要用袋外数据来测试我们的模型即可
rf = RandomForestClassifier(n_estimators=100,#基评估器的个数
criterion='gini',#不纯度衡量的指标
max_depth=None,#树的最大深度
min_samples_split=2,#一个节点必须要包含至少min_samples_split个训练样本,这个节点才允许被分枝,否则分枝就不会发生
min_samples_leaf=1,#一个节点在分枝后的每个子节点都必须包含至少min_samples_leaf个训练样本,否则分枝就不会发生
min_weight_fraction_leaf=0.0,
max_features='auto',#max_features限制分枝时考虑的特征个数,超过限制个数的特征都会被舍弃,默认值为总特征个数开平方取整
max_leaf_nodes=None,
min_impurity_decrease=0.0,#限制信息增益的大小,信息增益小于设定数值的分枝不会发生
min_impurity_split=None,
bootstrap=True,#有放回的随机抽样,不同的训练集来进行训练
oob_score=True,#希望用袋外数据来测试,将oob_score这个参数调整为True,oob_score_来查看我们的在袋外数据上测试的结果
n_jobs=None,
random_state=None,#控制的是生成森林的模式,随机挑选特征进行分枝“的方法得到的随机性
verbose=0,
warm_start=False,
class_weight=None,
ccp_alpha=0.0,
max_samples=None,)
rf.fit(wine.data,wine.target)
rf.oob_score_
# n_estimators,random_state,boostrap和oob_score这四个参数
# .estimators_ 和 .oob_score_ ,feature_importances_重要属性
#接口:apply, fit, predict和score,predict_proba
# apply中输入测试集返回每个测试样本所在的叶子节点的索引
一、使用步骤
1.交叉验证进行尝试
代码如下(示例):
# 将随机森林用到我们的数据集上
import pandas as pd
data = pd.read_csv(r'F:\教师培训\ppd7\df_Master_clean.csv',encoding='gb18030')
x = data[data.target.notnull()].drop(columns=['Idx', 'target', 'sample_status', 'ListingInfo'])
y = data[data.target.notnull()]['target']
x_train,x_test, y_train, y_test = train_test_split(x,y,random_state=2,test_size=0.2)
rf = RandomForestClassifier(n_estimators=100,#基评估器的个数
criterion='gini',#不纯度衡量的指标
max_depth=None,#树的最大深度
min_samples_split=2,#一个节点必须要包含至少min_samples_split个训练样本,这个节点才允许被分枝,否则分枝就不会发生
min_samples_leaf=1,#一个节点在分枝后的每个子节点都必须包含至少min_samples_leaf个训练样本,否则分枝就不会发生
min_weight_fraction_leaf=0.0,
max_features='auto',#max_features限制分枝时考虑的特征个数,超过限制个数的特征都会被舍弃,默认值为总特征个数开平方取整
max_leaf_nodes=None,
min_impurity_decrease=0.0,#限制信息增益的大小,信息增益小于设定数值的分枝不会发生
min_impurity_split=None,
bootstrap=True,#有放回的随机抽样,不同的训练集来进行训练
oob_score=False,#希望用袋外数据来测试,将oob_score这个参数调整为True,oob_score_来查看我们的在袋外数据上测试的结果
n_jobs=None,
random_state=None,#控制的是生成森林的模式,随机挑选特征进行分枝“的方法得到的随机性
verbose=0,
warm_start=False,
class_weight='balanced',
ccp_alpha=0.0,
max_samples=None,)
rf.fit(x_train,y_train)
cross_val_score(rf, x_test, y_test, cv=5, scoring='roc_auc').mean()#0.6886708208839192
2.调参
# 网格搜索调参
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import StratifiedKFold
rf = RandomForestClassifier(
# n_estimators=180,#基评估器的个数
criterion='gini',#不纯度衡量的指标
max_depth=None,#树的最大深度
min_samples_split=2,#一个节点必须要包含至少min_samples_split个训练样本,这个节点才允许被分枝,否则分枝就不会发生
min_samples_leaf=1,#一个节点在分枝后的每个子节点都必须包含至少min_samples_leaf个训练样本,否则分枝就不会发生
min_weight_fraction_leaf=0.0,
max_features='auto',#max_features限制分枝时考虑的特征个数,超过限制个数的特征都会被舍弃,默认值为总特征个数开平方取整
max_leaf_nodes=None,
min_impurity_decrease=0.0,#限制信息增益的大小,信息增益小于设定数值的分枝不会发生
min_impurity_split=None,
bootstrap=True,#有放回的随机抽样,不同的训练集来进行训练
oob_score=False,#希望用袋外数据来测试,将oob_score这个参数调整为True,oob_score_来查看我们的在袋外数据上测试的结果
n_jobs=None,
random_state=None,#控制的是生成森林的模式,随机挑选特征进行分枝“的方法得到的随机性
verbose=0,
warm_start=False,
class_weight='balanced',
ccp_alpha=0.0,
max_samples=None,)
param = {
'n_estimators':range(50,200,10),
}
gs = GridSearchCV(rf,param,cv=5, scoring='roc_auc')
gs.fit(x_train, y_train)
print('最好参数:{},最好分数{}'.format(gs.best_params_, gs.best_score_))
#最好参数:{'n_estimators': 180},最好分数0.7056792953130344
总结
本文介绍了随机森林的参数,并对随机森林使用网格进行调参。