#小魔仙
#参考:美Brett Lantz的《机器学习与R语言》,周志华老师的《机器学习》
#仅供个人学习用
#比较长和啰嗦,提醒自己:最好使用电脑看,手机看长篇大论总是不太合适
这两天学R与机器学习,真心赶脚R太简单化了,转到吴恩达老师的课时,又觉得脑子转不过来,基础没打好。关于决策树,首先是
决策树理论和流程:
决策树是一个树形结构的模型,使用地规划分的探索法,因为它利用特征的值将数据分解成具有相似类的较小的子集,因此通常被称为分而治之。
决策树就是对样本的特征进行一个一个的问题提问,通俗的联想理解,类似编程里的判断语句,如果怎样,就怎样,否则怎样,还有多层嵌套条件,比如Excel中,判断一个数的所在区间:IF(x<10,”[1,10]”,ELSEIF(x<50,”[11,50]”,”[5,100]”)),大概这样,想银行算利率时用的思路。比如这个好瓜判断树:
决策树的结点:
一个根结点:包含了样本全集,就是一个步,所有的待分类数据;
若干个决策结点:是带有根据某一属性作出决定的部分,就是根结点到某一叶结点中间的分类条件;决策结点后面可能是叶结点也可能决策结点。
若干个叶结点:就是分类结果,树的每一个决策结点都最后会落到叶结点上,代表树的结束。
选择?
我们已经知道,决策树总是需要从某一个决策结点开始,再进行第一次决策后再考虑第二次,这样递进,因此如何选择首发决策特征就很重要了。
这里首先引出了一个概念:熵。熵是用来表示样本纯度的,取值范围0到1。其中0表示样本完全同质,就是所有案例都属于同一类,没有分类的价值。1是样本凌乱的最大数量,一般只有无线趋近于1而不会等于1,等于1大概就是每个样本都是一个单独的类,这样就是明显的过拟合问题。
熵的计算公式:
其中,对于给定样本集D,|y|表示类的水平数/长度(类似向量的模),就是类的个数,pk表示D中第k类样本所占的比例。比如对于二分类的信息熵,设概率为x与(1-x),如图:
可以看出,当x=0.5时,一个五五分的样本集的信息熵最大,即这样的样本集最凌乱。如果不好理解这个“凌乱”,结合想下0.8:比0.2的情况,0.8已经将包含了绝大部分样本,因此趋于相同,表示不凌乱。
然而对于样本集的描述仍然不能直接用于决定特征选择,因为信息熵表现的是初始样本集的情况,告诉我们这个样本是否值得用于分类,我们还需要知道的是,在进行一个决策判定后,分类的结果能否提供最大的信息熵,即分类的结果是否值得下一次判定分类,因此引出
信息增益:即由每一个可能特征的分割所引起的同质性(均匀性)变化。通纯度/信息熵情况。对于某一特征a,信息增益的计算方法是分割前的数据分区D的熵减去分割后产生的数据分区S的熵。
Gain(D,a)=Ent(D)-Ent(S)
对于分割后产生的分区的熵计算,设特征F有V个取值,Dv表示D落在特征v里面的样本,计算每个Dv熵,然后对每个熵赋权重在相加。这个权重一般用|Dv|/|D|代替,即样本数量越多的分支结点影响越大。
一般而言,信息增益越高,根据某一特征分割后创建的分组就越均衡,如果信息增益为0,表示分割后的熵和原本数据的熵相等,即根据该特征进行分割后的熵值不会减少,也就是说明没有分割的意义。而最大信息增益表明,分割后的数据分区熵值足够小,,表明都是属于同一类的,即是最好的分类结果。因为我们是希望分割后的数据是合理的分类结果,所以希望分割后的信息熵足够小,即信息增益足够大。
信息增益的改进:增益率:
从上面其实可以看出,信息增益准则对可取值数目较多的属性有偏好,但这偏好有时会有不利影响,为了降低不利影响,提出了增益率(gain ratio):
看了应该就能明白这是在干啥,信息增益是依据数量进行赋予权重,然后增益率也是依据数量赋予权重,不过一个是凸显重要类别,一个是降低类别重要性。
解释下,首先得知道对数函数的曲线图,单调增函数,加上负号后变成单调减函数,因此对于更大的|Dv|/|D|,log2(|Dv|/|D|)也会更小。所以平衡了之前的信息增益带来的偏好。
另外除了信息增益标准,还有使用基尼指数来选择的,给出公式,不多说,自行查阅。
选择情况大致这样了,废了我好多脑细胞。
选择说完了,接下来是剪枝:
剪枝处理是为了应对决策树过拟合的情况,过拟合指的是决策树在通过无限次(说明需要,实际情况肯定是有限的)增长和分割后,结果过于具体,一直分割到算法中再也没有可用于分割的特征为止。就是训练样本学得“太好了”,导致分类太具体。
这样说,决策树在训练样本时表现出了很好的结果分类,但在除开样本外的数据集,如测试集,他的表现比较差。说明当前的决策树过于“茂盛”,只适合用于当前的训练数据集。或者说该决策树把训练数据集的数据的一些独有的特征用到了算法之中。应该能理解了。
这时候再来看过拟合的定义:给定一个假设H,如果在假设空间上存在另一个假设H',使得在训练集上H的错误率差比H'小,而在测试集上H的错误率却比H'要大,那么称假设H过度拟合训练数据。
剪枝分为预剪枝和后剪枝,就不详细说明了,要写吐了,也怕看的人要吐了。
预剪枝就是一旦决策树达到一定数量的决策,或者决策结点仅含少量的案例,就停止树的生长,又叫提前停止法。
后剪枝是让训练集生成一棵完整的树,然后根据结点的错误率修剪决策树。
概览到这里结束,接下来是R语言的实现(写累到了)。。。
心好累,主要是暂时还没能把这些知识用简单有趣的方式表现出来,不过我觉得这样对于学习才是更好的,阅读不要只是碎片化时间与碎片化学习,总得有精钻深的东西。