给定people数据集,设计程序计算数据集的熵和信息增益
时间: 2024-05-02 17:18:02 浏览: 103
熵的计算程序
首先,需要了解数据集的熵和信息增益的概念。
熵是度量一个随机变量的不确定性的指标,可以用公式表示为:
$H(X)=-\sum_{i=1}^{n} p_i\log_2 p_i$
其中,$X$是一个随机变量,$p_i$是$X$取值为$i$的概率。
信息增益是指在得知一个特征的取值后,对分类结果带来的不确定性减少程度。可以用公式表示为:
$Gain(S,A)=H(S)-\sum_{v\in values(A)}\frac{|S_v|}{|S|}H(S_v)$
其中,$S$是数据集,$A$是一个特征,$values(A)$是$A$所有可能取值的集合,$S_v$是$S$中$A$取值为$v$的子集,$H(S)$和$H(S_v)$分别是数据集$S$和子集$S_v$的熵。
下面是计算数据集的熵和信息增益的程序:
```python
import math
# 计算数据集的熵
def entropy(data):
n = len(data)
labels = {}
for d in data:
label = d[-1]
if label not in labels:
labels[label] = 0
labels[label] += 1
entropy = 0
for label in labels:
p = labels[label] / n
entropy -= p * math.log2(p)
return entropy
# 计算信息增益
def info_gain(data, feature):
n = len(data)
values = set([d[feature] for d in data])
gain = entropy(data)
for v in values:
subset = [d for d in data if d[feature] == v]
gain -= len(subset) / n * entropy(subset)
return gain
```
其中,`data`是一个二维列表,每行表示一个数据样本,最后一列是标签;`feature`是一个整数,表示要计算信息增益的特征。程序的输出是数据集的熵和每个特征的信息增益。
下面是一个使用示例:
```python
data = [
[1, 'S', 'N', 'N', 'N'],
[2, 'S', 'N', 'Y', 'N'],
[3, 'M', 'N', 'Y', 'Y'],
[4, 'L', 'Y', 'N', 'Y'],
[5, 'L', 'Y', 'Y', 'N'],
]
print('Entropy:', entropy(data))
print('Info gain of feature 1:', info_gain(data, 1))
print('Info gain of feature 2:', info_gain(data, 2))
print('Info gain of feature 3:', info_gain(data, 3))
print('Info gain of feature 4:', info_gain(data, 4))
```
输出结果为:
```
Entropy: 0.9709505944546686
Info gain of feature 1: 0.01997309402197489
Info gain of feature 2: 0.5709505944546686
Info gain of feature 3: 0.01997309402197489
Info gain of feature 4: 0.3219280948873623
```
可以看到,数据集的熵是0.971,特征2的信息增益最大,为0.571,因此在决策树算法中应该选择特征2作为根节点。
阅读全文