Предельное движение центроидов в науке k означает кластеризацию - PullRequest
0 голосов
/ 25 октября 2018

У меня есть массив, который служит исходным центроидом (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] и т. Д.

1 Ответ

0 голосов
/ 25 октября 2018

Вам необходимо использовать кластеризацию ограниченных K-средних, названную COP-Kmeans ( см. Статью здесь ).

Это другая реализация алгоритма, и она недоступна в scikit-learn.В этом репозитории GitHub есть реализация этого языка на 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
...