将K-Means用于预定义的中心?

时间:2018-05-13 12:54:31

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

我正在运行一个KNN分类器,其特征向量来自K-Means分类器(更具体地说,sklearn.cluster.MiniBatchKMeans)。因为每当我运行算法时每次得到不同的结果时,K-means都以随机点开始。我已经将集群中心存储在一个单独的.npy文件中,从结果良好的时间开始,但现在我需要在我的K-means中使用这些中心,我不知道如何。

根据this建议,我尝试使用群集中心作为起点,如下所示:

MiniBatchKMeans.__init__(self, n_clusters=self.clusters, n_init=1, init=np.load('cluster_centers.npy'))

但是,每次运行算法时结果都会发生变化。

然后我尝试在拟合数据后手动更改聚类中心:

kMeansInstance.cluster_centers_ = np.load('cluster_centers.npy')

每次都有不同的结果。

我能想到的唯一其他解决方案是使用我保存的中心手动实现预测方法,但我不知道如何以及我不知道是否有更好的方法来解决我的问题而不是重写轮子

2 个答案:

答案 0 :(得分:1)

我猜想修复random_state会完成这项工作。

请参阅API docu

答案 1 :(得分:0)

迷你批次k-means仅考虑数据的样本

它使用随机生成器。

如果您想要确定性行为,请修改随机种子,并选择不使用随机样本的算法(即使用常规k-means代替小批量k-means)。