点击上方“机器学习与统计学”,选择“置顶”公众号

重磅干货,第一时间送达

前情回顾

机器学习100天|Day1数据预处理

100天搞定机器学习|Day2简单线性回归分析

100天搞定机器学习|Day3多元线性回归

100天搞定机器学习|Day4-6 逻辑回归

100天搞定机器学习|Day7 K-NN

100天搞定机器学习|Day8 逻辑回归的数学原理

100天搞定机器学习|Day9-12 支持向量机

100天搞定机器学习|Day11 实现KNN

100天搞定机器学习|Day13-14 SVM的实现

100天搞定机器学习|Day15 朴素贝叶斯

100天搞定机器学习|Day16 通过内核技巧实现SVM

100天搞定机器学习|Day17-18  神奇的逻辑回归

100天搞定机器学习|Day19-20 加州理工学院公开课:机器学习与数据挖掘

100天搞定机器学习|Day21 Beautiful Soup

100天搞定机器学习|Day22 机器为什么能学习?

100天搞定机器学习|Day23-25 决策树及Python实现

100天搞定机器学习|Day26-29 线性代数的本质

100天搞定机器学习|Day 30-32 微积分的本质

前言: 随机森林是一个非常灵活的机器学习方法,从市场营销到医疗保险有着众多的应用。它可以用于市场营销对客户获取和存留建模或预测病人的疾病风险和易感性。

随机森林能够用于分类和回归问题,可以处理大量特征,并能够帮助估计用于建模数据变量的重要性。

1 什么是随机森林

随机森林可以用于几乎任何一种预测问题(包括非线性问题)。它是一个相对较新的机器学习策略(90年代诞生于贝尔实验室)可以用在任何方面。它属于机器学习中的集成学习这一大类。

1.1 集成学习

集成学习是将多个模型进行组合来解决单一的预测问题。它的原理是生成多个分类器模型,各自独立地学习并作出预测。这些预测最后结合起来得到预测结果,因此和单独分类器的结果相比,结果一样或更好。

随机森林是集成学习的一个分支,因为它依靠于决策树的集成。

1.2 随机决策树

我们知道随机森林是将其他的模型进行聚合, 但具体是哪种模型呢?从其名称也可以看出,随机森林聚合的是分类(或回归) 树。一颗决策树是由一系列的决策组合而成的,可用于数据集的观测值进行分类 。

1.3 随机森林

引入的随机森林算法将自动创建随机决策树群。由于这些树是随机生成的,大部分的树(甚至 99.9%)对解决你的分类或回归问题是没有有意义。

1.4 投票

那么,生成甚至上万的糟糕的模型有什么好处呢?好吧,这确实没有。但有用的是,少数非常好的决策树也随之一起生成了。

当你要做预测的时候,新的观察值随着决策树自上而下走下来并被赋予一个预测值或标签。一旦森林中的每棵树都给有了预测值或标签,所有的预测结果将被归总到一起,所有树的投票返回做为最终的预测结果。

简单来说,99.9%不相关的树做出的预测结果涵盖所有的情况,这些预测结果将会彼此抵消。少数优秀的树的预测结果将会脱颖而出,从而得到一个好的预测结果。

2 为什么要用它

随机森林是机器学习方法中的Leatherman(多功能折叠刀)。你几乎可以把任何东西扔给它。它在估计推断映射方面做的特别好,从而不需要类似SVM医一样过多的调参(这点对时间紧迫的朋友非常好)。

2.1 一个映射的例子

随机森林可以在未经特意手工进行数据变换的情况下学习。以函数f(x)=log(x)为例。

我们将在Yhat自己的交互环境Rodeo中利用Python生成分析数据,你可以在here下载RodeoMac,WindowsLinux的安装文件。

首先,我们先生成一下数据并添加噪声。

import numpy as np

import pylab as pl

x = np.random.uniform(1, 100, 1000)

y = np.log(x) + np.random.normal(0, .3, 1000)

pl.scatter(x, y, s=1, label="log(x) with noise")

pl.plot(np.arange(1, 100), np.log(np.arange(1, 100)), c="b", label="log(x) true function")

pl.xlabel("x")

pl.ylabel("f(x) = log(x)")

pl.legend(loc="best")

pl.title("A Basic Log Function")

pl.show()

得到如下结果:

如果我们建立了一个基本的线性模型通过使用x来预测y,我们需要作一条直线,一定成都市算是平分log(x)函数。而如果我们使用随机森林算法,它可以更好的逼近log(x)曲线从而使得它看起来更像实际的函数。

