随机森林就是基于集成学习bagging思想的一种算法,简单来说就是三个臭皮匠顶个诸葛亮,它的基本决策单元(臭皮匠)是决策树,当决策树多了就构成了一片森林。
一、基本单元——决策树
决策树十分符合人类直观思维,它是一种基于if-then-else规则的有监督学习,简单来说就是不断做抉择得出最后的结果。决策树算法可以分为三个部分:
1、特征选择
节点分裂特征的选择,筛选出更有利于分类的特征进行判断,根据该特征的不同取值进行子节点的建立。筛选特征的方式一般采用信息增益准则,选取信息增益最大的特征作为节点特征。
2、决策树生成
对每个子节点也使用信息增益准则进行分类形成新的子节点,直到没有特征或者信息增益很小为止,完成决策树的分裂生成。
3、决策树裁剪
防止过拟合,减少部分特征的判断。
二、集成学习
集成学习(ensemble learning)通过构建并结合多个学习器来完成学习任务,也称为多分类系统。为保证集成学习能够获得更好的学习性能,个体学习器需要具有一定的准确性和多样性,即个体学习器不能太坏,且个体之间需要具有差异。
体现在随机森林当中,即将样本输入到每棵独立的决策树当中进行分类。将若干个弱分类器(单个决策树)的分类结果进行以多胜少的选择,从而组成一个强分类器(随机森林)。每一棵决策树的分类能力越强、树与树之间的相关性越弱,整体森林的分类效果就越好。
三、随机森林
顾名思义,该算法重在“随机”和“森林”上,森林自然是集成学习的体现,而随机则防止了过拟合以及加强了抗噪能力。
1、如果训练集大小为N,对于每棵决策树来说,每次随机且有放回地从训练集中的抽取1个训练样本,总共抽取N次组成该树的训练集;因为有放回的抽取,所以可能有的数据不会被抽到有的数据会被重复抽到,而且随机保证了每棵树的训练集都是不同的。
2、如果存在M个特征,则从M中随机选择m个特征维度(m << M),使用这些m个特征维度中最佳特征(最大化信息增益)来分割节点。在森林生长期间,m的值保持不变。
3、按照步骤2进行分裂完成决策树的生成,构建很多决策树即组成随机森林。
特征选择个数m影响着树的相关性和分类能力,这也是随机森林的一个重要参数。
from sklearn.ensemble import RandomForestClassifier
# 创建随机森林分类器
clf = RandomForestClassifier(n_estimators=100, random_state=42)
# 训练模型
clf.fit(X_train, y_train)
# 预测
y_pred = clf.predict(X_test)
n_estimators : 决策树的个数;
random_state:控制构建树时使用的样本的随机性;
criterion:表示节点的划分准则;
bootstrap:是否对样本集进行有放回抽样来构建树;
max_features:构建决策树最优模型时考虑的最大特征数
四、优缺点
1、能够处理高维度多特征的数据,不用做特征选择(随机选择)
2、能够给出特征对于分类的重要程度
3、训练速度快,可以并行
4、可以处理存在大量特征缺失的数据
5、处理回归问题效果不如分类,因为无法给出连续的输出
6、对于小数据或者少特征的数据可能分类效果不是很好