决策树
决策树是一种有监督的机器学习方法,可以用于解决分类和回归问题。决策树可以简单地理解为达到某一特定结果的一系列决策。
当决策树作为分类器用于分类时,通过训练数据建立决策树,可以用这棵树高效地对未知数据进行分类,同时其也具有两大优点:
- 决策树模型可读性好,具有描述性,有助于人工分析
- 效率高,决策树只需要进行一次构建,可以反复使用,每一次预测得最大计算次数不能超过树的深度
缺点:容易产生过拟合
ID3算法(只分类)
信息量:信息量是用来衡量一条信息的发生使系统变得更确定的程度!
信息量的大小与其发生的概率成反比。即一条信息包含的内容更多则其更不容易让我们信服。概率越小的事情,发生时所携带的信息量越大!信息量的计算公式如下:
公式中:h(x):信息量大小 p(x)∶x发生的概率
其中对数底数可以用2或者e
信息熵:信息嫡是用来衡量一个系统有序程度的指标。系统的信息嫡越大,说明该系统越为混乱,即形势越为不明朗。
信息嫡和信息量就是系统与个体的关系。信息量衡量了系统中某种结果发生时所携带的信息大小。而信息嫡则是研究系统各种可能发生的结果及每种结果发生的概率与整个系统的混乱度的关系。信息熵公式如下:
两变量联合熵公式:
条件熵公式:
信息增益:信息嫡是指系统的不确定性,那么条件嫡就是指在确定了Y之后X的不确定性,那么H(X)-H(X|Y)就是指在确定Y之后X的不确定性减少程度,记为I(X,Y),t也叫信息增益。
ID3算法就是利用信息增益来判断当前节点应该用哪一个特征来构建决策树,信息增益越大,即系统减少的不确定性越多,则此特征越适合作为下—节点。
CART算法(分类回归树)
CART算法既可以做回归也可以做分类,其主要特点是一颗二叉树(每一个节点只有两个子节点)。
分支方法:具体分类要用到基尼指数
- 对于连续特征的情况:比较阈值。即高于某个阈值就属于某一类,低于某个阈值就属于另外一类。
- 对于离散特征的情况:抽取子特征,比如颜值这个特征,有帅、一般、丑三个水平,就可以分为(帅、一般)和(丑)、(帅、丑)和(一般)、(帅)和(一般、丑)三种情况。
基尼指数GINI:某特征下包含属性的杂乱程度。公式如下:
基尼不纯度:
T:当前节点 T1:二分类结果-1 T2:二分类结果-2
S1:二分类结果-1条件下的结果数量 S2:二分类结果-2条件下的结果数量
以我们上图的“表面覆盖”特征为例,此特征共有毛发、鳞片、无、皮、刚毛五种属性。我们随机选择两种分类(其实总共有5种分类)。
- 毛发和非毛发。毛发包含哺乳类3个、鸟类2个。非毛发包含爬行类3个、鱼类3个、两栖类2个、哺乳类2个。
- 鳞片和非鳞片。
毛发GINI = 1-[(3/5)^2+(2/5)个2] = 0.48
非毛发GINI = 1-[(3/10)^2+(3/10)^2+(2/10)^2+(2/10)^2]= 0.74
则GINI(1) = 5/15 * 0.48 + 10/15* 0.74 = 0.65333
同理可得鳞片GINI = 0.5
非鳞片GINI = 0.59
则GINI(2)= 6/15 * 0.5 + 9/15 * 0.59 = 0.554
因为0.65333>0.554,所以相比较而言用鳞片非鳞片分类更好(因为基尼不纯度越小,越好)
连续特征处理
将连续属性转换为离散属性再进行处理。虽然本质上属性是连续的,但对于有限的采样数据来讲它是离散的,如果训练数据包含N个样本,那么我们可以从任意两个相邻的样本数据之间寻找分裂点,计算每一个分裂情况的,取最小的作为分裂点即可。
步骤:
- 对样本的特征取值进行升序排序
- 将每两个特征取值的中点作为分裂点,将数据分成两部分,计算每个分裂点的
- 选择最小的分裂点作为该特征的最佳分裂点。
终止生长条件
当一个节点产生两个子节点后,继续向下递归的产生新节点,最终当节点包含的数据都属于最终的类别的时候就可以终止分裂了。(最简单的就是不管你,分到最后出来就行)
剪枝:当一个分类决策树长的太深的时候,容易对一些噪声数据产生过拟合作用,因此我们需要通过剪枝来解决这个问题。
剪枝分为预剪枝和后剪枝。预剪枝是指在树的构造完成之前就知道哪些节点可以剪掉,于是干脆不对这些节点进行分类。后剪枝是指构造出完整的决策树之后再来开叉哪些节点可以剪掉。
剪枝方法其一:代价复杂性剪枝
子树损失函数
其中T为任意一颗子树,C(T)为树T的误差代价(可使用基尼指数),|T|为树T的叶子节点个数,α为参数,它权衡数据的拟合程度与树的复杂度。
我们剪枝的操作最终目的就是让子树的损失函数变小
1.减小树T的误差代价
2.减小树T的叶子节点个数,即将此树剪掉。
如果进行剪枝之后树的损失函数减小,就剪,反之保留此树。
对于任意子树T
剪枝前:有|Tt|个叶子节点,误差代价为C(Tt)
剪枝前损失函数:
剪枝后:有本身一个叶子节点,误差代价为C(T)
剪枝后损失函数:
如果当α等于0或者足够小的时候: 剪枝
当a增大,那么在其为某一刻: 剪不剪都行
当α继续增大,那么: 不剪枝
因此这个α可以作为我们用来衡量是否应该剪枝的节点参数。
可以确定α:
循环迭代,从底层开始计算每个树节点的a值,每次减去其最小的c值的树,一直剪到根节点,然后得到一系列的最优树。
验证选择最优树
通过将数据放入构建好的树木中,选择判断正确率最高的树。
随机森林
随机森林是基于树的机器学习算法,该算法利用多颗树的力量来进行决策。森林中的每颗树并不一样,每棵树都是被随机创造的,每棵树中的每一个节点都是待选特征一个随机子集,所有树的输出结果整合起来就是森林最后的输出结果。
举个例子:对于一个测试的数据,将它投入到我们用于分类的随机森林中,每棵树对其会产生不同的测试结果,最后依据少数服从多数的原则选出最终的测试结果。这种结合了多个单一模型的输出(也被称为弱学习)的过程也被称为集成学习。
随机森林重点是“随机”两个字,它包括两个方面:
- 训练数据的随机选取:即用于训练单颗树的数据应该是随机、有放回的从全部数据中选取和原始数据集相同的数据量。此要求是为了防止每棵树用于训练的数据一致导致训练出的每棵树都一样,这样就丢失了构建多棵树的意义。
- 待选特征的随机选取:使得森林中的各颗树都能够彼此不同,提示系统的多样性,从而提升分类性能。
随机森林调参
机器学习超详细实践攻略(10):随机森林算法详解及小白都能看懂的调参指南_u013044310的博客-CSDN博客_随机森林算法调参