1、随机森林原理:

随机森林是有很多随机的决策树构成,它们之间没有关联。得到RF以后,在预测时分别对每一个决策树进行判断,最后使用Bagging的思想进行结果的输出(也就是投票的思想)

2、Bagging(套袋法)

bagging的算法过程如下:
	1、从原始样本集中使用Bootstraping方法随机抽取n个训练样本,共进行k轮抽取,得到k个训练集。(k个训练集之间相互独立,元素可以有重复) 
	2、对于k个训练集,我们训练k个模型(这k个模型可以根据具体问题而定,比如决策树,knn等) 
	3、对于分类问题:由投票表决产生分类结果; 
	对于回归问题:由k个模型预测结果的均值作为最后预测结果。(所有模型的重要性相同)

3、Boosting(提升法)

boosting的算法过程如下:
	1、对于训练集中的每个样本建立权值wi,表示对每个样本的关注度。当某个样本被误分类的概率很高时,需要加大对该样本的权值。 
	2、进行迭代的过程中,每一步迭代都是一个弱分类器。我们需要用某种策略将其组合,作为最终模型。 
	(例如AdaBoost给每个弱分类器一个权值,将其线性组合最为最终分类器。误差越小的弱分类器,权值越大)

4、Bagging,Boosting的主要区别

1、样本选择上: 
		Bagging采用的是Bootstrap随机有放回抽样; 
		而Boosting每一轮的训练集是不变的,改变的只是每一个样本的权重。
2、样本权重: 
		Bagging使用的是均匀取样,每个样本权重相等; 
		Boosting根据错误率调整样本权重,错误率越大的样本权重越大。
3、预测函数: 
		Bagging所有的预测函数的权重相等; 
		Boosting中误差越小的预测函数其权重越大。
4、并行计算: 
		Bagging各个预测函数可以并行生成; 
		Boosting各个预测函数必须按顺序迭代生成。

5、随机森林重要的参数

n_features:推荐值为特征数量的平方根
n_trees:森林中的树按说越多越好,但是当数量多到一定程度时,精度的提升已经不明显,但是计算消耗却很大。

6、随机性体现在两点:

1、样本选择的随机性
2、特征选择的随机性

7、学习过程

1、现在有N个训练样本,每个样本的特征为M个,需要建K颗树
2、从N个训练样本中有放回的取N个样本作为一组训练集(其余未取到的样本作为预测分类,评估其误差)
3、从M个特征中取m个特征左右子集特征(m<<M)
4、对采样的数据使用完全分裂的方式来建立决策树,这样的决策树每个节点要么无法分裂,要么所有的样本都指向同一个分类
5、重复2的过程K次,即可建立森林

8、预测过程

1、将预测样本输入到K颗树分别进行预测
2、如果是分类问题,直接使用投票的方式选择分类频次最高的类别
3、如果是回归问题,使用分类之后的均值作为结果

9、参数问题

1、这里的一般取m=sqrt(M)
2、关于树的个数K,一般都需要成百上千,但是也有具体的样本有关(比如特征数量)
3、树的最大深度,(太深可能可能导致过拟合??)
4、节点上的最小样本数、最小信息增益

10 泛化误差估计

使用oob(out-of-bag)进行泛化误差的估计,将各个树的未采样样本作为预测样本(大约有36.8%),使用已经建立好的森林对各个预测样本进行预测,预测完之后最后统计误分得个数占总预测样本的比率作为RF的oob误分率。

11、随机森林的构建过程大致如下:

1、从原始训练集中使用Bootstraping方法随机有放回采样选出m个样本,共进行n_tree次采样,生成n_tree个训练集
2、对于n_tree个训练集,我们分别训练n_tree个决策树模型
3、对于单个决策树模型,假设训练样本特征的个数为n,那么每次分裂时根据信息增益/信息增益比/基尼指数选择最好的特征进行分裂
4、每棵树都一直这样分裂下去,直到该节点的所有训练样例都属于同一类。在决策树的分裂过程中不需要剪枝
5、将生成的多棵决策树组成随机森林。对于分类问题,按多棵树分类器投票决定最终分类结果;对于回归问题,由多棵树预测值的均值决定最终预测结果

12、预测过程

1、将预测样本输入到K颗树分别进行预测
2、如果是分类问题,直接使用投票的方式选择分类频次最高的类别
3、如果是回归问题,使用分类之后的均值作为结果

13、总结

RF的主要优点有:
    1、 训练可以高度并行化,对于大数据时代的大样本训练速度有优势。个人觉得这是的最主要的优点。
    2、由于可以随机选择决策树节点划分特征,这样在样本特征维度很高的时候,仍然能高效的训练模型。
    3、 在训练后,可以给出各个特征对于输出的重要性
    4、 由于采用了随机采样,训练出的模型的方差小,泛化能力强。
    5、相对于Boosting系列的Adaboost和GBDT, RF实现比较简单。
    6、 对部分特征缺失不敏感。
RF的主要缺点有:
    1)在某些噪音比较大的样本集上,RF模型容易陷入过拟合。
    2) 取值划分比较多的特征容易对RF的决策产生更大的影响,从而影响拟合的模型的效果。

14、随机森林数据过拟合

下面哪个/些超参数的增加可能会造成随机森林数据过拟合?
A.树的数量
B.树的深度 (√)
C.学习速率
解析:我们增加树的深度有可能会造成模型过拟合。学习速率并不是随机森林的超参数。增加树的数量可能会造成欠拟合。

15、随机森林如何处理缺失值?

a、暴力填补
	Python中的na.roughfix包提供简单的缺失值填补策略:
	对于训练集中处于同一个类别下的数据,如果是类别变量缺失,则用众数补全,如果是连续变量,则用中位数。
b、相似度矩阵填补
	RF的Python实现中,有一个rfImpute包,可以提供更加高层的缺失值填补。
	首先先用暴力填补法进行粗粒度填充。然后使用上述填补后的训练集来训练随机森林模型,并统计相似度矩阵(proximity matrix),然后再看之前缺失值的地方,如果是分类变量,则用没有缺失的观测实例的相似度中的权重进行投票;如果是连续性变量,则用相似度矩阵进行加权求均值。
上述投票方案迭代进行4~6次。

16、解释相似度矩阵

相似度矩阵就是任意两个观测实例间的相似度矩阵,原理是如果两个观测实例落在同一棵树的相同节点次数越多,则这两个观测实例的相似度越高。