1.决策树是什么?
本菜鸟真的不知道决策树是啥,我们老师上课讲的贼快,我真的是云里雾里看昙花一现。
好好好,结果呢,作业不就来了。
本菜鸟太懒了,大家以我为戒,不要把作业堆到最后。
(。・∀・)ノ゙嗨
一点一点将问题解决这个过程真的很爽。
先搞懂知识点定义这些东西
(bushi 刚刚想查点资料没想到,尽然给我推荐,男狐狸跳舞视频。我丢,人家核心很强。)
回到正题!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
决策树:
光看这个词的意思你就已经能知道啥意思了。
决策树比较官方的定义:
1.决策树算法是一种归纳分类算法,它通过对训练集的学习,挖掘出有用的规则,用于对新集进行预测。 非参数学习算法。对每个输入使用由该区域的训练数据计算得到的对应的局部模型。
2.决策树归纳的基本算法是贪心算法,自顶向下递归方式构造决策树。
3.在其生成过程中,分割方法即属性选择度量是关键。通过属性选择度量,选择出最好的将样本分类的属性。
决策树构建参考:
1.从根节点一步步走到叶子节点,数据最终会落到叶子节点,因此可以分类也可以回归。(归纳学习算法)
2.类似于流程图的树结构,内部节点表示在一个属性上的测试,每个分支代表一个测试输出,树叶节点代表类或类分布,树最顶层是根节点。
- TREE CONSTRUCTRUE 树组成
~根节点:第一个分类选择点
~非叶子节点与分支:中间过程
~叶节点:最终分类结果
OK 大致了解这么多
使用决策树分类步骤:
1.训练阶段、
2.测试阶段
建立决策树:
1.建树
2.剪枝
建立决策树:
核心:每层选择最佳分割属性
衡量标准:
熵(大小与混乱程度成正比,不确定性越大,熵越大) 表达公式:H(x)= - 加和(Pi*log2 (为底)Pi) i=0,1,2...... (Pi概率)
熵值计算举例:袋子中有3白一红球,求这个袋子中球的熵值,
Pi红球=1/4 Pi白球=1/4
H(x)= -(1/4*log 2 (为底)1/4+3/4*log2 3/4)最后结果为正的。
决策树构建应该是熵减少的过程。
信息增益 GAIN(S,A)=E(S)-E(S,A):(官话)属性X使得Y不确定性减少程度。 (白话) 熵值减少多少,信息增益增加了多少。
计算举例:
利用ID3,结合以下数据集建立决策树,应该选择哪个属性为根节点?信息增益是多少?
ok,动动你的小脑瓜和爪子,用计算器算一下呗
咱们先算一下,旧系统中的
0值:No*5 Yes*9
E(S)=H(X)= -5/14*log2 ^5/14 -9/14*log2^9/14=0.940
先就出一个属性 OUtLook 算这个属性的条件熵吧,
OutLook:sunny(3* No 2*Yes 5个值)rain(3*Yes 2*No 5个值) overcast(4*Yes 4个值)
sunny H(x)= - 3/5*log2^3/5 - 2/5*log2/5=0.971
rain H(x)=- 3/5*log2^3/5 - 2/5*log2/5=0.971
overcast H(x)=0
因为占比不同,因此我们计算的时候要算加权
E(S,A)=0.971*5/14+0.971*5/14+0*4/14=0.693
GAIN(S,A)=E(S)-E(S,A)=0.247
相较于其他几个属性,outLook的信息增益最大,因此我们选OutLook为根节点。
嘿嘿!是霸是,信息增益值等于熵的减小值 ~(^ 。^)~
计算信息增益时需要注意
直接根据表数据中的行为计算旧系统的熵
ID3算法(选择信息增益最大作为根节点)决策树生成算法、
ID3算法优点:
能快速进行生成决策
- 理论清晰:ID3算法基于信息熵和信息增益的原理进行构建,其理论基础清晰,易于理解和解释。
- 方法简单:ID3算法的实现相对简单,不需要复杂的数学运算和模型训练,能够快速构建决策树。
- 学习能力较强:ID3算法能够通过迭代选择信息增益最大的特征属性作为分割属性,从而有效地对数据进行分类和预测。
ID3算法缺点:
只能对离散型数据集进行决策树分类
容易偏向于信息增益率高的属性作为根节点分类,但是可能不太对劲,如果有一列是标识每行的数,那么计算出来熵是0,信息增益最大,选标识行的这列为根节点怎么分?
难搞 >(》' '《) <
-
只能处理分类属性数据:ID3算法无法直接处理连续型数据,只能处理分类属性数据。这限制了ID3算法的适用范围,需要在进行数据预处理时将连续型数据转换为离散型数据。
-
倾向于选择取值较多的属性:ID3算法使用信息增益作为决策树节点属性选择标准,由于信息增益在类别值多的属性上计算结果大于类别值少的属性上计算结果,因此ID3算法倾向于选择取值较多的属性进行划分。这可能导致决策树过于复杂,产生过拟合现象。
-
不能增量的接受训练集:ID3算法不是递增算法,每增加一次实例就需要重新构造新的决策树,这在实际应用中可能会带来较大的计算开销。
-
考虑不全面:
- ID3算法没有考虑到缺失值的情况,如果数据集中存在缺失值,可能会导致算法无法正常运行或产生错误的结果。
- ID3算法没有考虑过拟合问题,容易因为过度拟合训练数据而降低模型的泛化能力。
- ID3算法每次筛选都只考虑一个变量,没有考虑变量之间的相关性,这可能导致算法在构建决策树时忽略了一些重要的信息。
SO 人家进阶了一个C4.5版本咯
C4.5(ID3的升级PLUS版本)
GAIN_RATIO=GAIN(A)/I I就是SplitInfo(D) 分割熵
公式可以去查,这里不太好打!!!
选用信息增益率=属性信息增益 除以 分割熵(解决标号问题)
好好好,那我们根据上述的数据集计算一下,OUTLOOK信息增益率。
因为我们已经计算好了OutLook的信息增益,因此在这里我们算一下分割熵,
OutLook:sunny(3* No 2*Yes 5个值)rain(3*Yes 2*No 5个值) overcast(4*Yes 4个值)
SplitInfo(A)OutLook= - 5/14*log2^5/14 - 5/14*log2^5/14 -4/14*log2^4/14
PS:注意和之前的信息增益中的计算属性的条件熵区分开来。
这就是大致的决策树一些相关的算法知识点。
等等,再出决策树id3的c的算法实现吧。