我有一个用作初始质心的数组(3个变量A,B,C)。
X = np.array([[0.5, 0.1, 0.4],
[0.7, 0.7, 0.3],
[0.2,0.5,0.9]], np.float64)
clus = KMeans(n_clusters=3,init=X,n_init = 1).fit(data)
centers = clus.cluster_centers_
print centers
但是对于后续迭代,我想限制质心在一个范围之间的移动。例如:[0.5,0.1,0.4]只能在[0.4-0.6,0-0.2,0.3-0.5]之间切换,依此类推。
答案 0 :(得分:1)
您需要使用名为COP-Kmeans(see paper here)的约束K-means聚类。
这是该算法的另一种实现,在scikit-learn上不可用。 on this GitHub repository有一个python实现。克隆存储库后,将按以下方式使用(从“使用”部分中获取):
run_ckm.py [-h] [--ofile OFILE] [--n_rep N_REP] [--m_iter M_ITER] [--tol TOL] dfile cfile k
参数如下:
dfile data file
cfile constraint file
k number of clusters
还有一些与算法本身相关的可选参数:
--n_rep N_REP number of times to repeat the algorithm
--m_iter M_ITER maximum number of iterations of the main loop
--tol TOL tolerance for deciding on convergence
最终,这些参数更具元性,但也很有用:
-h, --help show this help message and exit
--ofile OFILE file to store the output