machine-learning - 选择适当的相似性度量并评估 k 均值聚类模型的有效性

标签 machine-learning k-means cluster-analysis unsupervised-learning

我已经实现了 k 均值聚类来确定 300 个对象中的聚类。我的每一个对象 有大约30个维度。距离是使用欧几里得度量计算的。

我需要知道

  1. 如何确定我的算法是否正常工作?我没有一张图表可以 给出一些关于我的算法的正确性的想法。
  2. 欧氏距离是计算距离的正确方法吗?如果我有 100 个维度怎么办 而不是 30?

最佳答案

OP 中的两个问题是不同的主题(即答案中没有重叠),因此我将尝试一次回答一个问题,紧接着列表中的第 1 项。

How would I determine if my [clustering] algorithms works correctly?

k-means 与其他无监督 ML 技术一样,缺乏良好的诊断测试选择来回答诸如“k-means 返回的聚类分配对于 k=3 或 k=5 更有意义吗?”之类的问题

尽管如此,有一种被广泛接受的测试可以产生直观的结果并且易于应用。这个诊断指标就是这个比率:

质心间分离/簇内方差

随着该比率值的增加,聚类结果的质量也会提高。

这很直观。第一个指标是每个聚类与其他聚类的距离有多远(根据聚类中心测量)?

但是质心间分离本身并不能说明全部情况,因为两种聚类算法可以返回具有相同质心间分离的结果,尽管其中一种显然更好,因为聚类“更紧密”(即半径更小) ;换句话说,簇边缘有更多的分离。第二个指标——集群内方差——解释了这一点。这只是每个簇计算的平均方差。

总之,质心间分离与簇内方差之比是一种快速、一致且可靠的技术,用于比较不同聚类算法的结果,或比较相同聚类算法的结果算法在不同的可变参数下运行,例如迭代次数、距离度量的选择、质心数量(k 值)。

期望的结果是紧密(小)的簇,每个簇都远离其他簇。

计算很简单:

对于质心间分离:

  • 计算聚类中心之间的两两距离;然后

  • 计算这些距离的中值。

对于簇内方差:

  • 对于每个簇,计算给定簇中每个数据点的距离 其聚类中心;下一页

  • (对于每个簇)计算上述步骤中距离序列的方差;然后

  • 对这些方差值求平均值。

<小时/>

这就是我对第一个问题的回答。这是第二个问题:

Is Euclidean distance the correct method for calculating distances? What if I have 100 dimensions instead of 30 ?

首先,一个简单的问题——随着维度/特征的增加,欧几里得距离是一个有效的度量吗?

欧几里得距离是完全可扩展的——适用于二维或两千维。对于任意一对数据点:

  • 按元素减去它们的特征向量,

  • 对结果向量中的每个项目进行平方,

  • 对结果求和,

  • 取该标量的平方根。

这个计算序列中没有任何地方涉及规模。

但是欧几里得距离是否适合您的问题的相似性度量,取决于您的数据。例如,它是纯数字(连续)吗?或者它是否也有离散(分类)变量(例如,性别?男/女)如果您的维度之一是“当前位置”,并且在 200 个用户中,100 个用户的值为“旧金山”,另外 100 个用户的值为“波士顿”,你不能真正说,平均而言,你的用户来自堪萨斯州的某个地方,但这就是欧几里得距离的作用。

无论如何,由于我们对此一无所知,我只会给您一个简单的流程图,以便您可以将其应用于您的数据并确定适当的相似性指标。

根据您的数据确定适当的相似性指标:

enter image description here

关于machine-learning - 选择适当的相似性度量并评估 k 均值聚类模型的有效性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8102515/

相关文章:

r - 如何从 H2O 随机森林中获取一棵树?

matlab - 单一回归与全部回归中函数句柄的混淆

python - OpenCV 均值错误 : (-215) python

r - 如何在R中对具有不同大小向量的时间序列数据进行聚类

python - 如何找到聚类算法的成功率?

machine-learning - 您会使用什么算法根据人员属性进行聚类?

r - R 中的 xgboost() 错误

machine-learning - 在无监督学习中是否可以将数据与分组的数据行进行聚类?

python - 标准 1 误差的差距统计

python - 如何在 python 中使用 k-prototype 找到最佳簇数