随机森林算法的学习
最近运行kaggle时,发现随机森林算法在分类问题上非常有效,往往比svm、log回归、knn等算法效果好得多。 所以我想考虑一下这个算法的原理。
学习随机森林首先简单介绍集成学习方法和决策树算法。 以下对这两种方法进行简要介绍(具体学习推荐见统计学习方法的第5章和第8章)。
Bagging和Boosting的概念不同
本部分主要从http://www.cn blogs.com/liuwu 265/p/4690486.html学习
随机林属于可接受学习的背景算法。 在集成学习中,主要分为bagging算法和boosting算法。 首先,我们来看看这两种方法的特点和区别。
袋装法)。
bagging的算法流程如下。
采用Bootstraping方法从原始样本集中随机提取n个训练样本,共提取k次,得到k个训练集。 (k个训练组可以彼此独立,并且元素可以重叠)
针对k个训练集,训练k个模型。 这k个模型可以由具体问题决定。 例如决策树、knn等。
关于分类问题:关于投票的分类结果回归问题,以k个模型的预测结果的平均作为最终预测结果。 (所有模型的重要性都是一样的)
Boosting (提拉法) ) ) )。
boosting的算法流程如下。
对训练集中的每个样本制作权重wi,表示每个样本的关注度。 如果某个样本被错误分类的概率较高,则需要加大对该样本的权重。
在进行迭代的过程中,每个步骤的迭代是弱分类器。 我们需要用某种战略将其组合起来作为最终模型。 例如,AdaBoost对各弱识别器赋予权重,其线性组合是最最终的识别器。 误差越小弱分类器权重越大)
Bagging,Boosting的主要区别
在样品选择上: Bagging采用Bootstrap随机返回样品; Boosting各回合的训练集不变。 改变的只是每个样本的权重。
样本权重: Bagging使用均匀采样,每个样本权重相等; Boosting根据误码率调整样本权重,误码率越大的样本权重越大。
预测函数: Bagging所有预测函数的权重相等; 在Boosting中,误差越小的预测函数权重越大。
并行计算: Bagging的各预测函数可以并行生成; Boosting中的每个预测函数都必须按顺序迭代生成。
决策树和这些算法框架组合得到的新算法如下所示。
1 ) Bagging决策树=随机森林
2 ) AdaBoost决策树=提升树
3 )梯度boosting决策树=GBDT
决策树
常用的决策树算法有ID3、C4.5、CART三种。 三种算法的模型构建思想都很相似,但采用了不同的指标。 决策树模型的构建过程大致如下。
ID3,C4.5决策树的生成
输入:训练集d、特征集a、阈值eps输出:决策树t
d中的所有样本属于同一类别Ck时,t为单节点树,将类别Ck作为该节点的类别标记,返回t
如果a不是空集,也就是不将特征作为分割的依据的情况下,t是单节点树,将d中实例数最大的类Ck作为该节点的类标签,返回t
否则,计算a中各特征对d的信息增益(ID3 ) /信息增益比(C4.5 ),选择信息增益最大的特征Ag
如果Ag的信息增益(比)不足阈值eps,则将t作为单节点树,将d中实例数最大的类Ck作为该节点的类标志,返回t
否则,根据特征Ag将d分割为若干个非空部分集合Di,在Di中以实例数最大的类为标签构建子节点,由节点及其子节点构成树t,并返回t
对于第I个子节点,以Di为训练集,以A-{Ag}为特征集递归调用1 ̄5,得到子树Ti,返回Ti
生成CART决策树
这里只简单介绍CART、ID3和C4.5的区别。
CART树可以是二叉树,ID3和C4.5大概也可以是树
当生成子树时,CART选择一个特征的一个可取值作为分割点来生成两个子树
选择特征和分割点的依据是基尼指数,选择基尼指数最小的特征和分割点生成子树
决策树剪枝
决策树剪枝主要用于预防过拟合,过程不详细介绍。
主要思想是从叶节点追溯,尝试对某节点进行剪枝,比较剪枝前后决策树的损失函数值。 最后,通过动态规划(树形dp,acmer应该知道),可以得到全局最优的剪枝方案。
随机森林(Random Forests )。
随机森林是一种重要的基于Bagging的集成学习方法,可用于分类、回归等问题。
森林有很多优点:
具有非常高的精度
随机性的引入使得随机森林难以过度拟合
由于随机性的引入,随机森林抗干扰能力强
无需选择特征即可处理高维数据
既可以处理离散型数据,也可以处理连续型数据,无需对数据集进行归一化
训练速度快,
可以得到变量重要性排序容易实现并行化
随机森林的缺点:
当随机森林中的决策树个数很多时,训练时需要的空间和时间会较大
随机森林模型还有许多不好解释的地方,有点算个黑盒模型
与上面介绍的Bagging过程相似,随机森林的构建过程大致如下:
从原始训练集中使用Bootstraping方法随机有放回采样选出m个样本,共进行n_tree次采样,生成n_tree个训练集
对于n_tree个训练集,我们分别训练n_tree个决策树模型
对于单个决策树模型,假设训练样本特征的个数为n,那么每次分裂时根据信息增益/信息增益比/基尼指数选择最好的特征进行分裂
每棵树都一直这样分裂下去,直到该节点的所有训练样例都属于同一类。在决策树的分裂过程中不需要剪枝
将生成的多棵决策树组成随机森林。对于分类问题,按多棵树分类器投票决定最终分类结果;对于回归问题,由多棵树预测值的均值决定最终预测结果
使用案例
from sklearn.ensemble import RandomForestClassifier
trainSet,trainLabel,testSet,testLabel = getFuturesDataSet(npyPath,0.67)
model = RandomForestClassifier(bootstrap=True,random_state=0)
model.fit(trainSet,trainLabel)
#降维
# x_pca_test = pca.fit_transform(x_test)
result = model.predict(np.array(testSet))
相关文档原文:http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html
————————————————
原文链接:https://blog.csdn.net/qq547276542/article/details/78304454