使用预先计算的聚类中心重建k均值

时间:2017-11-10 10:36:47

标签: python-3.x scikit-learn k-means

我正在使用k-means进行聚类,聚类数量为60.由于某些聚类的出现意义较少,我已从聚类中心数组中删除了这些聚类中心(count = 8)并保存在clean_cluster_array

这一次,我正在用init = clean_cluster_centers重新拟合k-means模型。以及n_clusters = 52max_iter = 1,因为我希望尽可能避免重新装配。

基本思想是使用clean_cluster_centers重新创建新模型。这里的问题是,我们正在删除大量的集群;即使使用n_iter = 1,该模型也可以快速配置为更稳定的中心。有没有办法重新创建k-means模型?

1 个答案:

答案 0 :(得分:1)

如果您已安装KMeans对象,则它具有cluster_centers_属性。您可以通过执行以下操作直接更新它:

cls.cluster_centers_ = new_cluster_centers

因此,如果您想要一个具有干净聚类中心的新对象,请执行以下操作:

cls = KMeans().fit(X)
cls2 = cls.copy()
cls2.cluster_centers_ = new_cluster_centers

现在,由于预测函数仅检查您的对象是否具有名为cluster_centers_的非null属性,因此您可以使用预测函数

def predict(self, X):
    """Predict the closest cluster each sample in X belongs to.

    In the vector quantization literature, `cluster_centers_` is called
    the code book and each value returned by `predict` is the index of
    the closest code in the code book.

    Parameters
    ----------
    X : {array-like, sparse matrix}, shape = [n_samples, n_features]
        New data to predict.

    Returns
    -------
    labels : array, shape [n_samples,]
        Index of the cluster each sample belongs to.
    """
    check_is_fitted(self, 'cluster_centers_')

    X = self._check_test_data(X)
    x_squared_norms = row_norms(X, squared=True)
    return _labels_inertia(X, x_squared_norms, self.cluster_centers_)[0]