如何计算聚类熵? 一个工作示例或软件代码

我想计算这个示例方案的熵

http://nlp.stanford.edu/IR-book/html/htmledition/evaluation-of-clustering-1.html

在此处输入图像描述

任何人都可以用真实的价值观逐步解释吗? 我知道有很多公式,但我真的很难理解公式:)

例如,在给定的图像中,清楚且很好地解释了如何计算纯度

问题很清楚。 我需要一个例子来计算这个聚类方案的熵。 它可以是一步一步的解释。 它可以是C#代码或Phyton代码来计算这样的方案

这里的熵公式

我将用C#编写代码

非常感谢您的帮助

在此处输入图像描述

我需要这里给出的答案: https : //stats.stackexchange.com/questions/95731/how-to-calculate-purity

我将承认NLP书的这一部分有点令人困惑,因为他们没有完全计算集群熵的外部度量,而是专注于计算单个集群熵计算。 相反,我将尝试使用更直观的变量集,并包括计算总熵的外部度量的完整方法。

聚类的总熵是:

式

哪里:

式 是一组集群

H(w)是单簇熵

N_w是簇w中的点数

N是总点数。

集群的熵w

式

其中: c是所有分类的集合C中的分类

P(w_c)是数据点在簇w中被分类为c的概率。

为了使这个可用,我们可以用这个概率的MLE( 最大似然估计 )代替概率来得到:

式

哪里:

| w_c | 是簇w中归类为c的点数

n_w是簇w中的点数

因此,在给出的示例中,您有3个聚类(w_1,w_2,w_3),我们将分别为3个分类(x,circle,菱形)中的每一个分别计算每个聚类的熵。

H(w_1)=(5/6)log_2(5/6)+(1/6)log_2(1/6)+(0/6)log_2(0/6)= -.650

H(w_2)=(1/6)log_2(1/6)+(4/6)log_2(4/6)+(1/6)log_2(1/6)= -1.252

H(w_3)=(2/5)log_2(2/5)+(0/5)log_2(0/5)+(3/5)log_2(3/5)= -.971

那么为了找到一组聚类的总熵,你可以将熵的总和乘以每个聚类的相对权重。

H(Omega)=( – 6.5 * 6/17)+( – 1.252 * 6/17)+( – 971 * 5/17)

H(Omega)= – .956

我希望这有帮助,请随时validation并提供反馈。

计算很简单。

概率是NumberOfMatches/NumberOfCandidates 。 你应用base2对数并取总和。 通常,您将按照相对大小对群集进行加权。

唯一需要注意的是p = 0时。 那么对数是不确定的。 但是如果p = 0 ,我们可以安全地使用p log p = 0 ,因为p在对数之外。

因为log 1 = 0所以最小熵为0.完美结果必须得到熵0,否则就会出错。