昨天收到yhat推送了一篇介绍随机森林算法的邮件,感觉作为介绍和入门不错,就顺手把它翻译一下。

目录

1 什么是随机森林

1.1 集成学习

1.2 随机决策树

1.3 随机森林

1.4 投票

2 为什么要用它

3 使用方法

3.1 变量选择

3.2 分类

3.3 回归

4 一个简单的Python示例

结语

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

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

这篇文章是关于如何使用Python构建随机森林模型。

1 什么是随机森林

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

1.1 集成学习

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

随机森林是集成学习的一个分支,因为它依靠于决策树的集成。更多关于python实现集成学习的文档: Scikit-Learn 文档。

1.2 随机决策树

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

如果一个观测值为length=45,blue eye,legs=2,那么它将被划分为红色

1.3 随机森林

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

1.4 投票

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

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

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

Random Forest

2 为什么要用它

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

2.1 一个映射的例子

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

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

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

[01]: http://latex.codecogs.com/png.latex?sh(x)=\\frac{ex+e{-x}}{2}}

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)曲线从而使得它看起来更像实际的函数。

线性模型 vs 随机森林

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

3 使用方法

3.1 特征选择

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

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

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

3.2 分类

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

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

predicting_wine_type.png

3.3 回归

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

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

4 一个简单的Python示例

from sklearn.datasets import load_iris

from sklearn.ensemble import RandomForestClassifier

import pandas as pd

import numpy as np

iris = load_iris()

df = pd.DataFrame(iris.data, columns=iris.feature_names)

df['is_train'] = np.random.uniform(0, 1, len(df)) <= .75

df['species'] = pd.Categorical.from_codes(iris.target, iris.target_names)

df.head()

train, test = df[df['is_train']==True], df[df['is_train']==False]

features = df.columns[:4]

clf = RandomForestClassifier(n_jobs=2)y, _ = pd.factorize(train['species'])

clf.fit(train[features], y)

preds = iris.target_names[clf.predict(test[features])]

pd.crosstab(test['species'], preds, rownames=['actual'], colnames=['preds'])

下面就是你应该看到的结果了。由于我们随机选择数据,所以实际结果每次都会不一样。

preds

sertosa

versicolor

virginica

actual

sertosa

6

0

0

versicolor

0

16

1

virginica

0

0

12

5 结语

随机森林相当起来非常容易。不过和其他任何建模方法一样要注意过拟合问题。如果你有兴趣用R语言使用随机森林,可以查看randomForest包。

有用的话,就动手点一下 喜欢 呗

