数据熵的概念与计算
00 分钟
2024-5-13
2024-6-21
type
status
date
slug
summary
tags
category
icon
password
URL-TEXT
😀
计算数据的熵(Entropy)并不特别复杂,尤其是当数据被视为离散随机变量时。熵是信息论中的一个基本概念,用来量化数据的不确定性或随机性。在统计和数据分析中,熵可以帮助我们了解数据集中信息的多样性。

📝 数据熵的计算

熵的定义

对于一个离散随机变量,其熵 定义为:
其中,是该变量取第个值的概率,而 通常以 2 为底,得到的熵的单位是比特(bits)。

熵的计算步骤

  1. 数据分布:首先,需要确定每个唯一值的出现概率。这可以通过计算每个值在数据集中出现的次数,然后除以总数来实现。
  1. 应用公式:使用上述公式计算熵值。
 

Python 示例

假设您有一组离散数据,并想计算其熵,可以使用 Python 的 numpyscipy 库来帮助计算:

解释

上面的代码中,我们首先使用 np.uniquereturn_counts=True 选项来获取数据中每个唯一值的出现次数,然后计算每个值的概率分布。最后,使用 scipy.stats.entropy 函数计算熵,指定对数的底为 2,以得到熵的单位为比特。
 

C++中计算熵

在 C++ 中计算数据的熵需要手动实现概率计算和熵的公式,因为标准的 C++ 库不提供这种统计函数。下面是一个示例,展示了如何在 C++ 中计算一组离散数据的熵:

首先,引入头文件:

实现熵的计算:

主函数中的使用示例:

解释:

  1. 计数:首先,我们使用一个 std::map 来计算每个唯一值在数据中出现的次数。这个映射将每个值映射到它的出现次数。
  1. 计算熵:遍历这个映射,计算每个值的概率(即该值的次数除以总数据量),然后应用熵的定义计算总熵。这里使用 std::log2 来计算以 2 为底的对数,因为熵常常以比特为单位。

注意:

  • 这个实现假设所有的输入数据都可以被存入一个 std::vector,并且 std::map 可以用于计数。对于非常大的数据集或需要高性能的应用,可能需要考虑更优化的数据结构和算法。
  • 对于非常大的数值范围或非常稀疏的数据,使用 std::unordered_map 可能会更有效率,尽管在本例中使用 std::map 通常已经足够。

🤗 总结归纳

数据熵是信息论中的一个基本概念,用于量化数据的不确定性或随机性。计算离散随机变量的熵需要确定每个唯一值的出现概率,然后应用熵的公式。Python的numpy和scipy库,以及C++都可以用于计算数据熵。对于大数据集或需要高性能的应用,可能需要考虑更优化的数据结构和算法。
<ins/>
 
 
 
上一篇
Kotlin中的sealed关键字
下一篇
如何让Python和C++生成相同的随机数