算法简介
决策树是一种常见的分类模型,在金融分控、医疗辅助诊断等诸多行业具有较为广泛的应用。决策树的核心思想是基于树结构对数据进行划分,这种思想是人类处理问题时的本能方法。例如在婚恋市场中,女方通常会先看男方是否有房产,如果有房产再看是否有车产,如果有车产再看是否有稳定工作……最后得出是否要深入了解的判断。
决策树的主要优点:
具有很好的解释性,模型可以生成可以理解的规则。
可以发现特征的重要程度。
模型的计算复杂度较低。
决策树的主要缺点:
模型容易过拟合,需要采用减枝技术处理。
不能很好利用连续型特征。
预测能力有限,无法达到其他强监督模型效果。
方差较高,数据分布的轻微改变很容易造成树结构完全不同。
原理相关
1、熵和信息熵
熵,热力学中表征物质状态的参量之一,用符号S表示,其物理意义是体系混乱程度的度量. 可以看出,熵表示的是体系的不确定性大小. 熵越大, 物理的不确定性越大. 1948年,香农提出了“信息熵”的概念,才解决了对信息的量化度量问题. 同理, 信息熵越小,数据的稳定性越好,我们更加相信此时数据得到的结论. 换言之, 我们现在目的肯定熵越小,机器学习得到的结果越准确.
信息熵表示随机变量不确定性的度量,设随机标量X是一个离散随机变量,其概率分布为: P ( X = x i ) = p i , i = 1 , 2 , . . . , n P(X=x_i)=p_i, i=1,2,...,n P(X=xi)=pi,i=1,2,...,n 则随机变量X的熵定义为: H ( X ) = − ∑ i = 1 n p i l o g p i H(X)=-\sum_{i=1}^{n}p_ilog{p_i} H(X)=−i=1∑npilogpi 熵越大,随机变量的不确定性就越大,当 p i = 1 n p_i=\frac{1}{n} pi=n1时, 随机变量的熵最大等于logn,故 0 ≤ H ( P ) ≤ l o g n 0 \leq H(P) \leq logn 0≤H(P)≤logn.
2、条件熵
条件熵就是在给定X的条件的情况下,随机标量Y的条件,记作
H
(
Y
∣
X
)
H(Y|X)
H(Y∣X),可以结合贝叶斯公式进行理解,定义如下
H
(
Y
∣
X
)
=
∑
i
=
1
n
p
i
H
(
Y
∣
X
=
x
i
)
H(Y|X)=\sum_{i=1}^{n}p_iH(Y|X=x_i)
H(Y∣X)=i=1∑npiH(Y∣X=xi) 这里
p
i
=
P
(
X
=
x
i
)
,
i
=
1
,
2
,
.
.
.
,
n
p_i=P(X=x_i),i=1,2,...,n
pi=P(X=xi),i=1,2,...,n. 一般在基于数据的估计中,我们使用的基于极大似然估计出来的经验熵和经验条件熵.
3、联合熵
联合熵是相对两个及其以上的变量而言的, 两个变量X和Y的联合信息熵为:
H
(
X
,
Y
)
=
−
∑
x
∑
y
P
(
x
,
y
)
l
o
g
2
[
P
(
x
,
y
)
]
H(X,Y)=-\sum_x \sum_y P(x,y)log_2[P(x,y)]
H(X,Y)=−x∑y∑P(x,y)log2[P(x,y)]
其中: x和y是X和Y的特定值, 相应地, 是这些值一起出现的联合概率, 若为0, 则定义为0.
对于两个以上的变量 X 1 , . . . , X n X_1,...,X_n X1,...,Xn,一般形式位: H ( X 1 , . . . , X n ) = − ∑ x 1 ⋅ ⋅ ⋅ ∑ x n P ( x 1 , . . . , x n ) l o g 2 [ P ( x 1 , . . . , x n ) ] H(X_1,...,X_n)=-\sum_{x_1}\cdot \cdot \cdot\sum_{x_n}P(x1,...,x_n)log_2[P(x_1,...,x_n)] H(X1,...,Xn)=−x1∑⋅⋅⋅xn∑P(x1,...,xn)log2[P(x1,...,xn)]
性质:
大于每个独立的熵
H
(
X
,
Y
)
≥
m
a
x
(
H
(
X
)
,
H
(
Y
)
)
H(X,Y) \geq max(H(X),H(Y))
H(X,Y)≥max(H(X),H(Y))
H
(
X
1
,
.
.
.
,
X
n
)
≥
m
a
x
(
H
(
X
1
)
,
.
.
.
,
H
(
X
n
)
)
H(X_1,...,X_n) \geq max(H(X_1),...,H(X_n))
H(X1,...,Xn)≥max(H(X1),...,H(Xn))
小于独立熵的和
H
(
X
1
,
.
.
.
,
X
n
)
≤
s
u
m
(
H
(
X
1
)
,
.
.
.
,
H
(
X
n
)
)
H(X_1,...,X_n) \leq sum(H(X_1),...,H(X_n))
H(X1,...,Xn)≤sum(H(X1),...,H(Xn))
和条件熵的关系
H
(
Y
∣
X
)
=
H
(
X
,
Y
)
−
H
(
X
)
H(Y|X)=H(X,Y)-H(X)
H(Y∣X)=H(X,Y)−H(X)
和互信息的关系
I
(
Y
;
X
)
=
H
(
X
)
+
H
(
Y
)
−
H
(
X
,
Y
)
=
H
(
Y
)
−
(
H
(
X
,
Y
)
−
H
(
X
)
)
I(Y;X)=H(X)+H(Y)-H(X,Y)=H(Y)-(H(X,Y)-H(X))
I(Y;X)=H(X)+H(Y)−H(X,Y)=H(Y)−(H(X,Y)−H(X))
4、信息增益
信息增益又叫互信息,它表示的是在的得知特征X的信息后,使得类Y的信息的不确定性(熵)减少的程度.
g
(
Y
,
X
)
=
H
(
Y
)
−
H
(
Y
∣
X
)
g(Y,X)=H(Y)-H(Y|X)
g(Y,X)=H(Y)−H(Y∣X)
5、基尼指数
基尼指数又称基尼系数或者基尼不纯度,基尼系数是指国际上通用的、用以衡量一个国家或地区居民收入差距的常用指标. 在信息学中,例如分类问题, 假设有K个类,样本点属于第k类的概率是
p
k
p_k
pk,则该概率分布的基尼指数定义为:
G
i
n
i
(
p
)
=
∑
k
K
p
k
(
1
−
p
k
)
=
1
−
∑
k
K
p
k
2
Gini(p)=\sum_k^Kp_k(1-p_k)=1-\sum_k^Kp_k^2
Gini(p)=k∑Kpk(1−pk)=1−k∑Kpk2
代码实现
#1、库函数导入
## 基础函数库
import numpy as np
## 导入画图库
import matplotlib.pyplot as plt
import seaborn as sns
## 导入决策树模型函数
from sklearn.tree import DecisionTreeClassifier
from sklearn import tree
#2 训练模型
##Demo演示LogisticRegression分类
## 构造数据集
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)
#3、数据与模型可视化
## 可视化构造的数据样本点
plt.figure()
plt.scatter(x_fearures[:,0],x_fearures[:,1], c=y_label, s=50, cmap='viridis')
plt.title('Dataset')
plt.show()
## 本段代码实际效果为本地生成PDF可视化文档,在体验过程中可以不运行,可能无法正常展示结果;
## 代码生成的可视化结果会截图展示实际效果
!pip install graphviz
import graphviz
dot_data = tree.export_graphviz(tree_clf, out_file=None)
graph = graphviz.Source(dot_data)
graph.render("pengunis")
## 'pengunis.pdf'
以上仅为初学者学习备注,如果有不对的地方,欢迎指出,大家一起讨论,共同成长,谢谢~