当然,你也可以说随机森林对log(x)函数有点过拟合。不管怎么样,这说明了随机森林并不限于线性问题。

3 使用方法

3.1 特征选择

随机森林的一个最好用例是特征选择。尝试很多个决策树变量的一个副产品就是,你可以检查变量在每棵树中表现的是最佳还是最糟糕。

当一些树使用一个变量,而其他的不使用这个变量,你就可以对比信息的丢失或增加。实现的比较好的随机森林工具能够为你做这些事情,所以你需要做的仅仅是去查看那个方法或参数。

在下述的例子中,我们尝试弄明白区分红酒或白酒时,哪些变量是最重要的。

3.2 分类

随机森林也很善长分类问题。它可以被用于为多个可能目标类别做预测,它也可以在调整后输出概率。你需要注意的一件事情是过拟合。

随机森林容易产生过拟合,特别是在数据集相对小的时候。当你的模型对于测试集合做出“太好”的预测的时候就应该怀疑一下了。避免过拟合的一个方法是在模型中只使用有相关性的特征,比如使用之前提到的特征选择。

3.3 回归

随机森林也可以用于回归问题。

我发现,不像其他的方法,随机森林非常擅长于分类变量或分类变量与连续变量混合的情况。

4 一个简单的Python示例

#导入库import numpy as npimport matplotlib.pyplot as pltimport pandas as pd#导入数据集dataset = pd.read_csv('Social_Network_Ads.csv')X = dataset.iloc[:, [2, 3]].valuesy = dataset.iloc[:, 4].values#将数据集拆分成训练集和测试集from sklearn.model_selection import train_test_splitX_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0)#特征缩放from sklearn.preprocessing import StandardScalersc = StandardScaler()X_train = sc.fit_transform(X_train)X_test = sc.transform(X_test)#调试训练集的随机森林from sklearn.ensemble import RandomForestClassifierclassifier = RandomForestClassifier(n_estimators = 10, criterion = 'entropy', random_state = 0)classifier.fit(X_train, y_train)#预测测试集结果y_pred = classifier.predict(X_test)#生成混淆矩阵,也称作误差矩阵from sklearn.metrics import confusion_matrixcm = confusion_matrix(y_test, y_pred)#将训练集结果可视化from matplotlib.colors import ListedColormapX_set, y_set = X_train, y_trainX1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01),                     np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01))plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape),             alpha = 0.75, cmap = ListedColormap(('red', 'green')))plt.xlim(X1.min(), X1.max())plt.ylim(X2.min(), X2.max())for i, j in enumerate(np.unique(y_set)):    plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1],                c = ListedColormap(('red', 'green'))(i), label = j)plt.title('Random Forest Classification (Training set)')plt.xlabel('Age')plt.ylabel('Estimated Salary')plt.legend()plt.show()

#将测试集结果可视化from matplotlib.colors import ListedColormapX_set, y_set = X_test, y_testX1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01),                     np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01))plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape),             alpha = 0.75, cmap = ListedColormap(('red', 'green')))plt.xlim(X1.min(), X1.max())plt.ylim(X2.min(), X2.max())for i, j in enumerate(np.unique(y_set)):    plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1],                c = ListedColormap(('red', 'green'))(i), label = j)plt.title('Random Forest Classification (Test set)')plt.xlabel('Age')plt.ylabel('Estimated Salary')plt.legend()plt.show()

推荐阅读

统计学公开课大盘点

统计学中的常用符号

机器学习包含哪些学习思想?

机器学习、深度学习思维导图

一张让你代码能力突飞猛进的速查表

一文读懂深度学习:从神经元到BERT

Github标星3K+,热榜第三,一网打尽数据科学速查表

Github标星2w+,热榜第一,如何用Python实现所有算法

数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。

卅年春秋,谁主沉浮?分析400篇任正非演讲稿,一探任正非的心胸与格局

点赞,转发,支持作者

