Skip to content

Latest commit

 

History

History
211 lines (120 loc) · 11.5 KB

random-forests-python.md

File metadata and controls

211 lines (120 loc) · 11.5 KB

随机森林® 在 Python 中

原文:www.kdnuggets.com/2016/12/random-forests-python.html

这篇文章最初发表于 Yhat 博客Yhat 是一家位于布鲁克林的公司,旨在使数据科学适用于开发人员、数据科学家和企业。Yhat 提供一个软件平台,用于将预测算法部署和管理为 REST API,同时消除与生产环境相关的痛苦工程障碍,如测试、版本控制、扩展和安全。


随机森林 是一种高度多用途的机器学习方法,应用广泛,从市场营销到医疗保健和保险。它可以用于建模市场营销的影响,如客户获取、留存和流失,或用于预测疾病风险和易感性

随机森林可以进行回归和分类。它能处理大量特征,并且有助于估计在建模的基础数据中哪些变量是重要的。

这是一个关于使用 Python 的随机森林的帖子。

什么是随机森林?

随机森林是几乎任何预测问题的可靠选择(即使是非线性问题)。这是一种相对较新的机器学习策略(它起源于 90 年代的贝尔实验室),可以用于几乎任何用途。它属于一种称为集成方法的更大类的机器学习算法。

集成学习

集成学习涉及将多个模型组合在一起解决单一预测问题。它通过生成多个分类器/模型来工作,这些模型独立学习并进行预测。然后将这些预测组合成一个单一的(超级)预测,这个预测应该与任何一个分类器的预测一样好或更好。

随机森林是集成学习的一种,它依赖于决策树的集成。有关 Python 中集成学习的更多信息,请参见:Scikit-Learn 文档

随机化决策树

所以我们知道随机森林是其他模型的聚合,但它聚合了哪些类型的模型呢?正如你可能从名字中猜到的那样,随机森林聚合了分类(或回归)树。决策树由一系列决策组成,这些决策可以用来对数据集中一个观察值进行分类。

随机 森林

用于生成随机森林的算法会自动创建一堆随机决策树。由于这些树是随机生成的,大多数树对你的分类/回归问题并没有什么有意义的帮助(可能有 99.9%的树)。

如果一个观测值的长度为 45,蓝色眼睛,2 条腿,它将被分类为 红色

树木投票

那么,10000 个(可能)糟糕的模型有什么用呢?结果证明,它们真的不是很有帮助。但 有帮助的 是那些你同时生成的少数几个非常好的决策树。

当你做出预测时,新的观测值会被推入每棵决策树,并被分配一个预测值/标签。一旦森林中的每棵树都报告了其预测值/标签,预测结果将被汇总,并以所有树的模式投票作为最终预测。

简单来说,那 99.9% 的无关树做出的预测到处都是,并相互抵消。而少数几棵好的树的预测超越了这些噪音,得出了好的预测结果。

为什么你应该使用它?

很简单

随机森林是 Leatherman 的学习方法。你几乎可以对它进行任何操作,它都会做得很好。它特别擅长估计推断转换,因此不像 SVM 那样需要大量调优(即适合于时间紧迫的人)。

一个示例转换

随机森林能够在没有精心设计的数据转换的情况下进行学习。例如,考虑 f(x) = log(x) 函数。

好的,我们来写一些代码。我们将在 Yhat 自家的交互式环境 Rodeo 中编写 Python 代码。你可以在 这里 下载适用于 Mac、Windows 或 Linux 的 Rodeo。

首先,创建一些虚假数据并添加一点噪声。

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()

在这里查看要点

我们将在 Rodeo 中进行 Python 分析和可视化,Yhat 是一个开源的数据科学环境。想要跟随吗?你可以在 这里 下载适用于 Mac、Windows 或 Linux 的 Yhat Python IDE。

在 Rodeo 中跟随?这是你应该看到的内容。

让我们更详细地查看一下那个图表。

如果我们尝试建立一个基本的线性模型来预测y,使用x的话,我们最终会得到一条直线,这条直线大致上是将log(x)函数分开。相比之下,如果我们使用随机森林,它在近似log(x)曲线方面表现得更好,我们得到的结果看起来更像真实函数。

你可以说随机森林对log(x)函数进行了些许过拟合。无论如何,我认为这很好地说明了随机森林不受线性约束的限制。

用途

变量选择

随机森林最好的使用案例之一是特征选择。尝试许多决策树变体的副产品之一是你可以检查哪些变量在每棵树中表现最好/最差。

当某棵树使用一个变量而另一棵树不使用时,你可以比较因包括/排除该变量而丢失或获得的价值。好的随机森林实现会为你完成这项工作,所以你只需知道查看哪种方法或变量即可。

在接下来的例子中,我们试图找出哪些变量对于将酒分类为红酒或白酒最为重要。

分类

随机森林在分类方面也表现出色。它可以用于预测具有多个可能值的类别,并且可以校准以输出概率。然而,你需要注意的是过拟合。随机森林容易出现过拟合,尤其是在处理相对较小的数据集时。如果你的模型在测试集上的预测“过于准确”,你应该保持怀疑态度。

避免过拟合的一种方法是只在模型中使用真正相关的特征。虽然这并不总是简单明了,但使用特征选择技术(如前面提到的那种)可以使这变得容易得多。

回归

是的,它也做回归。

我发现与其他算法不同,随机森林在学习分类变量或分类变量与实际变量混合时表现非常好。具有高基数(可能值数量)的分类变量可能会很棘手,因此拥有类似的工具在你手头会非常有用。

一个简短的 Python 示例

Scikit-Learn 是入门随机森林的绝佳选择。scikit-learn API 在各种算法中非常一致,因此你可以非常容易地进行模型比较和切换。很多时候我从简单的模型开始,然后转向随机森林。

scikit-learn 中随机森林实现的最佳特性之一是n_jobs参数。这将根据你希望使用的核心数量自动并行化随机森林的拟合。这是一个很棒的演示,由 scikit-learn 贡献者 Olivier Grisel 介绍,他讲述了如何在 20 节点 EC2 集群上训练随机森林。

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

最终思考

随机森林尽管非常先进,但使用起来却异常简单。与任何建模一样,要小心过拟合。如果你对在R中使用随机森林感兴趣,可以查看randomForest包。

原文。经许可转载。

RANDOM FORESTS 和 RANDOMFORESTS 是 Minitab, LLC 的注册商标。

相关:

  • 随机森林:犯罪教程

  • 深度学习何时优于 SVM 或随机森林?

  • 伟大的算法教程汇总


我们的三大课程推荐

1. Google 网络安全证书 - 快速进入网络安全领域。

2. Google 数据分析专业证书 - 提升你的数据分析技能

3. Google IT 支持专业证书 - 支持你所在组织的 IT


更多相关内容