如何计算聚类的量化误差?



我想使用量化误差来衡量聚类的质量,但找不到有关如何计算此指标的任何明确信息。

我找到的一些文档/文章是:

  • ">通过量化误差建模估计数值数据集中的簇数"(不幸的是,本文没有免费访问)
  • 这个问题
  • 早在 2011 年就发布了关于不同类型的距离测量的交叉验证(这个问题非常具体,没有给出太多关于计算的信息)
  • 这个 gist 存储库,其中quantization_error函数(在代码的最后)在 Python 中实现

关于第三个链接(这是我迄今为止找到的最好的信息),我不知道如何解释计算(见下面的片段):

(#注释是我的,问号表示我不清楚的步骤)

def quantization_error(self):
"""
This method calculates the quantization error of the given clustering
:return: the quantization error
"""
total_distance = 0.0
s = Similarity(self.e) #Class containing different types of distance measures
#For each point, compute squared fractional distance between point and centroid ?
for i in range(len(self.solution.patterns)): 
total_distance += math.pow(s.fractional_distance(self.solution.patterns[i], self.solution.centroids[self.solution.solution[i]]), 2.0)
return total_distance / len(self.solution.patterns) # Divide total_distance by the total number of points ?

问:量化误差的计算正确吗?如果没有,计算它的步骤是什么?

任何帮助将不胜感激。

冒着重述你已经知道的事情的风险,我将介绍基础知识。

回顾

量化是指我们将许多数据点中的每一个移动到方便(根据某些指标最接近)量子点来简化数据集的任何时候。 这些量子点是一个小得多的集合。 例如,给定一组浮点数,将每个浮点数舍入到最接近的整数是一种量化类型。

聚类是一种众所周知的、经常使用的量化类型,我们使用数据点本身来确定量子点。

量化误差是通过将每个点从其原始位置移动到其关联的量子点而引入的误差的度量。 在聚类中,我们通常将此误差测量为每个点的均方根误差(移动到其聚类的质心)。

您的解决方案

。在非常常识的意义上是正确的:您已经计算了数据集的平方和误差,并取了其平均值。 这是一个完全有效的指标。

我经常看到的方法是逐个聚类取最终平均值的平方根,并使用这些根的总和作为整个数据集的误差函数。

引用的论文

k-means聚类(或任何聚类,就此而言)中的一个常见问题是"此数据集的最佳聚类数是多少? 本文使用另一个层次的量化来寻找平衡。

给定一组N数据点,我们希望找到聚类的最佳数量"m",这将满足"最佳聚类"的一些合理化。 一旦我们找到m,我们就可以继续使用我们通常的聚类算法来找到最佳聚类。

我们不能不惜一切代价简单地最小化误差:使用N集群会给我们带来 0 的误差。

这足以满足您的需求吗?

最新更新