sol*_*lub 4 python cluster-analysis quantization
我想使用量化误差来测量聚类的质量,但找不到有关如何计算此指标的任何明确信息。
我发现的少数文件/文章是:
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 ?
Run Code Online (Sandbox Code Playgroud)
问题:量化误差的计算正确吗?如果不是,计算步骤是什么?
任何帮助将非常感激。
冒着重述您已经知道的事情的风险,我将介绍基础知识。
审查
量化是指我们通过将许多数据点中的每一个移动到方便的(通过某种度量最接近的)量子点来简化数据集的任何时候。这些量子点是一个小得多的集合。例如,给定一组浮点数,将每个浮点数四舍五入到最接近的整数是一种量化。
聚类是一种众所周知且常用的量化类型,我们使用数据点本身来确定量子点。
量化误差是通过将每个点从其原始位置移动到其关联的量子点而引入的误差的度量。在聚类中,我们经常将此误差测量为每个点的均方根误差(移动到其聚类的质心)。
您的解决方案
...从一个非常常见的意义上来说是正确的:您已经计算了数据集的平方和误差,并取了其平均值。这是一个完全有效的指标。
我更常见的方法是逐个聚类地取最终均值的平方根,并使用这些根的总和作为整个数据集的误差函数。
被引论文
k 均值聚类(或任何聚类)中的一个常见问题是“该数据集的最佳聚类数量是多少?” 该论文使用了另一种量化级别来寻找平衡。
给定一组N数据点,我们希望找到最佳的聚类数“m”,这将满足“最佳聚类”的一些合理化。一旦找到m,我们就可以继续使用通常的聚类算法来找到最佳聚类。
我们不能不惜一切代价简单地最小化错误:使用N集群给我们带来的错误为 0。
这足以满足您的需求吗?