首先从概率密度函数讲起吧,之前的知识还算能记得,就不说了,呵呵。
一、概率密度函数
在维基百科上定义的概率密度函数式连续型随机变量的,概率质量函数是离散型随机变量的。
连续型随机变量的概率密度函数是一个描述这个随机变量的输出值,在某个确定的取值点附近的可能性的函数。而随机变量的取值落在某个区域之内的概率则为概率密度函数在这个区域上的积分。当概率密度函数存在的时候,累积分布函数是概率密度函数的积分。概率密度函数一般以小写“pdf”(Probability Density Function)标记。
概率质量函数(probability mass function,简写为pmf)是离散随机变量在各特定取值上的概率。
概率质量函数和概率密度函数不同之处在于:概率质量函数是对离散随机变量定义的,本身代表该值的概率;概率密度函数是对连续随机变量定义的,本身不是概率,只有对连续随机变量的概率密度函数在某区间内进行积分后才是概率。
假设X是抛硬币的结果,反面取值为0,正面取值为1。则在状态空间{0, 1}(这是一个Bernoulli随机变量)中,X = x的概率是0.5,所以概率质量函数是
概率质量函数可以定义在任何离散随机变量上,包括常数分布, 二项分布(包括Bernoulli分布), 反二项分布, Poisson分布, 几何分布以及超几何分布随机变量上.
最简单的概率密度函数是均匀分布的密度函数。对于一个取值在区间上的均匀分布函数
,它的概率密度函数:
也就是说,当x 不在区间上的时候,函数值等于0,而在区间
上的时候,函数值等于
。这个函数并不是完全的连续函数,但是是可积函数。正态分布是重要的概率分布。它的概率密度函数是:
随着参数和
变化,概率分布也产生变化。(参数即是描述整体特征的一种概率性数字度量,比如说整体平均数,方差,整体比例等。)
对概率密度函数作傅利叶变换可得特征函数。
特征函数与概率密度函数有一对一的关系。因此知道一个分布的特征函数就等同于知道一个分布的概率密度函数。
二、最大似然估计
给定一个概率分布,假定其概率密度函数(连续分布)或概率质量函数(离散分布)为
,以及一个分布参数
,我们可以从这个分布中抽出一个具有
个值的采样
,通过利用
,我们就能计算出其概率:
但是,我们可能不知道的值,尽管我们知道这些采样数据来自于分布
。那么我们如何才能估计出
呢?一个自然的想法是从这个分布中抽出一个具有
个值的采样
,然后用这些采样数据来估计
.一旦我们获得
,我们就能从中找到一个关于
的估计。最大似然估计会寻找关于
的最可能的值(即,在所有可能的
取值中,寻找一个值使这个采样的“可能性”最大化)。
要在数学上实现最大似然估计法,我们首先要定义似然函数:
并且在的所有取值上,使这个函数最大化(一阶导数)。这个使可能性最大的
值即被称为
的最大似然估计。
一个离散分布、离散有限参数空间分布的例子:
考虑一个抛硬币的例子。假设这个硬币正面跟反面轻重不同。我们把这个硬币抛80次(即,我们获取一个采样并把正面的次数记下来,正面记为H,反面记为T)。并把抛出一个正面的概率记为
,抛出一个反面的概率记为
(因此,这里的
即相当于上边的
)。假设我们抛出了49个正面,31个反面,即49次H,31次T。假设这个硬币是我们从一个装了三个硬币的盒子里头取出的。这三个硬币抛出正面的概率分别为
,
,
.这些硬币没有标记,所以我们无法知道哪个是哪个。使用最大似然估计,通过这些试验数据(即采样数据),我们可以计算出哪个硬币的可能性最大。这个似然函数取以下三个值中的一个:
我们可以看到当时,似然函数取得最大值。这就是
的最大似然估计。
现在假设例子1中的盒子中有无数个硬币,对于中的任何一个
, 都有一个抛出正面概率为
的硬币对应,我们来求其似然函数的最大值:
其中. 我们可以使用微分法来求最值。方程两边同时对
取微分,并使其为零。
![p=0](http://www.ithao123.cn/uploads02/u02/33/18/331896d311a1db00d21ca95e3173cfa6.png)
![p=1](http://upload.wikimedia.org/math/c/f/f/cff19eeeeb9692cbf8a6b0864c461f5e.png)
![p=49/80](http://upload.wikimedia.org/math/3/0/b/30bc6947bcf5dc77cd70cc39cf1efa42.png)
![p=49/80](http://upload.wikimedia.org/math/3/0/b/30bc6947bcf5dc77cd70cc39cf1efa42.png)
![p=0](http://upload.wikimedia.org/math/3/0/8/308b547f3dadd916f87b00451fe67af1.png)
![p=1](http://upload.wikimedia.org/math/c/f/f/cff19eeeeb9692cbf8a6b0864c461f5e.png)
![widehat{p}=49/80](http://upload.wikimedia.org/math/2/a/9/2a959654434cc7b92a803ab287d89846.png)
三、贝叶斯定理
贝叶斯定理是关于随机事件A和B的条件概率的一则定理。
其中P(A|B)是在B发生的情况下A发生的可能性。
在贝叶斯定理中,每个名词都有约定俗成的名称:
- P(A)是A的先验概率,之所以称为"先验"是因为它不考虑任何B方面的因素。
- P(A|B)是已知B发生后A的条件概率,也由于得自B的取值而被称作A的后验概率。
- P(B|A)是已知A发生后B的条件概率,也由于得自A的取值而被称作B的后验概率。
- P(B)是B的先验概率,也作标准化常量(normalized constant).
-
一个例子
贝叶斯定理在检测吸毒者时很有用。假设一个常规的检测结果的敏感度与可靠度均为99%,也就是说,当被检者吸毒时,每次检测呈阳性(+)的概率为99%。而被检者不吸毒时,每次检测呈阴性(-)的概率为99%。从检测结果的概率来看,检测结果是比较准确的,但是贝叶斯定理却可以揭示一个潜在的问题。假设某公司将对其全体雇员进行一次鸦片吸食情况的检测,已知0.5%的雇员吸毒。我们想知道,每位医学检测呈阳性的雇员吸毒的概率有多高?令“D”为雇员吸毒事件,“N”为雇员不吸毒事件,“+”为检测呈阳性事件。可得
- P(D)代表雇员吸毒的概率,不考虑其他情况,该值为0.005。因为公司的预先统计表明该公司的雇员中有0.5%的人吸食毒品,所以这个值就是D的先验概率。
- P(N)代表雇员不吸毒的概率,显然,该值为0.995,也就是1-P(D)。
- P(+|D)代表吸毒者阳性检出率,这是一个条件概率,由于阳性检测准确性是99%,因此该值为0.99。
- P(+|N)代表不吸毒者阳性检出率,也就是出错检测的概率,该值为0.01,因为对于不吸毒者,其检测为阴性的概率为99%,因此,其被误检测成阳性的概率为1-99%。
- P(+)代表不考虑其他因素的影响的阳性检出率。该值为0.0149或者1.49%。我们可以通过全概率公式计算得到:此概率 = 吸毒者阳性检出率(0.5% x 99% = 0.495%)+ 不吸毒者阳性检出率(99.5% x 1% = 0.995%)。P(+)=0.0149是检测呈阳性的先验概率。用数学公式描述为:
根据上述描述,我们可以计算某人检测呈阳性时确实吸毒的条件概率P(D|+):
尽管我们的检测结果可靠性很高,但是只能得出如下结论:如果某人检测呈阳性,那么此人是吸毒的概率只有大约33%,也就是说此人不吸毒的可能性比较大。我们测试的条件(本例中指D,雇员吸毒)越难发生,发生误判的可能性越大。
四、最大后验概率
最大后验估计可以看作是规则化(regularization)的最大似然估计。由于篇幅有限,见下一篇文章。
首先,我们回顾上篇文章中的最大似然估计,假设x为独立同分布的采样,θ为模型参数,f为我们所使用的模型。那么最大似然估计可以表示为:
现在,假设θ的先验分布为g。通过贝叶斯理论,对于θ的后验分布如下式所示:
最大后验分布的目标为:
假设有五个袋子,各袋中都有无限量的饼干(樱桃口味或柠檬口味),已知五个袋子中两种口味的比例分别是
樱桃 100%
樱桃 75% + 柠檬 25%
樱桃 50% + 柠檬 50%
樱桃 25% + 柠檬 75%
柠檬 100%
如果只有如上所述条件,那问从同一个袋子中连续拿到2个柠檬饼干,那么这个袋子最有可能是上述五个的哪一个?
我们首先采用最大似然估计来解这个问题,写出似然函数。假设从袋子中能拿出柠檬饼干的概率为p(我们通过这个概率p来确定是从哪个袋子中拿出来的),则似然函数可以写作
由于p的取值是一个离散值,即上面描述中的0,25%,50%,75%,1。我们只需要评估一下这五个值哪个值使得似然函数最大即可,得到为袋子5。这里便是最大似然估计的结果。
上述最大似然估计有一个问题,就是没有考虑到模型本身的概率分布,下面我们扩展这个饼干的问题。
假设拿到袋子1或5的机率都是0.1,拿到2或4的机率都是0.2,拿到3的机率是0.4,那同样上述问题的答案呢?这个时候就变MAP了。我们根据公式
写出我们的(最大后验概率估计)MAP函数
根据题意的描述可知,p的取值分别为0,25%,50%,75%,1,g的取值分别为0.1,0.2,0.4,0.2,0.1.分别计算出MAP函数的结果为:0,0.0125,0.125,0.28125,0.1.由上可知,通过MAP估计可得结果是从第四个袋子中取得的最高。
本篇文章主要介绍了"看懂论文的机器学习基本知识(三)--假正例、假负例、ROC曲线",主要涉及到看懂论文的机器学习基本知识(三)--假正例、假负例、ROC曲线方面的内容,对于看懂论文的机器学习基本知识(三)--假正例、假负例、ROC曲线感兴趣的同学可以参考一下。一、假正例和假负例
假正例(False Positive):预测为1,实际为0的样本
假负例(False Negative):预测为0,实际为1的样本
实际预测中,那些真正例(True Positive)和真负例(True Negative)都不会造成损失(cost)。
那么,我们假设一个假正例的损失是LFP,一个假负例的损失是LFN。
我们可以得到一个损失矩阵:
| y^=1 | y^=0 |
y=1 | 0 | LFN |
y=0 | LFP | 0 |
其中,y是真实值,y^是预测值。
那么,我们可以得到一个样本的后验期望损失:
例如,c=1时,我们对假正例和假负例同等对待,则可以得到我们的决策边界0.5。
二、ROC曲线
1.混淆矩阵(confusion matrix)
针对预测值和真实值之间的关系,我们可以将样本分为四个部分,分别是:
真正例(True Positive,TP):预测值和真实值都为1
假正例(False Positive,FP):预测值为1,真实值为0
真负例(True Negative,TN):预测值与真实值都为0
假负例(False Negative,FN):预测值为0,真实值为1
我们将这四种值用矩阵表示(图片引自《machine learning:A Probabilistic Perspective》):
上面的矩阵就是混淆矩阵。
2.ROC曲线
通过混淆矩阵,我们可以得到真正例率(True Positive Rate , TPR):
我们还可以得到假正例率(False Positive Rate , FPR):
可以看到,TPR也就是我们所说的召回率,那么只要给定一个决策边界阈值,我们可以得到一个对应的TPR和FPR值,然而,我们不从这个思路来简单的得到TPR和FPR,而是反过来得到对应的
,我们检测大量的阈值
,从而可以得到一个TPR-FPR的相关图,如下图所示(图片引自《machine learning:A Probabilistic Perspective》):
图中的红色曲线和蓝色曲线分别表示了两个不同的分类器的TPR-FPR曲线,曲线上的任意一点都对应了一个值。该曲线就是ROC曲线(receiver operating characteristic curve)。该曲线具有以下特征:
-
最完美的分类器(完全区分正负样例):(0,1)点,即没有FP,全是TP
-
曲线越是“凸”向左上角,说明分类器效果越好
-
随机预测会得到(0,0)和(1,1)的直线上的一个点
从图中可以看出,红色曲线所代表的分类器效果好于蓝色曲线所表示的分类器。
3.利用ROC的其他评估标准
- AUC(area under thecurve),也就是ROC曲线的下夹面积,越大说明分类器越好,最大值是1,图中的蓝色条纹区域面积就是蓝色曲线对应的 AUC
- EER(equal error rate),也就是FPR=FNR的值,由于FNR=1-TPR,可以画一条从(0,1)到(1,0)的直线,找到交点,图中的A、B两点。
Perspective》的6.2节,总算是有点明白了吧。有好的资料还请大家指教。
oneself up by one’s bootstrap”,表示完成一件不能自然完成的事情。1977年美国Standford大学统计学教授Efron提出了一种新的增广样本的统计方法,就是Bootstrap方法,为解决小子样试验评估问题提供了很好的思路。
statistic)的话,那么由再抽样样本计算所得的统计量称为自助统计量(bootstrap statistic)。自助法的关键所在是自助统计量与观察统计量间的关系,就如同观察统计量与真值间的关系,可表示为:
③混匀。抽取一个纸签,记下其上的观察值;
④放回盒子中,混匀,重新抽取;
⑤重复步骤③和④n次,便可得到一个自助样本。重复上述抽样过程B次,便可得到B个自助样本。(引用自刘文忠老师的一篇论文,感觉这样讲的比较容易懂了)。
随机森林分类的过程就是对于每个随机产生的决策树分类器,输入特征向量,森林中每棵决策树对样本进行分类,根据每个决策树的权重得到最后的分类结果。那么要搞清随机森林,就来先搞清下决策树。
1、决策树
所谓决策树,顾名思义,是一种树,一种依托于策略抉择而建立起来的树。
1.1 树
树是一种数据结构,它是由n(n>=1)个有限结点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。下图就是一棵树:(引用自维基百科)
树具有的特点:
每个结点有零个或多个子结点;
没有前驱的结点称为根结点;
每一个非根结点有且只有一个父结点;
除了根结点外,每个子结点可以分为m个不相交的子树; 树中常用的术语:
节点的度:一个节点含有的子树的个数称为该节点的度;
树的度:一棵树中,最大的节点的度称为树的度;
叶节点或终端节点:度为零的节点;
非终端节点或分支节点:度不为零的节点;
双亲节点或父节点:若一个结点含有子节点,则这个节点称为其子节点的父节点;
孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点;
兄弟节点:具有相同父节点的节点互称为兄弟节点;
节点的层次:从根开始定义起,根为第1层,根的子节点为第2层,以此类推;
树的高度或深度:树中节点的最大层次;
堂兄弟节点:双亲在同一层的节点互为堂兄弟;
节点的祖先:从根到该节点所经分支上的所有节点;
子孙:以某节点为根的子树中任一节点都称为该节点的子孙。
森林:由m(m>=0)棵互不相交的树的集合称为森林;
树的种类:
无序树:树中任意节点的子结点之间没有顺序关系,这种树称为无序树,也称为自由树;
有序树:树中任意节点的子结点之间有顺序关系,这种树称为有序树;
二叉树:每个节点最多含有两个子树的树称为二叉树;
完全二叉树:对于一颗二叉树,假设其深度为d(d>1)。除了第d层外,其它各层的节点数目均已达最大值,且第d层所有节点从左向右连续地紧密排列,这样的二叉树被称为完全二叉树;
满二叉树:对于上述的完全二叉树,如果去掉其第d层的所有节点,那么剩下的部分就构成一个满二叉树(此时该满二叉树的深度为d-1);
霍夫曼树:带权路径最短的二叉树称为哈夫曼树或最优二叉树;
B树
1.2 决策树(引用自blog.csdn.net/v_july_v/article/details/7577684) 机器学习中,决策树是一个预测模型;他代表的是对象属性与对象值之间的一种映射关系。树中每个节点表示某个对象,而每个分叉路径则代表的某个可能的属性值,而每个叶结点则对应从根节点到该叶节点所经历的路径所表示的对象的值。决策树仅有单一输出,若欲有复数输出,可以建立独立的决策树以处理不同输出。
从数据产生决策树的机器学习技术叫做决策树学习,通俗点说就是决策树,说白了,这是一种依托于分类、训练上的预测树,根据已知预测、归类未来。 第一个例子
套用俗语,决策树分类的思想类似于找对象。现想象一个女孩的母亲要给这个女孩介绍男朋友,于是有了下面的对话:
女儿:多大年纪了?
母亲:26。
女儿:长的帅不帅?
母亲:挺帅的。
女儿:收入高不?
母亲:不算很高,中等情况。
女儿:是公务员不?
母亲:是,在税务局上班呢。
女儿:那好,我去见见。
这个女孩的决策过程就是典型的分类树决策。相当于通过年龄、长相、收入和是否公务员对将男人分为两个类别:见和不见。假设这个女孩对男人的要求是:30岁以下、长相中等以上并且是高收入者或中等以上收入的公务员,那么这个可以用下图表示女孩的决策逻辑:
也就是说,决策树的简单策略就是,好比公司招聘面试过程中筛选一个人的简历,如果你的条件相当好比如说某985/211重点大学博士毕业,那么二话不说,直接叫过来面试,如果非重点大学毕业,但实际项目经验丰富,那么也要考虑叫过来面试一下,即所谓具体情况具体分析、决策。但每一个未知的选项都是可以归类到已有的分类类别中的。
第二个例子
此例子来自Tom M.Mitchell著的机器学习一书:
小王的目的是通过下周天气预报寻找什么时候人们会打高尔夫,他了解到人们决定是否打球的原因最主要取决于天气情况。而天气状况有晴,云和雨;气温用华氏温度表示;相对湿度用百分比;还有有无风。如此,我们便可以构造一棵决策树,如下(根据天气这个分类决策这天是否合适打网球):
上述决策树对应于以下表达式:
(Outlook=Sunny ^Humidity<=70)V (Outlook = Overcast)V(Outlook=Rain ^ Wind=Weak)
2.决策树的构建(引用自cnblogs.com/bourneli/archive/2013/03/15/2961568.html)
先看看下面的数据表格:
ID 拥有房产(是/否) 婚姻情况(单身,已婚,离婚)年收入(单位:千元)无法偿还债务(是/否)
1 是 单身 125 否
2 否 已婚 100 否
3 否 单身 70 否
4 是 已婚 120 否
5 否 离婚 95 是
6 否 已婚 60 否
7 是 离婚 220 否
8 否 单身 85 是
9 否 已婚 75 否
10 否 单身 90 是
上表根据历史数据,记录已有的用户是否可以偿还债务,以及相关的信息。通过该数据,构建的决策树如下:
比如新来一个用户:无房产,单身,年收入55K,那么根据上面的决策树,可以预测他无法偿还债务(蓝色虚线路径)。从上面的决策树,还可以知道是否拥有房产可以很大的决定用户是否可以偿还债务,对借贷业务具有指导意义。
决策树构建的基本步骤如下:
1. 开始,所有记录看作一个节点
2. 遍历每个变量的每一种分割方式,找到最好的分割点
3. 分割成两个节点N1和N2
4. 对N1和N2分别继续执行2-3步,直到每个节点足够“纯”为止
决策树的变量可以有两种:
1)数字型(Numeric):变量类型是整数或浮点数,如前面例子中的“年收入”。用“>=”,“>”,“<”或“<=”作为分割条件(排序后,利用已有的分割情况,可以优化分割算法的时间复杂度)。
2)名称型(Nominal):类似编程语言中的枚举类型,变量只能重有限的选项中选取,比如前面例子中的“婚姻情况”,只能是“单身”,“已婚”或“离婚”。使用“=”来分割。
如何评估分割点的好坏?如果一个分割点可以将当前的所有节点分为两类,使得每一类都很“纯”,也就是同一类的记录较多,那么就是一个好分割点。比如上面的例子,“拥有房产”,可以将记录分成了两类,“是”的节点全部都可以偿还债务,非常“纯”,“否”的节点,可以偿还贷款和无法偿还贷款的人都有,不是很“纯”,但是两个节点加起来的纯度之和与原始节点的纯度之差最大,所以按照这种方法分割。构建决策树采用贪心算法,只考虑当前纯度差最大的情况作为分割点。
量化纯度
前面讲到,决策树是根据“纯度”来构建的,如何量化纯度呢?这里介绍三种纯度计算方法。如果记录被分为n类,每一类的比例P(i)=第i类的数目/总数目。还是拿上面的例子,10个数据中可以偿还债务的记录比例为P(1)= 7/10 = 0.7,无法偿还的为P(2) = 3/10 = 0.3,N = 2。
Gini不纯度
熵(Entropy)
错误率
上面的三个公式均是值越大,表示越“不纯”,越小表示越“纯”。三种公式只需要取一种即可,实践证明三种公司的选择对最终分类准确率的影响并不大,一般使用熵公式。
纯度差,也称为信息增益(Information Gain),公式如下:
其中,I代表不纯度(也就是上面三个公式的任意一种),K代表分割的节点数,一般K =2。vj表示子节点中的记录数目。上面公式实际上就是当前节点的不纯度减去子节点不纯度的加权平均数,权重由子节点记录数与当前节点记录数的比例决定。
过渡拟合(Overfitting)
采用上面算法生成的决策树在事件中往往会导致过滤拟合。也就是该决策树对训练数据可以得到很低的错误率,但是运用到测试数据上却得到非常高的错误率。过渡拟合的原因有以下几点:
噪音数据:训练数据中存在噪音数据,决策树的某些节点有噪音数据作为分割标准,导致决策树无法代表真实数据。
缺少代表性数据:训练数据没有包含所有具有代表性的数据,导致某一类数据无法很好的匹配,这一点可以通过观察混淆矩阵(ConfusionMatrix)分析得出。
多重比较(MulitpleComparition):举个列子,股票分析师预测股票涨或跌。假设分析师都是靠随机猜测,也就是他们正确的概率是0.5。每一个人预测10次,那么预测正确的次数在8次或8次以上的概率为,只有5%左右,比较低。但是如果50个分析师,每个人预测10次,选择至少一个人得到8次或以上的人作为代表,那么概率为,概率十分大,随着分析师人数的增加,概率无限接近1。但是,选出来的分析师其实是打酱油的,他对未来的预测不能做任何保证。上面这个例子就是多重比较。这一情况和决策树选取分割点类似,需要在每个变量的每一个值中选取一个作为分割的代表,所以选出一个噪音分割标准的概率是很大的。优化方案1:修剪枝叶
决策树过渡拟合往往是因为太过“茂盛”,也就是节点过多,所以需要裁剪(PruneTree)枝叶。裁剪枝叶的策略对决策树正确率的影响很大。主要有两种裁剪策略。
前置裁剪在构建决策树的过程时,提前停止。那么,会将切分节点的条件设置的很苛刻,导致决策树很短小。结果就是决策树无法达到最优。实践证明这中策略无法得到较好的结果。
后置裁剪决策树构建好后,然后才开始裁剪。采用两种方法:1)用单一叶节点代替整个子树,叶节点的分类采用子树中最主要的分类;2)将一个字数完全替代另外一颗子树。后置裁剪有个问题就是计算效率,有些节点计算后就被裁剪了,导致有点浪费。
优化方案2:K-Fold Cross Validation
首先计算出整体的决策树T,叶节点个数记作N,设i属于[1,N]。对每个i,使用K-FoldValidataion方法计算决策树,并裁剪到i个节点,计算错误率,最后求出平均错误率。这样可以用具有最小错误率对应的i作为最终决策树的大小,对原始决策树进行裁剪,得到最优决策树。
优化方案3:Random Forest
RandomForest是用训练数据随机的计算出许多决策树,形成了一个森林。然后用这个森林对未知数据进行预测,选取投票最多的分类。实践证明,此算法的错误率得到了经一步的降低。这种方法背后的原理可以用“三个臭皮匠定一个诸葛亮”这句谚语来概括。一颗树预测正确的概率可能不高,但是集体预测正确的概率却很高。
3.随机森林(引用自cnblogs.com/LeftNotEasy/archive/2011/03/07/random-forest-and-gbdt.html)随机森林顾名思义,是用随机的方式建立一个森林,森林里面有很多的决策树组成,随机森林的每一棵决策树之间是没有关联的。在得到森林之后,当有一个新的输入样本进入的时候,就让森林中的每一棵决策树分别进行一下判断,看看这个样本应该属于哪一类(对于分类算法),然后看看哪一类被选择最多,就预测这个样本为那一类。在建立每一棵决策树的过程中,有两点需要注意----- 采样 与 完全分裂 。首先是两个随机采样的过程,randomforest对输入的数据要进行行、列的采样。 对于行采样,采用有放回的方式,也就是在采样得到的样本集合中,可能有重复的样本。假设输入样本为N个,那么采样的样本也为N个。这样使得在训练的时候,每一棵树的输入样本都不是全部的样本,使得相对不容易出现over-fitting。然后进行列采样,从M个feature中,选择m个(m << M) 。之后就是对采样之后的数据使用 完全分裂的方式建立出决策树,这样决策树的某一个叶子节点要么是无法继续分裂的,要么里面的所有样本的都是指向的同一个分类。一般很多的决策树算法都一个重要的步骤-----剪枝 ,但是这里不这样干,由于之前的两个随机采样的过程保证了随机性,所以就算不剪枝,也不会出现 over-fitting。
按这种算法得到的随机森林中的每一棵都是很弱的,但是大家组合起来就很厉害了。我觉得可以这样比喻随机森林算法:每一棵决策树就是一个精通于某一个窄领域的专家(因为我们从M个feature中选择m让每一棵决策树进行学习),这样在随机森林中就有了很多个精通不同领域的专家,对一个新的问题(新的输入数据),可以用不同的角度去看待它,最终由各个专家,投票得到结果。
随机森林是一个最近比较火的算法,它有很多的优点:
在数据集上表现良好
在当前的很多数据集上,相对其他算法有着很大的优势
它能够处理很高维度(feature很多)的数据,并且不用做特征选择
在训练完后,它能够给出哪些feature比较重要
在创建随机森林的时候,对generlization error使用的是无偏估计
训练速度快
在训练过程中,能够检测到feature间的互相影响
容易做成并行化方法
实现比较简单 (后面引用的博客中还讲到了GBDT