• 猿创征文|机器学习实战(8)——随机森林


    目录

    1 随机森林

    2 极端随机树

    3 特征重要性

    4 提升法

    4.1 AdaBoost

    4.2 梯度提升


    机器学习实战(7)中我们已经提到,随机森林是决策树的集成,通常用bagging方法训练,训练集大小通过max_samples来设置。除了先构建一个 BaggingClassifier 然后将结果传输到 DecisionTreeClassifier ,还有一种方法就是使用 RandomForestClassifier 类(对于回归任务有RandomForestRegressor类),这种方法更方便。

    1 随机森林

    常规模块的导入以及图像可视化的设置:(注意,本节是基于第7节集成学习的代码继续往下演示的

    1. # Common imports
    2. import numpy as np
    3. import os
    4. # to make this notebook's output stable across runs
    5. np.random.seed(42)
    6. # To plot pretty figures
    7. %matplotlib inline
    8. import matplotlib as mpl
    9. import matplotlib.pyplot as plt
    10. mpl.rc('axes', labelsize=14)
    11. mpl.rc('xtick', labelsize=12)
    12. mpl.rc('ytick', labelsize=12)

    以下代码训练一个拥有500棵树的随机森林分类器(其中每棵树限制为最多16个叶节点):

    1. from sklearn.ensemble import RandomForestClassifier
    2. rnd_clf = RandomForestClassifier(n_estimators=500, max_leaf_nodes=16, n_jobs=-1, random_state=42)
    3. rnd_clf.fit(X_train, y_train)
    4. y_pred_rf = rnd_clf.predict(X_test)
    5. np.sum(y_pred == y_pred_rf) / len(y_pred) # almost identical predictions

    运行结果如下:

    0.936

    除了少数例外(没有splitter(强制为random),没有presort(强制为False),没有max_samples(强制为1.0),没有base_estimator(强制为DecisionTreeClassifier)),RandomForestClassifier 具有 DecisionTreeClassifier 和 BaggingClassifier 的所有超参数,前者用来控制树的生长,后者用来控制集成本身。

    用 BaggingClassifier 实现与上述代码效果相同的效果:

    1. bag_clf = BaggingClassifier(
    2. DecisionTreeClassifier(splitter="random", max_leaf_nodes=16, random_state=42),
    3. n_estimators=500, max_samples=1.0, bootstrap=True, n_jobs=-1, random_state=42)
    4. bag_clf.fit(X_train, y_train)
    5. y_pred = bag_clf.predict(X_test)
    6. from sklearn.metrics import accuracy_score
    7. accuracy_score(y_test, y_pred)

    运行结果如下:

    0.92

    2 极端随机树

    随机森林里单棵树的生长过程中,每个节点在分裂时仅考虑到一个随机子集所包含的特征。如果我们对每个特征使用随机阈值,而不是搜索得出的最佳阈值,则可能让决策树生产得更随机。这种极端随机的决策树组成的森林被称为极端随机树。同样,它也是以更高的偏差换取了更低的方差。

    我们使用Scikit-Learn的 ExtraTreeClassifier 可以创建一个极端随机树分类器。

    我们很难预先知道一个 RandomForestClassifier

  • 相关阅读:
    数据结构与算法-树
    浅谈查找算法
    怒怼管理层被标注“永不录用”?腾讯辟谣,应届生回应已找到新工作
    maven安装配置
    7、Lock的生产者消费者问题
    ②【Hash】Redis常用数据类型:Hash [使用手册]
    数学建模笔记-第九讲-分类模型-逻辑回归
    Windows 遇到 taskkill 删除某个进程后,该进程显示timewait,导致会有一个类似缓存的问题,无法及时更新应用
    pytorch从零实现resnet
    【树】树的直径和重心
  • 原文地址:https://blog.csdn.net/WHJ226/article/details/126632434