随机森林参数及参数调优

随机森林参数意义

sklearn.ensemble.RandomForestClassifier(n_estimators=100, *, criterion='gini', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features='sqrt', max_leaf_nodes=None, min_impurity_decrease=0.0, bootstrap=True, oob_score=False, n_jobs=None, random_state=None, verbose=0, warm_start=False, class_weight=None, ccp_alpha=0.0, max_samples=None)

n_estimators:

森林中数的个数。
这个属性是典型的模型表现与模型效率成反比的影响因子,即便如此,应该尽可能提高这个数字,以让模型更准确更稳定。

criterion :

度量分裂的标准。
可选值:“mse”,均方差(mean squared error);“mae”,平均绝对值误差(mean absolute error)
支持的标准是基尼杂质的“gini(基尼)”和信息增益的“entropy(熵)”。注意:此参数是特定于树的。

max_features :

寻找最佳分裂点时考虑的特征数目。
可选值,int(具体的数目),float(数目的百分比),string(“auto”, “sqrt”,“log2”).
这一属性是对单个树来设置的,通常来讲,这个值越大单棵树可以考虑的属性越多,则模型的表现就越好。但是这也不是肯定的,不过有一点是肯定的,增加这个值会导致算法运行速度变慢,所以需要我们考虑去达到一个平衡。

max_depth :
树的最大深度
integer或者None。树的最大深度,如果None,节点扩展直到所有叶子是纯的或者所有叶子节点包含的样例数小于min_samples_split

min_samples_split :
分裂内部节点需要的最少样例数,默认值是2
int(具体数目),float(数目的百分比)

min_samples_leaf :
叶子节点上应有的最少样例数,默认值是1。
int(具体数目),float(数目的百分比)。
更少的节点数使得模型更容易遭受noise data的影响。

max_leaf_nodes :
最大叶子节点数。
以”最优优先方式”(best-first fashion),最优节点定义为:纯度的相对减少.如果None则不限制叶子节点个数;[float]

min_impurity_split :
树增长提前结束的阈值。
对于当前节点,大于这个阈值将分裂,否则就看做叶子节点; [float]

min_impurity_decrease :
一个阈值,表示一个节点分裂的条件是:如果这次分裂纯度的减少大于等于这这个值.

bootstrap :
构建数是不是采用有放回样本的方式(bootstrap samples); [True/False]

oob_score :
交叉验证相关的属性。

n_jobs :

设定fit和predict阶段并列执行的任务个数,如果设置为-1表示并行执行的任务数等于计算级核数; [integer, optional (default=1)]

random_state :
如果是int数值表示它就是随机数产生器的种子.如果指定RandomState实例,它就是随机产生器的种子.如果是None,随机数产生器是np.random所用的RandomState实例; [int, RandomState instance or None, optional (default=None)]

随机森林调参

RandomizedSearchCV这个函数可以帮助我们在候选集组合中,随机地选择几组合适的参数来建模,并且求其交叉验证后的评估结果。以此来大致地找到一个最合适的参数。

from sklearn.model_selection import RandomizedSearchCV

criterion=['mse','mae']
n_estimators = [int(x) for x in np.linspace(start = 1000, stop = 1500, num = 10)]
max_features = ['auto','sqrt']
max_depth = [int(x) for x in np.linspace(10, 30, num = 5)]
max_depth.append(None)
min_samples_split = [9, 10, 11]
min_samples_leaf = [2, 3, 5]
bootstrap = [True, False]

random_grid = {'criterion':criterion,
                'n_estimators': n_estimators,
               'max_features': max_features,
               'max_depth': max_depth,
               'min_samples_split': min_samples_split,
               'min_samples_leaf': min_samples_leaf,
               'bootstrap': bootstrap}

#构建模型
clf= RandomForestRegressor()
clf_random = RandomizedSearchCV(estimator=clf,
                                param_distributions=random_grid,
                                n_iter = 10,
                                cv = 3,
                                verbose=2,
                                random_state=42,
                                n_jobs=1)
#回归
clf_random.fit(X_train, y_train)
print (clf_random.best_params_)
print(clf_random.best_score_)

RandomizedSearchCV 参数说明:

estimator:RandomizedSearchCV 这个方法是一个通用的,并不是专为随机森林设计的,所以我们需要指定选择的算法模型是什么。
distributions:参数的候选空间,就是我们用字典格式给出的参数候选值。
n_iter:随机寻找参数组合的个数,比如在这里我们赋值了 100,代表接下来要随机找 100 组参数的组合,然后在其中找到最好的一组。
scoring:模型的评估方法,即按照该方法去找到最好的参数组合。
cv:几折交叉验证。
random_state:随机种子,为了使得咱们的结果能够一致,排除掉随机成分的干扰,一般我们都会指定成一个值。
n_jobs:多进程训练,如果是 -1 就会用所有的 CPU。

模型保存

调用sklearn中joblib

import joblib
#save model
joblib.dump(rf, 'model/rf.pkl')
#load model
rf = joblib.load('model/rf.pkl')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值