【机器学习】集成学习:使用scikitLearn中的RandomForestClassifier及RandomForestRegressor实现随机森林

36 篇文章 5 订阅
27 篇文章 3 订阅

集成学习导航:决策树与随机森林
【机器学习】使用scikitLearn进行决策树分类与回归:DecisionTreeClassifier及DecisionTreeRegressor
【机器学习】集成学习:使用scikitLearn中的VotingClassifier综合多个不同模型进行软硬投票
【机器学习】集成学习:使用scikitLearn中的BaggingClassifier实现bagging和pasting策略
【机器学习】集成学习:scikitLearn实现AdaBoost及梯度提升GradientBoosting,及XGBT库

在scikitLearn中,随机森林有两种实现方法,
(1)组合BaggingClassifier以及DecisionTreeClassifier,通过bagging及pasting方法建立综合预测模型。
代码如下:

bag_clf = BaggingClassifier(
    DecisionTreeClassifier(max_features="sqrt", max_leaf_nodes=16),
    n_estimators=500, random_state=42)
bag_clf.fit(X_train, y_train)
y_pred = bag_clf.predict(X_test)

(2)使用RandomForestClassifier类,对于回归则有RandomForestRegressor。
第一种方法已经介绍过,第二种方法的示例代码如下:

from sklearn.ensemble import RandomForestClassifier
rnd_clf = RandomForestClassifier(n_estimators=500, max_leaf_nodes=16, random_state=42)
rnd_clf.fit(X_train, y_train)
y_pred_rf = rnd_clf.predict(X_test)

RandomForestClassifier类在某个特征子集里寻找最优特征,相当于施加了某种正则化,以单个预测模型更高的偏差,换取整体更低的方差。

进一步,如果对特征使用随机阈值,而不是搜寻到的最优阈值,可以进一步使随机森林随机化。这种产生决策树的方式为Extra-Trees,极端树。
其代码如下:

from sklearn.ensemble import ExtraTreesClassifier
# 5棵树、2个特征、评判指标是熵
extra_tree_forest = ExtraTreesClassifier(n_estimators=5,
                                         criterion='entropy', max_features=2)
extra_tree_forest.feature_importances_                                                              

使用feature_importances_变量可以反映每个特征的重要程度

下面使用minist数据集,将手写数字图片用随机森林进行预测,并可视化每个像素的重要程度,代码如下:

from sklearn.datasets import fetch_openml

mnist = fetch_openml('mnist_784', version=1, as_frame=False)
mnist.target = mnist.target.astype(np.uint8)
rnd_clf = RandomForestClassifier(n_estimators=100, random_state=42)
rnd_clf.fit(mnist["data"], mnist["target"])
#绘图用,将重要性结果转为与原图相同大小的图片
def plot_digit(data):
    image = data.reshape(28, 28)
    plt.imshow(image, cmap = mpl.cm.hot,
               interpolation="nearest")
    plt.axis("off")
#绘图feature_importances_对应的数组和为1
plot_digit(rnd_clf.feature_importances_)

cbar = plt.colorbar(ticks=[rnd_clf.feature_importances_.min(), rnd_clf.feature_importances_.max()])
cbar.ax.set_yticklabels(['Not important', 'Very important'])
plt.show()

最终输出为:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

颢师傅

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值