机器学习入门:随机森林(运用篇)
作者头像
  • 张贺飞
  • 2020-06-22 14:33:32 5

大家好,我是Python数据分析师,希望分享我在数据科学领域的经验。为此,我创作了一系列关于Python的文章,包括《15天学会Python编程》、《每天10分钟,用Python学数据分析》、《Python数据可视化实战》和《33天搞定机器学习》。

在上一篇文章中,我们探讨了随机森林的基本原理及其在实际中的应用。随机森林不仅可以用于预测,还可以用于特征选择。本文将深入介绍如何利用随机森林进行特征选择。

随机森林的构建原理

随机森林是一种集成学习方法,通过构建多个决策树来提高模型的准确性和稳定性。其构建过程分为两个主要步骤:

  1. 行采样:从原始数据集中有放回地抽取样本,形成一个新的数据集,即Bootstrap数据集。
  2. 列采样:从所有特征中随机选取一部分特征作为新数据集的一部分,用于训练单个决策树。

对于分类问题,最终的预测结果由所有决策树投票决定,得票最多的类别为最终预测结果。对于回归问题,则通过对各决策树的预测结果求平均值得到最终预测值。

随机森林与特征重要性

随机森林的一个显著特点是能够评估各个特征的重要性。这一功能有助于我们在建模过程中筛选出更为重要的特征,从而提升模型的性能。

特征重要性的计算通常基于以下方法:评估每个特征在随机森林中每棵决策树上的贡献,然后计算平均贡献值。贡献值可以通过基尼指数或袋外数据误差率来衡量。具体步骤如下:

  1. 袋外数据误差计算:在每棵决策树上,使用未参与训练的袋外数据计算误差率,记为errOOB1。
  2. 特征干扰实验:随机改变袋外数据中某个特征的值,再次计算袋外数据误差,记为errOOB2。
  3. 特征重要性评估:特征的重要性等于所有决策树上(errOOB2 - errOOB1)的平均值。如果特征的干扰导致误差大幅增加,说明该特征对预测结果的影响较大。

实战示例

在sklearn库中,随机森林已经实现了特征重要性的计算功能。我们可以通过调用feature_importances_属性获得每个特征的重要性值。

数据集

我们使用sklearn库中的波士顿房价数据集,这是一个回归问题的数据集,包含13个输入变量和1个输出变量。

导入库和数据

```python import numpy as np from sklearn.modelselection import traintestsplit import pandas as pd from sklearn.datasets import loadboston from sklearn.ensemble import RandomForestRegressor

加载数据

boston = loadboston() y = boston.target X = pd.DataFrame(boston.data, columns=boston.featurenames)

划分数据集

np.random.seed(seed=42) Xtrain, Xvalid, ytrain, yvalid = traintestsplit(X, y, testsize=0.8, randomstate=42)

建立预测模型

rf = RandomForestRegressor(nestimators=100, oobscore=True, bootstrap=True, randomstate=42) rf.fit(Xtrain, ytrain) print('R^2 Training Score: {:.2f} OOB Score: {:.2f} R^2 Validation Score: {:.2f}'.format( rf.score(Xtrain, ytrain), rf.oobscore, rf.score(Xvalid, y_valid))) ```

特征重要性分析

python feat_labels = boston.feature_names importances = rf.feature_importances_ indices = np.argsort(importances)[::-1] for f in range(X_train.shape[1]): print("%2d) %-*s %f" % (f + 1, 10, feat_labels[indices[f]], importances[indices[f]]))

特征重要性排序如下:

  1. RM 0.426620
  2. LSTAT 0.306639
  3. DIS 0.073513
  4. CRIM 0.065826
  5. B 0.028501
  6. PTRATIO 0.027401
  7. AGE 0.023851
  8. NOX 0.019769
  9. TAX 0.014469
  10. INDUS 0.006301
  11. RAD 0.003750
  12. ZN 0.002401
  13. CHAS 0.000960

总结

通过上述分析,我们可以看出,直接使用所有特征训练随机森林模型可能会导致过拟合现象。因此,建议通过特征重要性评估,选择最重要的特征进行建模,以提高模型的准确性和泛化能力。

希望这些内容对你有所帮助,如果有任何疑问或需要进一步讨论,欢迎随时联系我!

感谢您的阅读,期待您的反馈。

    本文来源:图灵汇
责任编辑: : 张贺飞
声明:本文系图灵汇原创稿件,版权属图灵汇所有,未经授权不得转载,已经协议授权的媒体下载使用时须注明"稿件来源:图灵汇",违者将依法追究责任。
    分享
入门随机运用机器森林学习
    下一篇