申明:此文为学习记录过程html
决策树是一种非线性有监督分类模型,随机森林是一种非线性有监督分类模型。线性分类模型好比说逻辑回归,可能会存在不可分问题,可是非线性分类就不存在。决策树是机器学习中最接近人类思考问题的过程的一种算法,经过若干个节点,对特征进行提问并分类(能够是二分类也可使多分类),直至最后生成叶节点(也就是只剩下一种属性)。算法
决策树是一种简单可是普遍使用的分类器。经过训练数据构建决策树,能够高效的对未知的数据进行分类。决策数有两大优势:1)决策树模型能够读性好,具备描述性,有助于人工分析;2)效率高,决策树只须要一次构建,反复使用,每一次预测的最大计算次数不超过决策树的深度。bootstrap
信息熵:熵表明信息的不肯定性,信息的不肯定性越大,熵越大;好比“明天太阳从东方升起”这一句话表明的信息咱们能够认为为0;由于太阳从东方升起是个特定的规律,咱们能够把这个事件的信息熵约等于0;说白了,信息熵和事件发生的几率成反比:数学上把信息熵定义以下:H(X)=H(P1,P2,…,Pn)=-∑P(xi)logP(xi)app
互信息:指的是两个随机变量之间的关联程度,即给定一个随机变量后,另外一个随机变量不肯定性的削弱程度,于是互信息取值最小为0,意味着给定一个随机变量对肯定一另外一个随机变量没有关系,最大取值为随机变量的熵,意味着给定一个随机变量,能彻底消除另外一个随机变量的不肯定性dom
定义为:对于特征A的信息增益为:g(D,A)=H(D)-H(D|A),信息增益就是给定训练集D时,特征A和训练集D的互信息I(D,A).选取信息增益最大的特征做为分支的节点.(后面有举例)机器学习
其中,条件熵H(D|A)的计算公式以下:函数
信息增益的缺点:对数目较多的属性有偏好,且生成额决策树层次多,深度浅,为改善这些问题,提出方法二.post
其等于信息增益/属性A的熵学习
信息增益率的缺点:对数目较少的属性有偏好,后又有方法三.测试
其计算公式以下:
Gini系数能够理解为y=-lnx在x=1处的一阶展开.
总结之,一个属性的信息增益(率)/gini指数越大,代表属性对样本的熵较少的程度越大,那么这个属性使得样本从不肯定性变为肯定性的能力越强,分支时选择该属性做为判断模块使得决策树生成的越快.
看了一遍概念后,咱们先从一个简单的案例开始,以下图咱们样本:
对于上面的样本数据,根据不一样特征值咱们最后是选择是否约会,咱们先自定义的一个决策树,决策树以下图所示:
对于上图中的决策树,有个疑问,就是为何第一个选择是“长相”这个特征,我选择“收入”特征做为第一分类的标准能够嘛?
如今咱们就把信息熵运用到决策树特征选择上,对于选择哪一个特征咱们按照这个规则进行“哪一个特征能使信息的肯定性最大咱们就选择哪一个特征”;好比上图的案例中;
第一步:假设约会去或不去的的事件为Y,其信息熵为H(Y);
第二步:假设给定特征的条件下,其条件信息熵分别为H(Y|长相),H(Y|收入),H(Y|身高)
第三步:分别计算信息增益(互信息):G(Y,长相) = I(Y,长相) = H(Y)-H(Y|长相) 、G(Y,) = I(Y,长相) = H(Y)-H(Y|长相)等
第四部:选择信息增益最大的特征做为分类特征;由于增益信息大的特征意味着给定这个特征,能很大的消除去约会仍是不约会的不肯定性;
第五步:迭代选择特征便可;
按以上就解决了决策树的分类特征选择问题,上面的这种方法就是ID3方法,固然仍是别的方法如 C4.5;等;
决策树对训练样本具备很好的分类能力。而一棵对样本彻底分类的决策树(完整树),对未知的测试数据未必有很好的预测能力,泛化能力较差,容易出现过拟合现象。
完整树:决策树T的每一个叶子节点的样本集合中的样本都为同一类型。
过拟合会致使构建出过于复杂的决策树,为解决这个问题,能够经过剪枝的方法来简化已生成的决策树,即将某个划分属性的节点的分支减掉,并将该节点做为一个某个决策结果的叶子节点(对应的决策结果可采用占多数的样本标记)。那怎么判断某个划分属性的节点是否须要剪枝呢?(剪枝在于减小叶子节点的数量)
于是,咱们须要设计一个分类偏差评估函数,而后经过极小化决策树总体的损失函数实现剪枝。
设决策树 T 有 n 个叶子节点,设第t个叶子节点的样本集合Dt有Nt个样本,这些样本的标记类别不必定相同,假设样本集合Dt中的样本有k种标记类别,第i种类别的样本有Nti个。
那么,第t个叶子节点的样本集合的经验熵 定义为:
。
能够看出,当第t个叶子节点的样本集合只有一种标记类型时,经验熵为0。
下面给出咱们的决策树 T 的损失函数的定义:。其中n为叶子节点数,也能够用|T|来表示,α为经验值参数(α≥0)。
C(T)表示决策树对训练数据的预测偏差,参数α控制二者之间的影响,α越大,要求模型越简单,α=0表示不考虑模型的复杂度(便可以产生较多的叶子节点)。
剪枝的过程,就是当α肯定时,选择损失函数最小的模型。分类越细,叶子节点的经验熵就越小,C(T)越小,可是因为分类越细会致使叶子节点的数目会不少,α|T|(或αn)越大。损失函数反映的是二者的平衡。
决策树的生成过程只考虑了样本集合分类的纯度,只考虑更好地拟合训练数据,而剪枝过程在于减少总体的复杂度。
决策树的剪枝算法:固定某个经验值α,对划分属性的结点进行剪枝预估,若剪枝后,决策树损失函数减少了,则减掉该结点的叶节点,将该结点做为新的叶节点,该结点对应的决策结果能够为其样本集合中占多数的样本标记。(或构造不一样的α值获得一些备选树,经过交叉验证的方法获得最优树)
若决策树的度过深的话会出现过拟合现象,对于决策树的过拟合有二个方案:
先剪枝和后剪纸(能够在构建决策树的时候经过指定深度,每一个叶子的样本数来达到剪枝的做用)
引入评价函数(损失函数):全部叶节点的加权求熵,其值越小代表分类越精准,那么该决策树分类觉越好.Nt是叶节点中样本的个数.
剪枝方法之预剪枝:
从前日后生成树的过程当中,从树根开始,逐一辈子成节点,比较其生成与不生成的C(T),在验证集上选择C(T)小的做为最终的数.
剪枝方法以后剪枝:
剪枝系数:
决策树生成后,查找剪枝系数最小的节点,视为一颗决策树,重复以上,知道只剩下一个节点,这样获得多颗决策树,在验证集上计算损失函数最小的那棵树做为最终的决策树.
构建大量的决策树组成森林来防止过拟合;虽然单个树可能存在过拟合,但经过广度的增长就会消除过拟合现象
随机森林(Random forest):生成多颗决策树,投票选举的原则
引入两种方法:bootstrapping(有放回的随机抽取)和bagging(bootstrap aggragation)
bagging的方法以下:
随机森林是在bagging上作了改进,计算过程以下:
注意:随机森林或者bagging是基于若干个弱分类器组成的基本分类器进行vote决定最终的分类的,基本分类器也能够选择强分类器(如LR,SVM等),但可能由于强分类器某些特征太多明显而不能被多个分类器的平均抹掉,不能很好达到过拟合的效果.
->计算简单,易理解,可解释性强
->适合处理确实属性的样本,对样本的类别要求不高(能够是数值,布尔,文本等混合样本)
->能处理不相干特征
->容易过拟合
->忽略了数据之间的相关性
->不支持在线学习,对新样本,决策树须要所有重建