1. 问题

昨天我们聊应该选赵敏还是小昭,有朋友留言说,当然应该都要了。仔细一琢磨,这话也很有道理。杨过专情,一心只爱小龙女,但也有韦小宝,全面发展一概通吃。

到底专一好,还是通吃好,咱得捋捋。

2. 分析

多,有时候还真是好事儿。比如随机森林,就是用很多棵树,来解决决策树只有一棵树的问题。

决策树的最大问题,是容易过拟合,导致对训练模型匹配完美,但是没有泛化能力。scikit-learn是采用限制最大深度的方法来避免过拟合。还有一种思路,是先形成完全决策树,然后把不重要的 feature 修剪掉。如果我们采用这种 post-pruning 的方法,一个问题就是,如何选择不重要的 feature?

随机森林(Random Forest)用了一个非常巧妙的解决了这个问题。比如我们就当前模型,形成很多棵树,如果大部分树都显示应该把某个 feature 修剪掉,那么在很大程度上这个 feature 就应该是不重要的。这有点像 k nearest Neighbors 投票的思路。

具体来说,随机森林采用两种方法对原始模型增加随机性,然后形成新的多棵决策树。一个是对原始数据进行随机抽样形成新的样本(bootstrap sample),另一个是对原始数据的 features 进行筛选,用新的 sub features 建立模型。当新的模型数量足够多,就会出现足够好的统计规律。

3. 实现

我们继续用 Breast cancer dataset 来对 Random Forest 和 Decision Tree 进行一下对比。我们重新取样 100 次,sub features 选之前的平方根,可以有

from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
import sklearn.datasets as datasetsX, y = datasets.load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y)forest = RandomForestClassifier(n_estimators=100,max_features='auto')
forest = forest.fit(X_train, y_train)print("Training set score: {:.2f}".format(forest.score(X_train, y_train)))
print("Test set score: {:.2f}".format(forest.score(X_test, y_test)))

测试结果

Training set score: 1.00
Test set score: 0.98

相比之前决策树的0.95,有了大幅的提升。

4. 总结

今天我们大致介绍了 Random Forest,并将其结果与 Decision Tree 进行了对比。一般来说,Random Forest 的结果都会优于 Decision Tree。

所以,只有小孩才做选择,大人全都要。韦爵爷的选择,可谓是高手中的高手。

但是,终日周旋于众美女,把自己累个半死,真的就幸福吗?东哥对此持怀疑态度(酸?)。

