2.1原理
什么是决策树
从根节点开始一步步走到叶子节点,所有的数据都最终会落在叶子节点上。可以做分类也可以做回归
由什么组成
根节点:第一个选择点
非叶子节点:中间过程
叶子节点:最终的决策结果
两个阶段
训练阶段
从给定训练集中构造一棵树(从根节点开始选择特征,如何进行特征切分)
测试阶段
根据构造出来的树模型,从上到下走一遍
2.2 如何切分特征
熵:表示随机变量不确定性的度量(数据内部的混乱程度)
− ∑ ( P i ∗ l o g P i ) ( i = 1 , 2 , 3 , . . . n ) -\sum(Pi*logPi)(i=1,2,3,...n) −∑(Pi∗logPi)(i=1,2,3,...n)
log函数Pi的值越接近1,那么log值越接近0,因前面的-号越大的概率得到的熵值越小,越小的概率得到的熵值越大
A的集合[1,1,1,1,1,1,1,1,2,2]
B的集合[1,2,3,4,5,6,7,8,9,1]
很明显A的熵值比较低(我们希望通过节点分支后的数据类型的熵值大还是小?)
希望经过一次决策后得到一个A集合类型的
信息增益:表示特征X使得类y的不确定性减少的程度(熵值下降了多少)
2.3例子
图上数据为14天的打球数据
划分方法有四种
根据信息增益来选择根节点
此时的熵为
−
(
9
14
l
o
g
2
9
14
)
−
(
5
14
l
o
g
2
5
14
)
=
0.940
-(\frac{9}{14}log_2 \frac{9}{14})-(\frac{5}{14}log_2 \frac{5}{14})=0.940
−(149log2149)−(145log2145)=0.940
根节点的选择
当天气作为根节点时此时的熵为
outlook = sunny时,熵值为0.971
− ( 2 5 l o g 2 2 5 ) − ( 3 5 l o g 2 3 5 ) = 0.971 -(\frac{2}{5}log_2 \frac{2}{5})-(\frac{3}{5}log_2 \frac{3}{5})=0.971 −(52log252)−(53log253)=0.971
outlook = overcast时熵值为0
− ( 4 4 l o g 2 4 4 ) = 0 -(\frac{4}{4}log_2 \frac{4}{4})=0 −(44log244)=0
outlook = rainy时,熵值为0.971
− ( 3 5 l o g 2 3 5 ) − ( 2 5 l o g 2 2 5 ) = 0.971 -(\frac{3}{5}log_2 \frac{3}{5})-(\frac{2}{5}log_2 \frac{2}{5})=0.971 −(53log253)−(52log252)=0.971
熵值计算:
( 5 14 ) ∗ 0.971 + ( 4 14 ) ∗ 0 + ( 5 14 ) ∗ 0.971 = 0.693 (\frac{5}{14})*0.971 + (\frac{4}{14})*0 + (\frac{5}{14})*0.971 = 0.693 (145)∗0.971+(144)∗0+(145)∗0.971=0.693
增益为0.940 - 0.693 = 0.247
当温度作为根节点时此时的熵为
temperature = hot时,熵值为1
− ( 1 2 l o g 2 1 2 ) − ( 1 2 l o g 2 1 2 ) = 1 -(\frac{1}{2}log_2 \frac{1}{2})-(\frac{1}{2}log_2 \frac{1}{2})=1 −(21log221)−(21log221)=1
temperature = mid时,熵值为
− ( 2 3 l o g 2 2 3 ) − ( 1 3 l o g 2 1 3 ) = 0.918 -(\frac{2}{3}log_2 \frac{2}{3})-(\frac{1}{3}log_2 \frac{1}{3})=0.918 −(32log232)−(31log231)=0.918
temperature = cool时,熵值为
− ( 3 4 l o g 2 3 4 ) − ( 1 4 l o g 2 1 4 ) = 0.811 -(\frac{3}{4}log_2 \frac{3}{4})-(\frac{1}{4}log_2 \frac{1}{4})=0.811 −(43log243)−(41log241)=0.811
( 4 14 ) ∗ 1 + ( 6 14 ) ∗ 0.918 + ( 4 14 ) ∗ 0.811 = 0.911 (\frac{4}{14})*1 + (\frac{6}{14})*0.918 + (\frac{4}{14})*0.811 = 0.911 (144)∗1+(146)∗0.918+(144)∗0.811=0.911
增益为
0.940 − 0.911 = 0.029 0.940 - 0.911 = 0.029 0.940−0.911=0.029
当湿度作为根节点时此时的熵为
humidity = high时熵值为:
− ( 3 7 l o g 2 3 7 ) − ( 4 7 l o g 2 4 7 ) = 0.985 -(\frac{3}{7}log_2 \frac{3}{7})-(\frac{4}{7}log_2 \frac{4}{7})=0.985 −(73log273)−(74log274)=0.985
humidity = normal时熵值为:
− ( 6 7 l o g 2 6 7 ) − ( 1 7 l o g 2 1 7 ) = 0.592 -(\frac{6}{7}log_2 \frac{6}{7})-(\frac{1}{7}log_2 \frac{1}{7})=0.592 −(76log276)−(71log271)=0.592
熵值计算
1 2 ∗ 0.985 + 1 2 ∗ 0.592 = 0.787 \frac{1}{2}*0.985+\frac{1}{2}*0.592=0.787 21∗0.985+21∗0.592=0.787
增益为
0.940 − 0.787 = 0.153 0.940-0.787=0.153 0.940−0.787=0.153
当风作为根节点时此时的熵为0.891
windy = false 熵值为
− ( 3 4 l o g 2 3 4 ) − ( 1 4 l o g 2 1 4 ) = 0.811 -(\frac{3}{4}log_2 \frac{3}{4})-(\frac{1}{4}log_2 \frac{1}{4})=0.811 −(43log243)−(41log241)=0.811
windy = True 熵值为
− ( 1 2 l o g 2 1 2 ) − ( 1 2 l o g 2 1 2 ) = 1 -(\frac{1}{2}log_2 \frac{1}{2})-(\frac{1}{2}log_2 \frac{1}{2})=1 −(21log221)−(21log221)=1
熵值计算
8 14 ∗ 0.811 + 6 14 ∗ 1 = 0.891 \frac{8}{14}*0.811 + \frac{6}{14}*1=0.891 148∗0.811+146∗1=0.891
增益为
0.940 − 0.891 = 0.049 0.940-0.891=0.049 0.940−0.891=0.049
由上知
0.247 > 0.153 > 0.049 > 0.029 0.247>0.153>0.049>0.029 0.247>0.153>0.049>0.029
所以选择天气作为根子节点以此类推
2.4剪枝
预剪枝:限制深度,叶子节点个数叶子节点样本数,信息增益量等
后剪枝:通过一定的衡量标准