为什么当我使用Kmeans进行4个集群时,我只有一个intertia而没有4个?

2024-09-28 18:14:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据框架,我使用sklearn KMeans函数进行了4个群集群集:

km = KMeans(n_clusters=4, init='random', n_init=10, max_iter=10,
                    tol=1e-4, random_state=10, algorithm='full', )  
km.fit(df)

因此,我有4个集群,但当我这样做时:

km.inertia_

我只得到一个值:

1732.350

然而,根据惯性的定义,惯性是样本距离最近的簇中心的平方距离的总和。所以必须有4个惯性值,不是1,还是我错了


Tags: 数据函数框架距离initrandomsklearnmax
2条回答

属性interia是一个数字,它是样本到最近的聚类中心的平方距离的总和

惯性被用作在几次运行中选择最佳俱乐部化的标准。为了能够找到最好的一个,所有聚类都应该以某种方式排序。这是通过为它们中的每一个指定一个称为惯性的标量值来实现的,这样它们就可以很容易地相互比较。此值不打算以任何其他方式使用

下面是在矩阵密集的情况下计算其值的当前实现(源代码可用here):

cpdef floating _inertia_dense(
        np.ndarray[floating, ndim=2, mode='c'] X,  # IN
        floating[::1] sample_weight,               # IN
        floating[:, ::1] centers,                  # IN
        int[::1] labels):                          # IN
    """Compute inertia for dense input data
    Sum of squared distance between each sample and its assigned center.
    """
    cdef:
        int n_samples = X.shape[0]
        int n_features = X.shape[1]
        int i, j

        floating sq_dist = 0.0
        floating inertia = 0.0

    for i in range(n_samples):
        j = labels[i]
        sq_dist = _euclidean_dense_dense(&X[i, 0], &centers[j, 0],
                                         n_features, True)
        inertia += sq_dist * sample_weight[i]

    return inertia

有一个循环,它贯穿所有集群并累加总和,因此它不提供一种方法来分别获取每个集群的惯性值。如果您需要每个集群的惯性,那么您必须自己实现它

相关问题 更多 >