信息熵是衡量信息量的一个指标,其计算公式如下:
\[ Entropy = -\sum_{i=1}^{n} P(X_{i}) \log_{2} P(X_{i}) \]
其中,\( P(X_{i}) \) 是随机变量 \( X_{i} \) 出现的概率,单位是 bit。
下面提供几种不同编程语言中计算信息熵的方法:
Python
在 Python 中,可以使用 `math` 模块中的 `log` 函数来计算信息熵。以下是一个示例代码:
```python
import math
def calcShannonEnt(dataset):
numEntries = len(dataset)
labelCounts = {}
for featVec in dataset:
currentLabel = featVec[-1]
if currentLabel not in labelCounts.keys():
labelCounts[currentLabel] = 0
labelCounts[currentLabel] += 1
shannonEnt = 0.0
for key in labelCounts:
prob = float(labelCounts[key]) / numEntries
shannonEnt -= prob * math.log(prob, 2)
return shannonEnt
示例数据集
myDat = [[1, 1, 'yes'], [1, 1, 'yes'], [1, 0, 'no'], [0, 1, 'no'], [0, 1, 'no']]
labels = ['no surfacing', 'flippers']
print(calcShannonEnt(myDat))
```
C++
在 C++ 中,可以使用标准模板库(STL)中的 `map` 来统计每个类别的频数,然后计算信息熵。以下是一个示例代码:
```cpp
include include