Python – Kmeans – добавьте центроиды в качестве нового столбца

Предположим, у меня есть следующий кадр данных. Как я могу создать новый столбец «new_col», содержащий центроиды? Я могу создать столбец только с лабораториями, а не с центроидами.

Вот мой код.

from sklearn import preprocessing
from sklearn.cluster import KMeans

numbers = pd.DataFrame(list(range(1,1000)), columns = ['num'])

kmean_model = KMeans(n_clusters=5)
kmean_model.fit(numbers[['num']])

kmean_model.cluster_centers_
array([[699. ],
       [297. ],
       [497.5],
       [899.5],
       [ 99. ]])

numbers['new_col'] = kmean_model.predict(numbers[['num']])

person Josef    schedule 22.04.2020    source источник
comment
Созданный вами фрейм данных (числа) имеет 1000 записей, но количество центроидов всего 5. Поэтому не рекомендуется добавлять центроид к вашему фрейму данных. Вы хотите знать только центроидные значения?   -  person Gilseung Ahn    schedule 22.04.2020
comment
Я хочу присвоить значения фрейма данных ближайшим центроидам. Аналогично в этом случае пример, у меня есть реальная проблема, в которой у меня есть >100 тыс. записей, и я должен назначить их центроидам, но проблема такая же, как и в этом случае.   -  person Josef    schedule 22.04.2020


Ответы (1)


Это просто. Просто используйте .labels_ следующим образом.

numbers['new_col'] = kmean_model.labels_

Редактировать. Извините моя ошибка.

Создайте словарь, ключ которого — метка, а значение — центры, и замените new_col с помощью словаря. См. следующее.

label_center_dict = {k:v for k, v in zip(kmean_model.labels_, kmean_model.cluster_centers_)}
numbers['new_col'] = kmean_model.labels_
numbers['new_col'].replace(label_center_dict, inplace = True)
person Gilseung Ahn    schedule 22.04.2020
comment
Мне просто нужны значения cluster_centers_, а не метки - person Josef; 22.04.2020
comment
Отличный ответ, это то, что я искал :D - person Josef; 22.04.2020