绘制随机森林每棵树的决策边界

首先导入必要的库函数:

from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import make_moons
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
import numpy as np
import mglearn

使用make_moons数据集构造一个有5棵树的随机森林模型,观察每棵树的决策边界。

X, y = make_moons(n_samples=100,noise=0.25,random_state=3)
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, random_state=42)forest = RandomForestClassifier(n_estimators=5,random_state=2)
forest.fit(X_train,y_train)

随机森林用到了ensemble集成的思想,即使用多棵决策树集成一个随机森林模型,并通过自助采样(从n_samples个数据点中有放回地重复随机抽取一个样本,并抽取n_samples次),并对每个结点使用的特征(单棵决策树使用特征进行决策:if/else)进行随机选择,保证随机森林中每一棵树都是随机的(两两不同),这样保证了每棵树都是随机的,优化了决策树过拟合的缺点。

加下来查看随机森林中五棵树的决策边界:

fig, axes = plt.subplots(2,3,figsize=(20,10))
for i, (ax, tree) in enumerate(zip(axes.ravel(),forest.estimators_)):ax.set_title("Tree {}".format(i))mglearn.plots.plot_tree_partition(X_train, y_train, tree, ax=ax)mglearn.plots.plot_2d_separator(forest, X_train, fill=True, ax=axes[-1,-1],alpha=.4)
axes[-1,-1].set_title("Random Forest")
mglearn.discrete_scatter(X_train[:,0],X_train[:,1],y_train)

输出如下:

可以看到每棵树的决策边界差异都不小,最终集成的随机森林模型的决策边界会变得非常平滑。

使用随即森林进行特征选择

由于决策树自身就可以进行特征选择,因此对于其集成的随机森林,进行特征选择更不在话下。此外,其特征选择的能力往往比单棵决策树好。使用乳腺癌数据集训练一个由100棵决策树集成的随机森林模型,并进行特征选择。

from sklearn.datasets import load_breast_cancer
cancer = load_breast_cancer()X_train, X_test, y_train, y_test = train_test_split(cancer.data, cancer.target, random_state=66)
forest.fit(X_train,y_train)print("Acc on training set:{:.2f}".format(forest.score(X_train,y_train)))
print("Acc on test set:{:.2f}".format(forest.score(X_test,y_test)))
Acc on training set:0.99
Acc on test set:0.95
def plot_feature_importances_cancer(model):n_features = cancer.data.shape[1]plt.barh(range(n_features), model.feature_importances_, align="center")plt.yticks(np.arange(n_features), cancer.feature_names)plt.xlabel("Feature importance")plt.ylabel("Feature")plot_feature_importances_cancer(forest)


显然,相较于决策树的特征选择结果,随机森林能够选择更多的特征。下面是使用单棵决策树在乳腺癌数据集上的特征选择结果。

使用随机森林进行特征选择相关推荐

  1. R语言基于随机森林进行特征选择(feature selection)

    R语言基于随机森林进行特征选择(feature selection) 目录 R语言基于随机森林进行特征选择(feature selection)

  2. 利用随机森林进行特征选择

    随机森林中的特征重要性 随机森林算法示意图 利用随机森林选择特征可参看论文Variable selection using Random Forests. 用随机森林进行特征重要性评估的思想其实很简单 ...

  3. 使用随机森林做特征选择

    目录 一.介绍 二.实验 2.1 实验数据 2.2 特征选择 一.介绍 随机森林模型不仅在预测问题上有着广泛的应用,在特征选择中也有一定的应用,这是因为,随机森林模型在拟合数据后,会对数据属性列,有一 ...

  4. matlab随机森林特征选择,使用随机森林做特征选择

    目录 一.介绍 随机森林模型不仅在预测问题上有着广泛的应用,在特征选择中也有一定的应用,这是因为,随机森林模型在拟合数据后,会对数据属性列,有一个变量重要性的度量,在sklearn中即为随机森林模型的 ...

  5. 随机森林特征个数mtry matlab,基于随机森林的特征选择算法

    2.1 算法描述 本文提出了一种基于随机森林的Wrapper特征选择方法RFFS,利用随机森林算法的变量重要性度量对特征进行排序,然后采用序列后向搜索方法,每次从特征集合中去掉一个最不重要(重要性得分 ...

  6. 【Machine Learning】使用随机森林进行特征选择

    一.特征选择 在我们做特征工程时,当我们提取完特征后,可能存在并不是所有的特征都能分类起到作用的问题,这个时候就需要使用特征选择的方法选出相对重要的特征用于构建分类器.此外,使用特征选择这一步骤也大大 ...

  7. python随机森林的特征选择(mean_decrease_accuracy)

    sklearn自带的特征重要性(feature_importances_)基于基尼杂质,即Mean decrease impurity,预测变量影响时可能有不小偏差,所以14年的这篇blog提出选用M ...

  8. 对于随机森林的通俗理解

    原文:http://blog.csdn.net/mao_xiao_feng/article/details/52728164 对于随机森林的通俗理解 一.决策树 决策树是机器学习最基本的模型,在不考虑 ...

  9. Spark 和 Python.sklearn:使用随机森林计算 feature_importance 特征重要性

    前言 在使用GBDT.RF.Xgboost等树类模型建模时,往往可以通过feature_importance 来返回特征重要性,本文以随机森林为例介绍其原理与实现.[ 链接:机器学习的特征重要性究竟是 ...

最新文章

  1. 数据库存储引擎大揭秘,不看不知道这里面的骚操作可真多!
  2. 我的Ubuntu9.10配置(随时更新)
  3. Linux基础之命令练习Day2-useradd(mod,del),groupadd(mod,del),chmod,chown,
  4. 163 邮件 服务器 ssl,为什么用163的smtp服务时要关闭TLS才能发送邮件?
  5. STC51-串口通信
  6. 零基础学前端可行吗?要如何学习呢?
  7. 输出高电平程序c语言,51用c语言怎么编程检测US-100超声波测距模块echo/rx引脚输出高电平时间长度,,谁能给我个模板...
  8. halcon窗体的移动和缩放_Halcon hWindowControl 鼠标缩放平移区域模板匹配绘制
  9. ehcache 实现缓存共享
  10. 关于“绞刑架和职业发展”问题带来的思考
  11. 3.1 广义线性模型 And XGBoost
  12. UWB源码资料 研创物联源码资料 可二次开发 dwm1000模块 双边双向测距
  13. java 一元二次方程_java求解一元二次方程
  14. python输出课程表
  15. 票总管代账版行业解决方案
  16. 计算机导论11.29课后总结
  17. Day13-寻觅踪迹
  18. Discuz被挂马的处理经验,Dz为什么会被挂马
  19. 【剑指Offer】个人学习笔记_61_扑克牌中的顺子
  20. 2021-09-29 Unity WebGL平台开发遇到的坑

热门文章

  1. 【漫画】4.23 世界读书日,今天读这几本好书 !
  2. C语言差异化定价,信息不对称下的产品差异化与定价研究
  3. xamarin其是一个鸡肋么?
  4. JS中的遍历、点击、排他
  5. Python手绘图了解一下!
  6. Android(让你的安卓模拟器链接网络)
  7. 改造layui-树(tree)组件的添加、编辑、删除操作(补充上一篇)
  8. mysql实现可重复读(解决幻读)的原理(MVCC机制的版本链和读视图)
  9. mysql教程 主键_MySQL创建主键
  10. Adversarial PoseNet: A Structure-aware Convolutional Network for Human Pose Estimation