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

我需要知道

  • 我如何确定我的算法是否正常工作?我不能有一个图表
    给出一些关于我的算法的正确性的想法。
  • 欧几里得距离是计算距离的正确方法吗?如果我有 100 个维度怎么办
    而不是 30 ?
  • 最佳答案

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



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

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

    质心间分离/群集内方差

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

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

    但是,仅靠质心间的分隔并不能说明全部问题,因为两种聚类算法可能返回具有相同质心间分隔的结果,尽管其中一种明显更好,这是因为聚类“更紧密”(即,半径较小);换句话说,簇边缘具有更大的间隔。第二个度量标准(集群内方差)说明了这一点。这只是每组计算的平均方差。

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

    理想的结果是紧密的(小型)群集,每个群集彼此远离。

    计算很简单:

    对于质心分离:

  • 计算聚类中心之间的成对距离;然后
  • 计算这些距离的中位数。

  • 对于集群内差异:
  • 每个群集,计算给定群集中每个数据点的距离,从
    它的集群中心;下一个
  • (对于每个聚类)从上述步骤计算距离序列的方差;然后
  • 将这些方差值取平均值。


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



    首先,一个简单的问题-欧氏距离是尺寸/特征增加时的有效指标吗?

    欧几里得距离是完全可伸缩的-适用于二维或2000。对于任何一对数据点:
  • 逐元素减去其特征向量
  • 平方该结果向量中的每个项目
  • 求和结果,
  • 取该标量的平方根。

  • 在此计算顺序中,没有任何地方涉及规模。

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

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

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

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

    10-13 00:04