python中计算信息熵的函数
时间: 2023-09-30 19:04:23 浏览: 46
在Python中,可以使用`math`和`collections`模块来计算信息熵。
方法一:使用`math`模块
```python
import math
def entropy(labels, base=None):
n_labels = len(labels)
if n_labels <= 1:
return 0
value, counts = np.unique(labels, return_counts=True)
probs = counts / n_labels
n_classes = np.count_nonzero(probs)
if n_classes <= 1:
return 0
ent = 0.
# Compute entropy
base = e if base is None else base
for i in probs:
ent -= i * math.log(i, base)
return ent
```
方法二:使用`collections`模块
```python
import collections
def entropy(labels, base=None):
value_counts = collections.Counter(labels)
total = sum(value_counts.values())
base = e if base is None else base
ent = -sum(v / total * math.log(v / total, base) for v in value_counts.values())
return ent
```
以上两个方法的输入参数`labels`是一个列表,包含了数据集中所有的标签。`base`是信息熵的底数,默认为`e`。