Как обеспечить центроиды кластеров в k означает, что алгоритм не переключается каждый раз? - PullRequest
0 голосов
/ 02 мая 2018

У меня есть CSV-файл, который выглядит ниже

date                       mse                                                  
2018-02-11                 14.34
2018-02-12                 7.24
2018-02-13                 244.5
2018-02-14                 3.5
2018-02-16                 12.67
2018-02-21                 45.66
2018-02-22                 15.33
2018-02-24                 98.44
2018-02-26                 23.55
2018-02-27                 45.12
2018-02-28                 78.44
2018-03-01                 34.11
2018-03-05                 23.33
2018-03-06                 127.45
...                        ...   
...                        ...

Теперь я пытаюсь применить k означает к mse значениям, чтобы получить 2 clusters, что дает мне 2 centroids по одному для каждого Теперь мне дано значение mse, и мне нужно найти, для какого из двух centroids ближе к заданному значению mse. Я делаю что-то подобное

from sklearn.cluster import KMeans
import pandas as pd

centroid_list = []
given_mse = 7.382409087
kmeans = KMeans(n_clusters=2)
df = pd.read_csv("data.csv", parse_dates=["date"])
kmeans.fit_predict(df[['mse']])
centroid_list.append(kmeans.cluster_centers_.ravel())
#print(centroids_list)  # array([  153.27996598, 19810.6925875 ]
for i in centroids_list:
t1 = abs(given_mse - i[0])
t2 = abs(given_mse - i[1])
if t1 < t2:
   result.append("label 1")
   else:
   result.append("label 2")
print(result)  # ['label1']

Теперь, как вы можете видеть, я получаю два centroid значения 153.27996598 и 19810.6925875, назначенные каждому кластеру.

Проблема в том, что он часто переключает значения [(x, y) или (y, x)] при запуске программы, из-за чего я получаю конечный результат как label1 или время от времени label2.

Есть идеи, как это можно исправить. Есть ли какая-нибудь техника sckit-learn, чтобы предотвратить это переключение?

1 Ответ

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

Как уже упоминал @Vivek Kumar, мне нужно было передать дополнительный параметр random_state при установке значения k. Значение random_state может быть любым целым числом.

kmeans = KMeans(n_clusters=2, random_state=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...