随机森林c++_100天搞定机器学习|Day3334 随机森林相关推荐

  1. 100天搞定机器学习

    100天搞定机器学习 大家好,100天搞定机器学习前54天是对Avik-Jain开源项目100-Days-Of-ML-Code的翻译 自己的理解https://github.com/Avik-Jain ...

  2. 100天搞定机器学习:PyYAML基础教程

    编程中免不了要写配置文件,今天我们继续Python网络编程,学习一个比 JSON 更简洁和强大的语言----YAML .本文老胡简单介绍 YAML 的语法和用法,以及 YAML 在机器学习项目中的应用 ...

  3. mysql 李天生_笔记:《零基础搞定机器学习及深度学习(覃秉丰)》

    引自:<零基础搞定机器学习及机器学习>(网易云课堂 - 覃秉丰) 线性回归 回归分析最典型的例子就是"房价预测". 代价函数 相关系数 决定系数 y为真实值,加 - 表 ...

  4. 100天搞定机器学习|day37 无公式理解反向传播算法之精髓

     100天搞定机器学习(Day1-34) 100天搞定机器学习|Day35 深度学习之神经网络的结构 100天搞定机器学习|Day36 深度学习之梯度下降算法 本篇为100天搞定机器学习之第37天,亦 ...

  5. 如何用一套引擎搞定机器学习全流程?

    作者:陈戊超(仲卓) 深度学习技术在当代社会发挥的作用越来越大.目前深度学习被广泛应用于个性化推荐.商品搜索.人脸识别.机器翻译.自动驾驶等多个领域,此外还在向社会各个领域迅速渗透. 背景 当前,深度 ...

  6. 300张小抄表搞定机器学习知识点:学习根本停不下来!

    入坑数据科学和人工智能的同学都知道,机器学习是一个集合了计算机.统计学和数学知识的交叉领域,除了日常练习,也需要很多枯燥的记忆和理解.单纯读书不容易串联概念,又容易忘记. 可能你和我一样,读了无数遍& ...

  7. 火爆GitHub:100天搞定机器学习编程(超赞信息图+代码+数据集)

    问耕 栗子 发自 麦蒿寺 量子位 出品 | 公众号 QbitAI 你是想喝一辈子糖水,还是想用AI改变世界? 但怎么想是一回事,怎么做往往是另一回事.学习和健身一样,不少人都停留在口头上,有各种借口不 ...

  8. 像背单词一样搞定机器学习关键概念:300张小抄表满足你的所有AI好奇

    入坑数据科学和人工智能的同学都知道,机器学习是一个集合了计算机.统计学和数学知识的交叉领域,除了日常练习,也需要很多枯燥的记忆和理解.单纯读书不容易串联概念,又容易忘记. 可能你和文摘菌一样,读了无数 ...

  9. 一篇文章教你搞定传说中的“随机森林”

    https://www.toutiao.com/a6702220605514580493/ 机器学习的一个重要部分是分类,我们想知道一个观察结果属于哪个分类(也就是组).对观察结果进行精确分类的能力对 ...

最新文章

  1. GMIS 2017 大会陈雨强演讲:机器学习模型,宽与深的大战
  2. ThreadLocal的使用
  3. go chan 缓存与阻塞
  4. 剑与远征种族刻印让玩家期待,绿裔刻印真有那么好看
  5. Nginx系列~Nginx服务启动不了
  6. 2018年最好用的20个Bootstrap网站模板
  7. 使用 servlet 连接数据库
  8. 数仓架构的持续演进与发展 — 云原生、湖仓一体、离线实时一体、SaaS模式
  9. 【Objective-C】探索Category底层的实质
  10. LAMP默认安装路径
  11. 使用dx命令在cmd环境下执行的正确方法,我用的版本android4.4.2,jdk1.8
  12. rdkit 计算环、芳香环数
  13. 安装已经下载好的whl文件
  14. Cubieboard安装系统
  15. 微信有鸿蒙版的的吗,微信鸿蒙版本下载-微信鸿蒙版本下载最新官方版 v7.0.20-游人手游网...
  16. 学习操作系统,都有哪些硬核网站?
  17. Pta——敲笨钟,制定位置输出字符串
  18. 图像抠图算法学习 - Shared Sampling for Real-Time Alpha Matting
  19. 【工业相机】【深度3】相机选择-精度和曝光需求计算 - 输入:1 被测试物体的最小体积 2 被测物体的移动相对速度
  20. 使用httpie快速访问https协议站点

热门文章

  1. 聚类:基本概念和方法
  2. 利用python爬取IP地址归属地等信息!
  3. 技术11期:Atlas的概念你了解多少?
  4. 干货|理解attention机制本质及self-attention
  5. 从零开始一起学习SLAM | 理解图优化,一步步带你看懂g2o代码
  6. 关于协作机器人10个观点的讨论
  7. 一文看懂神经网络初始化!
  8. Hbase原理、基本概念、基本架构
  9. Java中import及package的用法
  10. postman+newman(2)