当前位置:   article > 正文

机器学习--随机森林 (Random Forest)_随机森林算法介绍

随机森林算法介绍

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

文章内容目录:

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

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

1、背景

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

上世纪八十年代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
  
附:集成学习框架

这里写图片描述

三、随机森林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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

数据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  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

结果:

preds       setosa  versicolor  virginica
actual                                   
setosa          13           0          0
versicolor       0          16          1
virginica        0           0         11
  • 1
  • 2
  • 3
  • 4
  • 5

四、参考内容

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/97733
推荐阅读
相关标签
  

闽ICP备14008679号