【问题标题】:Comparison of different way of implementing the elbow method肘部法不同实施方式的比较
【发布时间】:2018-11-04 07:53:09
【问题描述】:

我很困惑,因为我看到了不同的方法来实现肘法来识别 Kmean 中正确的聚类数量,并且它们产生的结果略有不同。

这里描述了一种方法Sklearn kmeans equivalent of elbow method 并且正在使用kmeans_inertia_ 此处描述了其他方法https://pythonprogramminglanguage.com/kmeans-elbow-method/ 并且正在使用以下命令。

distortions.append(sum(np.min(cdist(X, kmeanModel.cluster_centers_, 'euclidean'), axis=1)) / X.shape[0]) 我想知道 Kmeans_inertia_ 是做什么的?两者的实现都正确吗?

【问题讨论】:

    标签: python scikit-learn cluster-analysis k-means


    【解决方案1】:

    对于完全没有明确定义的东西,没有“正确”。

    肘部方法是一种极其粗糙的启发式方法,我不知道任何正式的定义,也没有参考。

    据推测,这两种方法通常会产生相同的 k...

    但是根据 k-means 的概念,使用它的“正确”方式是使用平方误差,不是使用欧几里得距离。因为 k-means 最小化平方误差,它并没有最小化欧几里得距离(尝试证明这一点!你不能,因为有反例)。

    【讨论】:

      【解决方案2】:

      阅读KMeans 的文档,您可以看到失真和惯性都是每个点到其中心的距离之和。

      【讨论】:

        【解决方案3】:

        scikit-Learn User Guide on KMeansAndrew Ng's CS229 Lecture notes on k-means 都表明肘部方法最小化了聚类点与其聚类质心之间的平方距离sum。 sklearn 文档将此称为“惯性”,并指出它会受到高维空间中欧几里得距离膨胀的缺点的影响。 Ng 将这种最小化称为“失真函数”。但是,可以找到examples 失真的定义是“到各个集群的集群中心的平方距离的平均值”(重点是我的),而“惯性”是总和的平方距离。虽然令人困惑,并确认这些术语的定义不一致,但它暗示我两者都有效。

        【讨论】:

          【解决方案4】:

          我发现很多使用这个公式的例子,声称他们计算了失真。但是在我的理解中似乎是错误的:

          distortions.append(sum(np.min(cdist(X, kmeanModel.cluster_centers_, 'euclidean'), axis=1)) / X.shape[0])
          

          如果要计算距离的平方和,应该是:

          distortions.append(sum(np.min(cdist(X, kmeanModel.cluster_centers_, 'euclidean'), axis=1)****2**) / X.shape[0])
          

          【讨论】:

            猜你喜欢
            • 2023-03-15
            • 1970-01-01
            • 2021-06-07
            • 2015-11-15
            • 1970-01-01
            • 2013-08-05
            • 1970-01-01
            • 2018-08-11
            • 2021-07-27
            相关资源
            最近更新 更多