网格法对随机森林调参


随机森林的参数

# 当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

总结

本文介绍了随机森林的参数,并对随机森林使用网格进行调参。

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sunnuan01

一起学习,共同进步

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值