参数 | 含义 |
---|---|
n_estimators | 树的数量,即基评估器的数量。这个参数对随机森林模型的精确性影响是单调的,n_estimators 越大,模型的效果越好。但是,任何一个模型都有决策边界,n_estimators 达到一定的程度之后,随机森林的精确性往往不在上升或开始波动,并且,n_estimators 越大,需要的计算量和内存也越大,训练的时间也会越来越长,对于这个参数,希望在训练难度和模型效果之间取得平衡;默认值在现有版本的sklearn 中是10,但是在即将更新的0.22版本中,这个默认值会被修正为 100 |
random_state | 控制生成森林的模式,用来固定森林中树的随机性,当random_state 固定时,随机森林中生成是一组固定的树 |
bootstrap | 控制抽样技术参数,boostrap 默认为TRUE ,代表采用有放回的随机抽样技术 |
oob_score | 被忽略或者一次都没被采集到的样本叫做obb 袋外数据;即在使用随机森林时,可以不划分测试集和训练集,用袋外数据即可测试;将oob_score=True ,训练完毕后,可以用obb_score_ 查看在袋外数据上的测试结果 |
cirterion | 不纯度衡量指标,有基尼系数和信息熵两种选择 |
max_depath | 树的最大深度,超过最大深度的树枝都会剪掉 |
min_samples_leaf | 一个节点在分枝后的每个子节点都必须包含至少min_samples_leaf个训练样本,否则分支都不会发生 |
min_samples_split | 一个节点必须包含至少min_samples_split个训练样本,这个节点才允许分枝,否则不允许分枝 |
max_features | 限制分枝时考虑的特征个数,超过限制个数的特征都会被舍弃,默认值为总特征个数开平方取整 |
min_impurity_decrease | 限制信息增益的大小,信息增益小于设定数值的分枝不会发生 |
from sklearn.ensemble import RandomForestRegression
Criterion
不一致Criterion
参数,回归树衡量分支质量的指标,支持的标准有三种参数 | 含义 |
---|---|
mse | 使用均方误差(mean squared error(MSE) ,父节点与子节点之间的均方误差的差额将被用来作为特征选择的标准,这种方法通过使用叶子结点的均值来最小化L2损失 |
friedman_mse | 使用费尔德曼均方误差,这种指标使用费尔德曼针对潜在分支中的问题改进后的均方误差 |
mae | 使用绝对平均误差(mean absolute error) ,这种指标使用叶节点的中值来最小化L1 损失 |
分类
from sklearn.ensemble import RandomForestClassifier
obb_score_
重要参数
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_wine
wine=load_wine()
rfc=RandomForestClassifier(n_estimators=25,oob_score=True)
rfc=rfc.fit(wine.data,wine.target)
rfc.oob_score_ #0.9606741573033708
随机森林与决策树的效果对比
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
wine=load_wine()
#随机森林与决策树的对比
x_train,x_test,y_train,y_test=train_test_split(wine.data,wine.target,test_size=0.3)
clf=DecisionTreeClassifier(random_state=0)
rfc=RandomForestClassifier(random_state=0)
clf=clf.fit(x_train,y_train)
rfc=rfc.fit(x_train,y_train)
score_c=clf.score(x_test,y_test)
score_r=rfc.score(x_test,y_test)
print(score_c,score_r) #0.8518518518518519 0.9629629629629629
随机森林与决策树在一组交叉验证下的效果对比
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_wine
from sklearn.model_selection import cross_val_score
import matplotlib.pyplot as plt
%matplotlib inline
wine=load_wine()
rfc=RandomForestClassifier(n_estimators=25)
rfc_s=cross_val_score(rfc,wine.data,wine.target,cv=10)
clf=DecisionTreeClassifier()
clf_s=cross_val_score(clf,wine.data,wine.target,cv=10)
plt.plot(range(1,11),rfc_s,label='RandomForest')
plt.plot(range(1,11),clf_s,label='DecisionTree')
plt.legend()
plt.show()
随机森林与决策树在十组交叉验证下的效果对比
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_wine
from sklearn.model_selection import cross_val_score
import matplotlib.pyplot as plt
%matplotlib inline
wine=load_wine()
rfc_l=[]
clf_l=[]
for i in range(10):
rfc=RandomForestClassifier(n_estimators=25)
rfc_s=cross_val_score(rfc,wine.data,wine.target,cv=10).mean()
rfc_l.append(rfc_s)
clf=DecisionTreeClassifier()
clf_s=cross_val_score(clf,wine.data,wine.target,cv=10).mean()
clf_l.append(clf_s)
plt.plot(range(1,11),rfc_l,label="RangeForest")
plt.plot(range(1,11),clf_l,label='DecisionTree')
plt.legend()
plt.show()