相关代码均已上传到 Data2Science@Github (https://github.com/jetorz/Data2Science),欢迎标记 Star。

5. 交流

独学而无友则孤陋寡闻。现有「数据与统计科学」微信交流群,内有数据行业资深从业人员、海外博士、硕士等,欢迎对数据科学、数据分析、机器学习、人工智能有兴趣的朋友加入,一起学习讨论。

大家可以扫描下面二维码,添加荔姐微信邀请加入,暗号:机器学习加群。

6. 扩展

6.1. 延伸阅读

  1. 线性回归模型 - 机器学习
  2. 逻辑回归模型原理及实现 - 机器学习
  3. 参数标准化 - 机器学习
  4. 大火的神经网络到底是什么 - 机器学习
  5. 怎样用支持向量机从零制作一个垃圾邮件识别器 - 机器学习
  6. K-nearest Neighbors,隔壁小芳可还好 - 机器学习
  7. 为了联盟还是为了部落 - K means
  8. 赵敏还是小昭,这是个问题 - Decision Tree

6.2. 参考文献

  1. G. James, D. Witten, T. Hastie R. Tibshirani, An introduction to statistical learning: with applications in R. New York: Springer, 2013.
  2. T. Hastie, R. Tibshirani, J. H. Friedman, The elements of statistical learning: data mining, inference, and prediction, 2nd ed. New York, NY: Springer, 2009.
  3. W. Härdle, L. Simar, Applied multivariate statistical analysis, 3rd ed. Heidelberg ; New York: Springer, 2012.
  4. 周志华, 机器学习 = Machine learning. 北京: 清华大学出版社, 2016.
  5. 李航, 统计学习方法. 北京: 清华大学出版社, 2012.

韦小宝真的幸福吗 | Random Forest相关推荐

  1. 系列 《使用sklearn进行集成学习——理论》 《使用sklearn进行集成学习——实践》 目录 1 Random Forest和Gradient Tree Boosting参数详解 2 如何调参?

    系列 <使用sklearn进行集成学习--理论> <使用sklearn进行集成学习--实践> 目录 1 Random Forest和Gradient Tree Boosting ...

  2. 为什么在实际的 kaggle 比赛中 gbdt 和 random forest 效果非常好?

    北京 | 高性能计算之GPU CUDA课程 11月24-26日 3天密集学习 快速带你晋级阅读全文> 这是一个非常好,也非常值得思考的问题.换一个方式来问这个问题:为什么基于 tree-ense ...

  3. Random Forest和Gradient Tree Boosting模型如何调参

    作者:城东 链接:https://www.zhihu.com/question/34470160/answer/114305935 来源:知乎 著作权归作者所有,转载请联系作者获得授权. 我来讲一讲R ...

  4. Random Forest和Gradient Tree Boosting如何调参

    作者:城东 链接:https://www.zhihu.com/question/34470160/answer/114305935 来源:知乎 著作权归作者所有,转载请联系作者获得授权. 使用skle ...

  5. 最常用的决策树算法!Random Forest、Adaboost、GBDT 算法

    点击上方"Datawhale",选择"星标"公众号 第一时间获取价值内容 本文主要介绍基于集成学习的决策树,其主要通过不同学习框架生产基学习器,并综合所有基学习 ...

  6. Machine Learning | (8) Scikit-learn的分类器算法-随机森林(Random Forest)

    Machine Learning | 机器学习简介 Machine Learning | (1) Scikit-learn与特征工程 Machine Learning | (2) sklearn数据集 ...

  7. R语言使用caret包构建随机森林模型(random forest)构建回归模型、通过method参数指定算法名称、通过ntree参数指定随机森林中树的个数

    R语言使用caret包构建随机森林模型(random forest)构建回归模型.通过method参数指定算法名称.通过ntree参数指定随机森林中树的个数 目录

  8. R语言xgboost包:使用xgboost算法实现随机森林(random forest)模型

    R语言xgboost包:使用xgboost算法实现随机森林(random forest)模型 目录 R语言xgboost包:使用xgboost算法实现随机森林(random forest)模型

  9. 使用R构建随机森林回归模型(Random Forest Regressor)

    使用R构建随机森林回归模型(Random Forest Regressor) 目录 使用R构建随机森林回归模型(Random Forest Regressor) 安装包randomForest 缺失值 ...

  10. 随机森林(Random Forest)和梯度提升树(GBDT)有什么区别?

    随机森林(Random Forest)和梯度提升树(GBDT)有什么区别? 随机森林属于 集成学习 中的 Bagging(Bootstrap AGgregation 的简称) 方法. 随机森林是由很多 ...

最新文章

  1. 腾讯优图+厦门大学发布!2021十大人工智能趋势
  2. 语言生成不自闭迷宫_4招教你分清自闭症、多动症、发育迟缓、抑郁症的区别...
  3. Python基础06-Python异常处理
  4. python列表map函数_python中map函数怎么显示结果
  5. 20行代码AC_ 习题8-1 Bin Packing UVA - 1149(贪心+简单二分解析)
  6. 事务相关、不可重复读与幻读的区别
  7. 大一计算机考试题库知识点,大一 计算机基础 期末考试题库
  8. 简单类名转为class_13 网页各区域div的常见类名
  9. python学习--关注容易被忽略的知识点--(五)面向对象编程
  10. Python基础学习5 -字符串
  11. abc大神的官改最新版本固件下载
  12. 腾讯Tendis 号称能干掉 Redis ?你继续吹牛吧 !
  13. 期权杠杆比率如何计算?
  14. 删除有外键关联的表报错,Cannot delete or update a parent row: a foreign key constraint fails
  15. unity3D游戏开发八之天空盒
  16. LeetCode通关:哈希表六连,这个还真有点简单
  17. Android哪个系统占用内存小,哪个安卓模拟器占用的内存小,使用起来又不卡
  18. halconc#软件收费吗_没事别想不开做Halcon机器视觉工程师
  19. CNN网络模型大总结【持续更新中...】
  20. springboot的WebMvcConfigurerAdapter学习(现在常用实现webmvcConfigurer接口和继承WebMvcConfigurationSupport类)

热门文章

  1. MatlabR2012a 显示使用过期的注册文件破解(.lic)
  2. 【Burp suite】intruder内的四种攻击模式(attack type)分析!
  3. 第一章-第六题(帮人抢票,帮人选课这些软件是否合法 你怎么看?)--By梁旭晖...
  4. 判定两个点是否在一条直线的同一侧_帮帮学堂丨高中物理的常用方法、题型特点及应用注意点!建议收藏!...
  5. 火星来客创业周刊第1期:独立开发者Twitter小工具60天,从月入300美金到月入3000美金
  6. 乐理入门: 二、时值、节奏、节拍
  7. element时间日期选择器组件设置默认时间
  8. php5.2.17 pecl,php pecl的使用
  9. 【已解决】打开游戏或者游戏引擎耳机出现滋滋滋的电流声
  10. html文字溢出怎样处理,css文本溢出处理