目录
原理
分类问题(将某个样本划分到某一类),也就是离散变量问题,CART使用Gini值作为评判标准。
# 定义为Gini=1-∑(P(i)*P(i)),P(i)为当前节点上数据集中第i类样本的比例。
# 例如:分为2类,当前节点上有100个样本,属于第一类的样本有70个,属于第二类的样本有30个
# 则Gini=1-0.7×07-0.3×03=0.42,可以看出,类别分布越平均,Gini值越大,类分布越不均匀,Gini值越小。
#
# 在寻找最佳的分类特征和阈值时,评判标准为:argmax(Gini-GiniLeft-GiniRight),
# 即寻找最佳的特征f和阈值th,使得当前节点的Gini值减去左子节点的Gini和右子节点的Gini值最大。
回归问题,相对更加简单,直接使用argmax(Var-VarLeft-VarRight)作为评判标准。
# 即当前节点训练集的方差Var减去减去左子节点的方差VarLeft和右子节点的方差VarRight值最大。
用什么实现
0.RandomTre e= many CART(Classification And Regression Tree)
1.sample类的函数基本需要两个就行
#第一个是从现有训练集有放回的随机抽取一个新的训练集,当然,只包含样本的序号。
#第二个函数是从现有的特征中无放回的随机抽取一定数量的特征,同理,也是特征序号即可
2.Tree类,代表每棵树,里面保存树的一些参数以及一个指向所有节点的指针。
3.Node类,代表树的每个节点(节点是什么???)
注:保存树的方式可以是最普通的数组,也可是是vector。Node的保存方式同理
怎么能实现
一、随机森林的训练过程
给定训练集S,测试集T,特征维数F。
确定参数:使用到的CART的数量t,每棵树的深度d,每个节点使用到的特征数量f
终止条件:节点上最少样本数s,节点上最少的信息增益m
对于第1-t棵树,i=1-t:
#(1)从S中有放回的抽取大小和S一样的训练集S(i),作为根节点的样本,从根节点开始训练
#(2)如果当前节点上达到终止条件,则设置当前节点为叶子节点
# 如果是分类问题,该叶子节点的预测输出为当前节点样本集合中数量最多的那一类c(j),概率p为c(j)占当前样本集的比例;
# 如果是回归问题,预测输出为当前节点样本集各个样本值的平均值。然后继续训练其他节点。
# 如果当前节点没有达到终止条件,则从F维特征中无放回的随机选取f维特征。
# 利用这f维特征,寻找分类效果最好的一维特征k及其阈值th。
# 当前节点上样本第k维特征小于th的样本被划分到左节点,其余的被划分到右节点。
# 继续训练其他节点。有关分类效果的评判标准在后面会讲。
#(3)重复(1)(2)直到所有节点都训练过了或者被标记为叶子节点。
#(4)重复(1),(2),(3)直到所有CART都被训练过
二、随机森林的预测过程
对于第1-t棵树,i=1-t:
#(1)从当前树的根节点开始,根据当前节点的阈值th,判断是进入左节点(<th)还是进入右节点(>=th),
# 直到到达,某个叶子节点,并输出预测值。
#(2)重复执行(1)直到所有t棵树都输出了预测值。
# 如果是分类问题,则输出为所有树中预测概率总和最大的那一个类,即对每个c(j)的p进行累计;
# 如果是回归问题,则输出为所有树的输出的平均值