欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

机器学习--随机森林 (Random Forest)

程序员文章站 2022-07-14 14:11:19
...

探索的终点将是开始时的起点。 –艾略特

文章内容目录:

  • 一、随机森林算法简介
    • 随机森林算法背景
    • 随机森林算法思想
    • 随机森林算法的特点
    • 随机森林算法的应用
  • 二、随机森林的相关知识
    • 信息、熵以及信息增益的概念
    • 决策树
    • 集成学习
  • 三、随机森林Python实现
  • 四、参考内容

一、随机森林的那些事儿~

1、背景

 Leo Breiman和Adele Cutler发展出推论出随机森林的算法。 而 "Random Forests" 是他们的商标。
  这个术语是1995年由贝尔实验室的Tin Kam Ho所提出的随机决策森林(random decision forests)而来的。
  这个方法则是结合 Breimans 的 "Bootstrap aggregating" 想法和 Ho 的"random subspace method"" 以建造决策树的集合。

上世纪八十年代Breiman等人发明分类树的算法(Breiman et al. 1984),通过反复二分数据进行分类或回归,计算量大大降低。2001年Breiman把分类树组合成随机森林(Breiman 2001a),即在变量(列)的使用和数据(行)的使用上进行随机化,生成很多分类树,再汇总分类树的结果。随机森林在运算量没有显著提高的前提下提高了预测精度。随机森林对多元公线性不敏感,结果对缺失数据和非平衡的数据比较稳健,可以很好地预测多达几千个解释变量的作用(Breiman 2001b),被誉为当前最好的算法之一(Iverson et al. 2008)。

2、思想

随机森林系列算法为集成学习同质个体学习器间不存在强依赖关系(即一系列个体学习器可以并行生成)的代表算法

同质个体学习器:所有的个体学习器是一个种类的,比如都是决策树个体学习器,都是神经网络个体学习器

随机森林,见名思意,很多树用随机方式组成一个森林。成百上千颗树也就构成了森林,这也是随机森林的主要思想–集成思想的体现。{集成学习思想:对于训练集数据,通过训练若干个个体学习器,通过一定的结合策略,形成一个强学习器。}

其中,随机采用,随机且又放回;森林中的很多树为决策树

每棵决策树都是一个分类器(分类问题),对于一个输入样本,N棵树分别进行判断,会有N个分类结果。随机森林集成了所有的分类投票结果,将投票次数最多的类别为预测结果,这就是一种最简单的 Bagging 思想。

3、随机森林算法特点

  • a. 极好的准确率
  • b. 很好的应用于大数据集
  • c. 具有很好的抗噪声能力
  • d.对数据集的适应能力强:既能处理离散型数据,也能处理连续型数据
  • e. 能够处理很高维度(feature很多)的数据,并且不用做特征选择
  • f. 在创建随机森林时,对内部生成误差是一种无偏估计
  • g. 在训练过程中,能够检测到feature间的互相影响
  • h. 对于缺省值问题也能够获得很好得结果
  • i. ……

4、实际应用

美国*用随机森林算法 预测 *
相同思路可以预测歹徒、不法分子等(毕竟人命,正确率再高也有一定风险);
常用于,预测疾病的风险和病患者的易感性;
市场营销中,用于市场营销模拟的建模,统计客户来源,保留和流失;等。

二、随机森林的相关知识

随机森林看起来是很好理解,但是要完全搞明白它的工作原理,需要很多机器学习方面相关的基础知识。在本文中,我们简单谈一下,而不逐一进行赘述,如果有同学不太了解相关的知识,可以参阅其他博友的一些相关博文或者文献。

  1、信息、熵以及信息增益的概念

  这三个基本概念是决策树的根本,是决策树利用特征来分类时,确定特征选取顺序的依据。理解了它们,决策树你也就了解了大概。

  引用香农的话来说,信息是用来消除随机不确定性的东西。当然这句话虽然经典,但是还是很难去搞明白这种东西到底是个什么样,可能在不同的地方来说,指的东西又不一样。对于机器学习中的决策树而言,如果带分类的事物集合可以划分为多个类别当中,则某个类(xi)的信息可以定义如下:

  I(x)用来表示随机变量的信息,p(xi)指是当xi发生时的概率。

  熵是用来度量不确定性的,当熵越大,X=xi的不确定性越大,反之越小。对于机器学习中的分类问题而言,熵越大即这个类别的不确定性更大,反之越小。

  信息增益在决策树算法中是用来选择特征的指标,信息增益越大,则这个特征的选择性越好。

  这方面的内容不再细述,感兴趣的同学可以看 信息&熵&信息增益 这篇博文。

  2、决策树

  决策树是一种树形结构,其中每个内部节点表示一个属性上的测试,每个分支代表一个测试输出,每个叶节点代表一种类别。常见的决策树算法有C4.5、ID3和CART。

  3、集成学习 

  集成学习通过建立几个模型组合的来解决单一预测问题。它的工作原理是生成多个分类器/模型,各自独立地学习和作出预测。这些预测最后结合成单预测,因此优于任何一个单分类的做出预测。

  随机森林是集成学习的一个子类,它依靠于决策树的投票选择来决定最后的分类结果。你可以在这找到用python实现集成学习的文档:Scikit
  
附:集成学习框架

机器学习--随机森林 (Random Forest)

三、随机森林Python实现

from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
import pandas as pd
import numpy as np
'''
鸢尾花数据集及元数据,
data:150个 元素,每个元素四个数值;
target:花卉类别,
0:Setosa  1:Versicolour  2:Virginica
'''
iris = load_iris()                                            #加载鸢尾花全部数据
df = pd.DataFrame(iris.data, columns=iris.feature_names)      #转换类型
df['data_train'] = np.random.uniform(0, 1, len(df)) <= .75    #产生150个[0,1)的数,并与0.75做判断
df['data_class'] = pd.Categorical.from_codes(iris.target, iris.target_names)   #种类
head = df.head()     #前五行
print(head)          #输出看看效果

train, test = df[df['data_train']==True], df[df['data_train']==False]          #train is true;test is flase

features = df.columns[:4]

clf = RandomForestClassifier(n_jobs=2)
y, _ = pd.factorize(train['data_class'])
clf = clf.fit(train[features], y)
preds = iris.target_names[clf.predict(test[features])]
pre = clf.predict(test[features])

cross = pd.crosstab(test['data_class'], preds, rownames=['actual'], colnames=['preds'])
print(cross)

数据head:

   sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)  \
0                5.1               3.5                1.4               0.2   
1                4.9               3.0                1.4               0.2   
2                4.7               3.2                1.3               0.2   
3                4.6               3.1                1.5               0.2   
4                5.0               3.6                1.4               0.2   

   data_train data_class  
0        True     setosa  
1        True     setosa  
2        True     setosa  
3        True     setosa  
4        True     setosa  

结果:

preds       setosa  versicolor  virginica
actual                                   
setosa          13           0          0
versicolor       0          16          1
virginica        0           0         11

四、参考内容