随机森林(Random forest)
随机森林的定义
随机森林是一种集成学习算法,也可以说是一种特殊的Bagging算法,随机森林中将决策树作为基分类器放到Bagging中最后得到随机森林。
对于随机森林,顾名思义,就是用一个随机的方式去建立一个森林,而森林又是有无数个决策树构成的,并且随机的意义在于整个森林中的所有决策树是没有关联的。在得到森林之后,当有一个新的输入样本进入的时候,就让森林中的每一棵决策树分别进行一下判断,看看这个样本应该属于哪一类(对于分类算法),然后看看哪一类被选择最多,就预测这个样本为那一类。
随机森林的构造过程
随机森林的构造过程中两个随机是最重要的地方(随机选取样本、随机选取属性)
- 假如有N个样本,则有放回的随机选择N个样本,用选好的N个样本来训练一个决策树,作为决策树根节点的样本。
- 当每个样本中有M个属性时,在决策树的每个节点需要分裂时,随机从M个属性中选取m个属性,满足m<<M。然后采用某种策略(信息增益等方法)来选择一个属性作为该节点的分类属性。
- 在决策树构成的过程中每个节点都要按照2中的方法来进行分裂(如果该节点选出的属性和其父节点选出的属性相同,也就证明没有信息增益,该节点也就达到了叶子节点无需继续分裂)。每一个决策树都要分裂到不能分裂为止,并且整个过程中无需剪枝。
- 按照1-3建立大量的决策树,这样就构成随机森林了。
随机森林的优点
随机森林不仅包含了决策树和集成学习的优点,同时也包含了如下的优点:
- 随机森林对于随机性的引入使得随机森林在数据集上的表现很好,有效的防止了过拟合的产生。
- 随机森林的抗噪声能力很强。
- 它能够处理很高维度(feature很多)的数据,并且不用做特征选择,对数据集的适应能力强:既能处理离散型数据,也能处理连续型数据,数据集无需规范化。
- 在训练过程中,能够检测到feature间的互相影响。
- 容易做成并行化方法。
- 实现起来比较简单。
随机森林的应用
随机森林简单的Sklearn应用如下:
from sklearn.tree import DecisionTreeRegressor from sklearn.ensemble import RandomForestRegressor import numpy as np from sklearn.datasets import load_iris iris = load_iris() print(iris["target_names"]) print(iris["target"].shape) rf = RandomForestRegressor() rf.fit(iris.data[:150], iris.target[:150]) #选择部分数据进行模型的训练 instance = iris.data[[111,123]] print(instance) re0 = rf.predict(instance[[0]]) re1 = rf.predict(instance[[1]]) print("re0:",re0) print("re1:",re1) print(iris.target[111],iris.target[123])