<p>信息增益和信息增益率用于决策树特征选择,基于信息熵计算。1. 信息熵衡量数据混乱程度,公式为H(S) = -Σ(p_i log2(p_i)),Python用entropy函数实现。2. 信息增益IG(S, A) = H(S) - Σ(|S_v|/|S| H(S_v)),表示划分后熵的减少,通过information_gain函数计算特征对标签的分类能力。3. 信息增益率GR(S, A) = IG(S, A) / IV(A),其中IV(A)为特征A的固有值,用于抑制多取值特征偏差,由intrinsic_value函数计算。4. 示例中使用年龄特征计算得信息增益0.083,增益率0.096。5. 函数适用于离散特征,连续特征需预处理分箱。完整实现包含熵、增益、增益率三部分,支持决策树构建中的最优划分选择。</p>

在Python中实现信息增益(Information Gain)和信息增益率(Information Gain Ratio),主要基于信息熵的概念。这两个指标常用于决策树算法(如ID3使用信息增益,C4.5使用信息增益率)中选择最优划分属性。
信息熵衡量数据集的混乱程度。假设一个数据集有 C 个类别,每个类别的概率为 p_i,则信息熵定义为:
H(S) = -Σ(p_i * log2(p_i))
注意:当 p_i 为0时,对应项视为0。Python实现如下:
立即学习“Python免费学习笔记(深入)”;
```python import numpy as npdef entropy(y): _, counts = np.unique(y, return_counts=True) probs = counts / len(y) return -np.sum(probs * np.log2(probs + 1e-9)) # 加极小值避免log(0)
<H3>信息增益的实现</H3>
<p>信息增益表示划分前后熵的减少量。对某个特征 <strong>A</strong>,其信息增益为:</p>
<p><strong>IG(S, A) = H(S) - Σ(|S_v|/|S| * H(S_v))</strong></p>
<p>其中 S_v 是特征 A 取值为 v 的子集。</p>
<p>代码实现:</p>
```python
def information_gain(X, y, feature_idx):
original_entropy = entropy(y)
values, counts = np.unique(X[:, feature_idx], return_counts=True)
weighted_entropy = 0
for value, count in zip(values, counts):
subset_indices = X[:, feature_idx] == value
subset_entropy = entropy(y[subset_indices])
weighted_entropy += (count / len(y)) * subset_entropy
return original_entropy - weighted_entropy信息增益偏向取值多的特征,因此引入信息增益率进行校正:
GR(S, A) = IG(S, A) / IV(A)
其中 IV(A) 是特征 A 的固有值(Intrinsic Value):
IV(A) = -Σ(|S_v|/|S| * log2(|S_v|/|S|))
完整实现:
```python def intrinsic_value(X, feature_idx): values, counts = np.unique(X[:, feature_idx], return_counts=True) probs = counts / len(X) return -np.sum(probs * np.log2(probs + 1e-9))def information_gain_ratio(X, y, feature_idx): ig = information_gain(X, y, feature_idx) iv = intrinsic_value(X, feature_idx) return ig / iv if iv > 0 else 0
<H3>使用示例</H3>
<p>假设有一个简单的分类数据集:</p>
```python
# 示例数据:X为特征,y为标签
X = np.array([
['青年', '否', '否', '一般'],
['青年', '否', '否', '好'],
['青年', '是', '否', '好'],
['青年', '是', '是', '一般'],
['中年', '否', '否', '一般'],
['中年', '否', '否', '好'],
['中年', '是', '是', '好'],
['中年', '否', '是', '非常好'],
['老年', '否', '是', '非常好'],
['老年', '否', '是', '好'],
['老年', '是', '否', '好'],
['老年', '是', '否', '非常好'],
])
y = np.array(['否', '否', '是', '是', '否', '否', '是', '是', '是', '是', '是', '是'])
# 计算第0个特征(年龄)的信息增益和增益率
ig = information_gain(X, y, 0)
igr = information_gain_ratio(X, y, 0)
print(f"信息增益: {ig:.3f}")
print(f"信息增益率: {igr:.3f}")基本上就这些。通过上述函数,你可以为任意特征计算信息增益和增益率,用于特征选择或构建决策树模型。注意处理离散特征,连续特征需先分箱或扩展逻辑。
以上就是python中如何实现信息增益和信息增益率的详细内容,更多请关注php中文网其它相关文章!
python怎么学习?python怎么入门?python在哪学?python怎么学才快?不用担心,这里为大家提供了python速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号