Python 手动定义群集中心

Python 手动定义群集中心,python,cluster-analysis,Python,Cluster Analysis,在进行Kmeans聚类分析时,如何手动定义某个聚类中心? 例如,我想说我的聚类中心是[1,2,3]和[3,4,5],现在我想把向量聚类到预定义的中心 类似于kmeans.cluster\u centers[1,2,3],[3,4,5] 解决我的问题我就是这么做的: number_of_clusters = len(vec) kmeans = KMeans(number_of_clusters, init='k-means++', n_init=100) kmeans.fit(vec) 它基本上

在进行Kmeans聚类分析时,如何手动定义某个聚类中心? 例如,我想说我的聚类中心是[1,2,3]和[3,4,5],现在我想把向量聚类到预定义的中心

类似于
kmeans.cluster\u centers[1,2,3],[3,4,5]

解决我的问题我就是这么做的:

number_of_clusters = len(vec)
kmeans = KMeans(number_of_clusters, init='k-means++', n_init=100)
kmeans.fit(vec)
它基本上为每个向量定义了一个簇。但是计算起来要花很多时间,因为我有成千上万的向量/句子。必须有一个选项可以直接将向量坐标设置为簇坐标,而无需使用kmeans算法进行计算。(因为运行算法后,中心输出基本上是矢量坐标…)

编辑以更具体地了解我的任务:


所以我想要的是我有成吨的向量(由句子生成),现在我想把这些向量进行聚类。但假设我有两列句子,总是想把一个B列的句子排序成一个a列的句子。没有一列句子可以互相交流。这就是为什么我要为A列向量设置聚类中心,然后预测这些中心的clostest B向量。希望这是有道理的


我正在使用sklearn kmeans atm

我想我知道你想做什么。因此,您希望通过一些已知示例手动选择k-Means的质心,然后执行聚类,将最接近的数据点分配给预定义的质心

您要查找的参数是名为
init
的k-Means初始化,请参阅

我准备了一个小例子,正好可以做到这一点

import numpy as np
from sklearn.cluster import KMeans
from scipy.spatial import distance_matrix

# 5 datapoints with 3 features
data = [[1, 0, 0],
        [1, 0.2, 0],
        [0, 0, 1],
        [0, 0, 0.9],
        [1, 0, 0.1]]

X = np.array(data)

distance_matrix(X,X)
成对距离矩阵显示了最接近的示例

> array([[0.        , 0.2       , 1.41421356, 1.3453624 , 0.1       ],
>       [0.2       , 0.        , 1.42828569, 1.36014705, 0.2236068 ],
>       [1.41421356, 1.42828569, 0.        , 0.1       , 1.3453624 ],
>       [1.3453624 , 1.36014705, 0.1       , 0.        , 1.28062485],
>       [0.1       , 0.2236068 , 1.3453624 , 1.28062485, 0.        ]])
可以选择某些数据点作为初始质心

centroid_idx = [0,2] # let data point 0 and 2 be our centroids
centroids = X[centroid_idx,:]
print(centroids) # [[1. 0. 0.]
                 # [0. 0. 1.]]

kmeans = KMeans(n_clusters=2, init=centroids, max_iter=1) # just run one k-Means iteration so that the centroids are not updated

kmeans.fit(X)
kmeans.labels_

>>> array([0, 0, 1, 1, 0], dtype=int32)

正如您所看到的,k-Means按预期标记了数据点。如果要更新质心,可能需要省略
max\u iter
参数。

您的问题非常模糊。您是否自己实现了集群算法?或者你正在使用某种图书馆?请发布一个简单的代码示例,这样我们就可以知道通常情况下,在聚类算法中,我们不会在某一点启动聚类,而是将它们随机化。我不知道是否有这样的选择,我从未尝试过。您可以尝试查看正在使用的库的文档,看看是否有这样一种选择。我认为您需要一种不同的算法。如果你手动定义聚类的位置,你并不是在准确地分析那些聚类。我想要的是我有成吨的向量(由句子生成),现在我想对这些向量进行聚类。但假设我有两列句子,总是想把一个B列的句子排序成一个a列的句子。没有一列句子可以互相交流。这就是为什么我要为A列向量设置聚类中心,然后预测这些中心的clostest B向量。希望这是有道理的那不是一个最小距离的问题吗?只需将一列集群到n个集群。然后为每个B句子找到到n A簇中心的距离。然后选择最短距离?不是真正的集群问题。这正是我想要实现的!非常感谢您抽出时间回答。您是否知道为什么“kmeans.fit(X)kmeans.labels_”命令会导致:“C:\Users\ga2943\AppData\Local\Continuum\anaconda3\lib\site packages\sklearn\cluster\k_means_.py:972:RuntimeWarning:Explicit initial init center position passed:n_init=10 return\n_iter=True只执行一次k-means初始化)”我看到了您的问题,您现在遇到的警告已经在这里得到了回答