4. 信息论和决策树算法(信息熵、基尼系数、决策树)

1. 信息论

  • 香农:信息论的创立者

1.1 信息量的大小

  • 小概率时间发生了,信息量很大;
  • 大概率事件发生了,信息量很小。

1.2 信息熵 entropy

  • 熵是一个系统的混乱程度:
  • 熵越大,系统越混乱;
  • 熵越小,系统越有序。
  • 信息熵的计算公式
    H ( X ) = − ∑ i = 1 n P ( x i ) log ⁡ 2 ( P ( x i ) ) H(X) = -\sum_{i=1}^{n} P(x_i) \log_2(P(x_i)) H(X)=i=1nP(xi)log2(P(xi))

1.3 基尼系数

  • [p1, p2, p3]
    • -(p1 * log2(p1) + p2 * log2(p2) + p3 * log2(p3))
    • 化简后:p1 * (1 - p1) + p2 * (1 - p2) + p3 * (1 - p3)
  • 基尼系数没有实际意义,它只是工程数学上的化简。
  • 基尼系数的内涵和信息熵是一样的,但是基尼系数的计算代价大大降低了。

1.4 能力层级

  • 看得懂公式
  • 能够用科学计算的方法写出这个公式的代码
  • 跟编程语言没有什么大的关系

2. 决策树

2.1 评价几种机器学习算法

  • KNN:KNN算法是一种很重要的编程范式,作为一种思想;
  • 贝叶斯:贝叶斯是判别式常用的模型,现在用的也少了;
  • 决策树:决策树是机器视觉里面最重要的算法,它的解释性比较好,而且有筛选特征的能力。而且决策树算法是机器学习算法中唯一一个可以控制模型大小的算法。

3. 代码

3.1 计算系统的信息熵

  • 假设一个系统的输出有两种情况,下面数字代表输出该结果的概率,以下哪一个系统的熵比较大?
    • A: [0.9,0.1]
    • B: [0.6,0.4]
    • C: [0.5,0.5]
import numpy as np
PA = np.array([0.9,0.1])
PB = np.array([0.6,0.4])
PC = np.array([0.5,0.5])
entropyA = -(np.log(PA)*PA).sum()
entropyB = -(np.log(PB)*PB).sum()
entropyC = -(np.log(PC)*PC).sum()
print(entropyA,entropyB,entropyC)

0.3250829733914482 0.6730116670092565 0.6931471805599453

3.2 决策树预测鸢尾花

# 加载数据
from sklearn.datasets import load_iris
X,y = load_iris(return_X_y=True)
# 切分数据
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2)
# 引入决策树
from sklearn.tree import DecisionTreeClassifier
from sklearn.tree import plot_tree
# 构建模型
dtc = DecisionTreeClassifier(criterion='entropy')
# 训练模型
dtc.fit(X=X_train,y=y_train)
# 预测模型
y_pred = dtc.predict(X_test)
# 评价模型
acc = (y_pred == y_test).mean()

print(acc)  

# 打印这棵树
plot_tree(dtc)

[Text(0.5, 0.9, ‘x[2] <= 2.45\nentropy = 1.584\nsamples = 120\nvalue = [42, 40, 38]’),
Text(0.375, 0.7, ‘entropy = 0.0\nsamples = 42\nvalue = [42, 0, 0]’),
Text(0.625, 0.7, ‘x[3] <= 1.75\nentropy = 1.0\nsamples = 78\nvalue = [0, 40, 38]’),
Text(0.5, 0.5, ‘x[2] <= 4.95\nentropy = 0.365\nsamples = 43\nvalue = [0, 40, 3]’),
Text(0.25, 0.3, ‘x[3] <= 1.65\nentropy = 0.169\nsamples = 40\nvalue = [0, 39, 1]’),
Text(0.125, 0.1, ‘entropy = 0.0\nsamples = 39\nvalue = [0, 39, 0]’),
Text(0.375, 0.1, ‘entropy = 0.0\nsamples = 1\nvalue = [0, 0, 1]’),
Text(0.75, 0.3, ‘x[0] <= 6.4\nentropy = 0.918\nsamples = 3\nvalue = [0, 1, 2]’),
Text(0.625, 0.1, ‘entropy = 0.0\nsamples = 2\nvalue = [0, 0, 2]’),
Text(0.875, 0.1, ‘entropy = 0.0\nsamples = 1\nvalue = [0, 1, 0]’),
Text(0.75, 0.5, ‘entropy = 0.0\nsamples = 35\nvalue = [0, 0, 35]’)]
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MechMaster

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值