分类后所有簇的总熵能否大于1?附k-means计算疑问
聚类总熵大于1的原因解答
核心误区纠正
熵的取值范围不是固定0到1,它的上限由数据的类别数量决定:对于有c个类别的数据集,单个簇的最大熵为log₂(c),总熵的范围则是0到log₂(c)。你的数据有3个类别(neutral、positive、negative),所以最大熵为log₂(3)≈1.585,你的总熵1.549处于这个合理区间内。
验证你的计算正确性
单个簇熵计算验证(以Cluster 1为例)
根据你给出的公式H(w) = -ΣP(w_c)log₂P(w_c),其中P(w_c)=|w_c|/n_w:
P(neutral)=64/208≈0.3077,log₂(0.3077)≈-1.700P(positive)=85/208≈0.4087,log₂(0.4087)≈-1.300P(negative)=59/208≈0.2837,log₂(0.2837)≈-1.820
代入公式计算:
H(w) = -(0.3077*(-1.700) + 0.4087*(-1.300) + 0.2837*(-1.820)) ≈ -( -0.523 + -0.531 + -0.516 ) ≈ 1.570
和你给出的1.566429基本一致,计算无误。其他簇的熵计算逻辑相同,结果也符合预期。
总熵计算验证
总熵公式H = Σ(N_w/N)*H(w),代入数据:
H = (208/500)*1.566429 + (179/500)*1.5182706 + (113/500)*1.56750289 ≈ 0.416*1.5664 + 0.358*1.5183 + 0.226*1.5675 ≈ 0.6516 + 0.5436 + 0.3543 ≈ 1.5495
和你的计算结果1.549431124一致,计算完全正确。
结论
你的公式理解和计算过程都没有问题,只是对熵的取值范围存在误解。当数据集类别数大于2时,熵的最大值会超过1,3类场景下最大熵约为1.585,你的总熵接近这个最大值,说明k-means聚类后,各个簇内的类别混杂程度较高,聚类效果可能有待优化。
内容的提问来源于stack exchange,提问作者SSaha13
相关产品推荐
相关产品推荐

