type
status
date
slug
summary
tags
category
icon
password
URL-TEXT
计算数据的熵(Entropy)并不特别复杂,尤其是当数据被视为离散随机变量时。熵是信息论中的一个基本概念,用来量化数据的不确定性或随机性。在统计和数据分析中,熵可以帮助我们了解数据集中信息的多样性。
📝 数据熵的计算
熵的定义
对于一个离散随机变量,其熵 定义为:
其中,是该变量取第个值的概率,而 通常以 2 为底,得到的熵的单位是比特(bits)。
熵的计算步骤
- 数据分布:首先,需要确定每个唯一值的出现概率。这可以通过计算每个值在数据集中出现的次数,然后除以总数来实现。
- 应用公式:使用上述公式计算熵值。
Python 示例
假设您有一组离散数据,并想计算其熵,可以使用 Python 的
numpy
和 scipy
库来帮助计算:解释
上面的代码中,我们首先使用
np.unique
与 return_counts=True
选项来获取数据中每个唯一值的出现次数,然后计算每个值的概率分布。最后,使用 scipy.stats.entropy
函数计算熵,指定对数的底为 2,以得到熵的单位为比特。C++中计算熵
在 C++ 中计算数据的熵需要手动实现概率计算和熵的公式,因为标准的 C++ 库不提供这种统计函数。下面是一个示例,展示了如何在 C++ 中计算一组离散数据的熵:
首先,引入头文件:
实现熵的计算:
主函数中的使用示例:
解释:
- 计数:首先,我们使用一个
std::map
来计算每个唯一值在数据中出现的次数。这个映射将每个值映射到它的出现次数。
- 计算熵:遍历这个映射,计算每个值的概率(即该值的次数除以总数据量),然后应用熵的定义计算总熵。这里使用
std::log2
来计算以 2 为底的对数,因为熵常常以比特为单位。
注意:
- 这个实现假设所有的输入数据都可以被存入一个
std::vector
,并且std::map
可以用于计数。对于非常大的数据集或需要高性能的应用,可能需要考虑更优化的数据结构和算法。
- 对于非常大的数值范围或非常稀疏的数据,使用
std::unordered_map
可能会更有效率,尽管在本例中使用std::map
通常已经足够。
🤗 总结归纳
数据熵是信息论中的一个基本概念,用于量化数据的不确定性或随机性。计算离散随机变量的熵需要确定每个唯一值的出现概率,然后应用熵的公式。Python的numpy和scipy库,以及C++都可以用于计算数据熵。对于大数据集或需要高性能的应用,可能需要考虑更优化的数据结构和算法。
<ins/>
- 作者:木白
- 链接:https://www.xiebaiyuan.top/technology/entropy_calc
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。