r与python做随机森林_随机森林算法入门(python)相关推荐

  1. 如何用python做词云图_科学网—如何用Python做词云?(基础篇视频教程) - 王树义的博文...

    只需要花10几分钟,跟着教程完整做一遍,你就能自己用Python做出词云了. <如何用Python做词云?>图文版发布于2017年6月,是我数据科学系列教程中的第一篇. 目前仅简书一个平台 ...

  2. python做图片浏览器_保护隐私,用Python打造自己的照片浏览器

    现代操作系统比如Win10, Mac都自带了很好用的照片浏览器,采用人像识别技术自动识别家庭成员,还有简单的画面增强功能.然而这些功能都是需要连接云端服务器来实现的.虽然说很难说这些大公司会对你的那些 ...

  3. python实现希尔排序_希尔排序算法的python实现

    下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. def shellSort(items): inc = len(items) / 2 wh ...

  4. 数据结构与算法python语言实现答案_数据结构与算法:Python语言实现 源代码 PPT 练习答案 源码.zip...

    1 60660-数据结构与算法:Python语言实现[练习答案]Solutions Manual.rar 943.25 KB 2018/11/1 12:03:34 2 __MACOSX 0 Bytes ...

  5. 用python做flash动画_将Flash应用于Python项目

    === 写在之前 === {{{ 这篇所说的是关于建立python调用Flash的本地应用,不同于Adobe的Apollo. 没有用到浏览器嵌入flash网页的方法,直接在pythonwin或者wxp ...

  6. python做图片美化_如何美化MATLAB和Python画出来的图

    如何美化MATLAB和Python画出来的图 写在前面 俗话有句叫做:字不如表,表不如图,意思就是图可以最直观最显然的表达我们想要表达的信息,其升降趋势一目了然:表其次,能够看到数值,但是想要看出变化 ...

  7. python做什么模型_主题模型初学者指南[Python]

    引言 近年来涌现出越来越多的非结构化数据,我们很难直接利用传统的分析方法从这些数据中获得信息.但是新技术的出现使得我们可以从这些轻易地解析非结构化数据,并提取出重要信息. 主题模型是处理非结构化数据的 ...

  8. python做项目管理代码_代码发布项目(三)——python操作git、代码发布流程(服务器管理、项目管理)...

    一.python如何操作git 如果你想用python代码操作git需要下载一个模块 安装 pip install gitpython 基本使用 #从远处仓库下载代码到本地 importosfrom ...

  9. python做地图导航_(源代码)用Python制作疫情的实时数据地图(PS:全国以及每个省)...

    Welcome to巧乐希 Jion us!学习Python! 小溪流 终将汇成大海 作者:小溪流(爱好科技教育的工程师.) 像孩子一样学习Python. 疫情的每日数据变化牵动着千万人的心,我多么希 ...

  10. python做一个问答系统_手把手教你用Python搭建一个AI智能问答系统

    导读:智能问答系统是自然语言处理的一个重要分支.今天我们将利用分词处理以及搜索引擎搭建一个智能问答系统. 本文经授权转自公众号CSDN(ID:CSDNnews) 作者:李秋键 具体的效果如下所示: 下 ...

最新文章

  1. 聊聊那些令人惋惜的车模
  2. 乌兰浩特市大数据平台助力就业脱贫
  3. C# Winform应用程序占用内存较大解决方法整理(转)
  4. 基于织梦Cms5.7 utf-8版本的仿今日头条微信小程序模块插件的使用和安装
  5. 应用域名改造-https证书部分
  6. 使用注解方式进行aop编程(代码)
  7. 2019 IROS—终生机器视觉数据集全球挑战赛
  8. java布尔类型比较器_Java 8比较器类型推论非常困惑
  9. IOS开发学习笔记011-xcode使用技巧
  10. 2017蓝桥杯省赛---java---B---9(分巧克力)
  11. mysql 高并发 卡死,高并发中的卡死状态 -HashMap
  12. sql初学者指南_使用tSQLt框架SQL单元测试面向初学者
  13. DataSet DataTable DataReader DataAdapter之间的区别
  14. 【python之路11】集合数据类型(set)
  15. 好程序员大数据技术分享:Zookeeper集群管理与选举...
  16. sql----DML ,TCL
  17. 单片机原理及应用 张鑫_单片机原理及应用 张鑫 课后习题答案 电子工业出版社 单片机原理及应用 张鑫 课后习题答案 电子工业出版社.doc...
  18. 算术逻辑单元 —— 串行加法器和并行加法器
  19. 使用文本/CAD数据集添加地图注记
  20. 命令行查看基金实时涨跌(附完整代码)

热门文章

  1. 微信PC端各个数据库文件结构与功能简述 - Multi文件夹
  2. Android 多线程-----AsyncTask详解(康小岱已读)
  3. [补题]2019寒假集训
  4. 数据结构之C语言单链表操作
  5. 论思维能力的锻炼(1-5)
  6. 【程序人生】4000万字的《二十四史》,浓缩为这70句,材料必备。
  7. IEDA中的Git操作
  8. 重要:【企业微信】加好友,要开始收费了!
  9. matlab单相变压器在,基于MATLAB单相变压器的仿真建模及特性分析.pdf
  10. Kinect与黑客们如何相处