如何计算聚类的量化误差?
How to compute Quantization Error for clustering?
我想使用量化误差来衡量聚类的质量,但找不到关于如何计算该指标的任何明确信息。
我找到的少数文档/文章是:
- "Estimating the number of clusters in a numerical data set via quantization error modeling"(不幸的是没有免费访问这篇论文)
- This question 于 2011 年在 Cross-Validated 上发布了关于不同类型距离度量的帖子(问题非常具体,并没有给出太多关于计算的信息)
- This gist repo 其中
quantization_error
函数(在代码的最后)在 Python 中实现
关于第三个 link(这是迄今为止我找到的最好的信息)我不知道如何解释计算(见下面的片段):
(#注解是我的。问号表示我不清楚的步骤)
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 均值聚类(或任何聚类,就此而言)中的一个常见问题是 "what is the optimum number of clusters for this data set?" 该论文使用 另一个 量化级别来寻找余额。
给定一组 N
个数据点,我们想要找到最优数量 'm' 个聚类,这将满足 "optimum clustering" 的一些合理化。一旦我们找到 m
,我们就可以继续使用我们通常的聚类算法来找到最佳聚类。
我们不能简单地以 all 成本最小化错误:使用 N
集群给我们错误 0.
这些解释是否足以满足您的需求?
我想使用量化误差来衡量聚类的质量,但找不到关于如何计算该指标的任何明确信息。
我找到的少数文档/文章是:
- "Estimating the number of clusters in a numerical data set via quantization error modeling"(不幸的是没有免费访问这篇论文)
- This question 于 2011 年在 Cross-Validated 上发布了关于不同类型距离度量的帖子(问题非常具体,并没有给出太多关于计算的信息)
- This gist repo 其中
quantization_error
函数(在代码的最后)在 Python 中实现
关于第三个 link(这是迄今为止我找到的最好的信息)我不知道如何解释计算(见下面的片段):
(#注解是我的。问号表示我不清楚的步骤)
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 均值聚类(或任何聚类,就此而言)中的一个常见问题是 "what is the optimum number of clusters for this data set?" 该论文使用 另一个 量化级别来寻找余额。
给定一组 N
个数据点,我们想要找到最优数量 'm' 个聚类,这将满足 "optimum clustering" 的一些合理化。一旦我们找到 m
,我们就可以继续使用我们通常的聚类算法来找到最佳聚类。
我们不能简单地以 all 成本最小化错误:使用 N
集群给我们错误 0.
这些解释是否足以满足您的需求?