2020-08-22

描述与算法
1.决策树是一种常见的机器学习方法,其是基于树结构来决策的,一般地,一颗决策树包含一个根结点,若干个内部结点和若干个叶结点。
2.结点来自于属性,在每一步进行决策时,选取最优划分属性,根据属性的类别,特征的不同,来划分样本集,然后在分支里,依据剩余的属性集,选取最优属性来继续决策,直至需要划分的数据集分支全属于同一个特征或者属性集为空或者数据样本同属于一个类别。
在这里插入图片描述

划分依据(如何选取最优划分属性)
1.ID3算法:依据信息增益
信息量(不确定性):

1.信息量是度量一个数据或者事件提供的信息的多少。信息的多少与事件发生的概率有关,越不容易发生的事件发生了提供的信息量越大(颠覆我们的认知),比方说今天太阳从东边升起,根本没有提供什么信息量,但如果今天从西边升起,就提供了大量的信息量。所以信息量与事件的概率成反比。其次信息量不能为负数。
2.按照我们的认知,如果A、B事件不想关,则A和B一起提供的信息量,应该为A和B单独提供的信息量之和,即H(A+B)=H(A)+H(B)H(A+B)=H(A)+H(B)
3.依据上面两个性质,依照传统规定,我们可以定义信息量度量公式为:H(A)=−log2p(A)H(A)=−log
2

p(A),值越大代表提供信息

信息熵:

信息熵是来定义一个随机变量提供信息量的期望值,从而信息熵公式为:Ent(X)=−∑nip(xi)log2p(xi)Ent(X)=−∑
i
n

p(x
i

)log
2

p(x
i

),其中n表示随机变量X的取值情况的个数。对于决策树算法来说,针对每次决策前的数据集,其概率为每一类(不是属性)的比率。

条件熵:

就是条件概率的信息熵。随机变量X在变量Y的条件下的信息熵。
Ent(X∣Y)=∑mjp(yj)Ent(X∣yj)=−∑mjp(yj)∑nip(xi)log2p(xi∣yj)
Ent(X∣Y)=
j

m

p(y
j

)Ent(X∣y
j

)=−
j

m

p(y
j

)
i

n

p(x
i

)log
2

p(x
i

∣y
j

)
条件熵越大,此条件下信息量越多。
在决策树算法中,条件熵的条件就是,我们决策依据的某个属性,p(yi)p(y
i

)就是依照属性决策后,每个子数据集的比例,然后熵分别是每个子数据大的熵(类别)

信息增益:

在ID3算法中,使用信息增益来选取最优划分属性,信息增益=信息熵-条件熵,
Gain(D,a)=Ent(D)−∑Vv=1∣Dv∣∣D∣Ent(Dv)
Gain(D,a)=Ent(D)−
v=1

V

∣D∣
∣D
v


Ent(D
v
)

针对每个属性,我们都计算一下信息增益,选取信息增益大的属性作为最优划分属性。

缺点:

根据上面的理解,信息熵是代表随机变量的复杂度(不确定度),条件熵代表在某一个条件下,随机变量的复杂度(不确定度)变成了条件熵。而我们的信息增益恰好是:信息熵-条件熵。换句话说,信息增益代表了在一个条件下,信息复杂度(不确定性)减少的程度(从原来的信息熵变成了条件熵,中间减少的部分)。所以信息增益越大,代表我们减少不确定性越多,纯度越高。
对于ID3算法,会偏向于取值数目较多的属性。因为取值数目越多的属性,代表其不确定越大,若我们按照这个属性划分之后,那么不确定性就会减少很多。

2.C4.5算法:依据信息增益率
增益率:

就是在原有的信息增益基础上,我们再除以属性a的“固有值”:IV(a)=−∑Vv=1∣Dv∣∣D∣log2∣Dv∣∣D∣IV(a)=−∑
v=1
V

∣D∣
∣D
v


log
2

∣D∣
∣D
v


,一般来说,a的取值数目越多,则IV(a)越大,相应的信息增益率就越小。

具体做法:

为了防止信息增益率偏向于取值数目较少的属性,我们一般是先依据信息增益选取一部分候选属性,再从候选划分属性中,找到信息增益率最大的,作为最优划分属性。

3.CART算法:依据基尼系数
基尼系数:

基尼系数用来度量数据集D的“纯度”,即确定性:Gini(D)=−∑ni=1∑j≠ipipj=1−∑kp2kGini(D)=−∑
i=1
n


j


=i

p
i

p
j

=1−∑
k

p
k
2

直观来说,Gini(D)反映了从数据集D中随机抽取两个样本,其类别标记不一致的概率,一次Gini(D)越小,则数据集纯度越高。故找基尼系数最小的属性作为最优划分属性

实践
#导入库
import numpy as np
import pandas as pd

import matplotlib.pyplot as plt
import seaborn as sns
#sklearn库中决策树分为回归和分类两个模块
from sklearn.tree import DecisionTreeClassifier
from sklearn import tree
1
2
3
4
5
6
7
8
9
#构造数据集
x_fearures = np.array([[-1, -2], [-2, -1], [-3, -2], [1, 3], [2, 1], [3, 2]])
y_label = np.array([0, 1, 0, 1, 0, 1])
#导入模型
tree_clf= DecisionTreeClassifier()
#模型训练
tree_clf = tree_clf.fit(x_fearures, y_label)
1
2
3
4
5
6
7
#可视化构造的数据
plt.figure()
plt.scatter(x_fearures[:,0],x_fearures[:,1], c=y_label, s=50, cmap=‘viridis’)
plt.title(‘Dataset’)
plt.show()
1
2
3
4
5
结果在这里插入图片描述

#模型预测
x_fearures_new1 = np.array([[0, -1]])
x_fearures_new2 = np.array([[2, 1]])
#在训练集和测试集上分布利用训练好的模型进行预测
y_label_new1_predict = tree_clf.predict(x_fearures_new1)
y_label_new2_predict = tree_clf.predict(x_fearures_new2)
print(‘The New point 1 predict class:\n’,y_label_new1_predict)
print(‘The New point 2 predict class:\n’,y_label_new2_predict)
1
2
3
4
5
6
7
8
结果

The New point 1 predict class:
[1]
The New point 2 predict class:
[0]

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值