Использование K-Means с предопределенными центрами? - PullRequest
0 голосов
/ 13 мая 2018

Я использую классификатор KNN, векторы функций которого взяты из классификатора K-Means (точнее, sklearn.cluster.MiniBatchKMeans). Поскольку К-среднее начинается со случайных точек каждый раз, я получаю разные результаты каждый раз, когда запускаю свой алгоритм. Я сохранил центры кластеров в отдельном файле .npy, когда результаты были хорошими, но теперь мне нужно использовать эти центры в моих K-средних, и я не знаю, как.

Следуя этому совету, я попытался использовать центры кластеров в качестве отправных точек, например:

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 голосов
/ 14 мая 2018

Мини-партия k-средних учитывает только выборку данных.

Для этого используется генератор случайных чисел.

Если вы хотите детерминированного поведения, исправьтеслучайное начальное число и предпочитать алгоритмы, в которых не используется случайная выборка (т. е. использовать обычное k-среднее вместо мини-пакетного k-среднего).

0 голосов
/ 13 мая 2018

Я думаю, что исправление random_state сделает работу.

См. API документ .

...