ошибка при передаче фрейма данных через k-means - PullRequest
0 голосов
/ 28 февраля 2019

Хотя мой фрейм данных как и все значения с плавающей точкой везде.При передаче фрейма данных через k-means он показывает, что не удалось преобразовать строку в число с плавающей точкой.

Как преобразовать значения nan, если они есть, в значения с плавающей точкой во всем фрейме данных?

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Это сделает вашу работу и преобразует все столбцы в строковом формате в категориальные коды или использует одно горячее кодирование переменных в этих столбцах.

import numpy as np  
from sklearn.cluster import KMeans
import pandas
df = pandas.read_csv('zipIncome.csv')
print(df)

df[col_name]= df[col_name].astype('category')
df[col_name] = df[col_name].cat.codes
kmeans = KMeans(n_clusters=4,init='k-means++', max_iter=600, algorithm = 'auto').fit(df)
print (kmeans.labels_)
print(kmeans.cluster_centers_)  
0 голосов
/ 28 февраля 2019

На основании вашего кода может показаться, что вы только создали экземпляр KMeans, но не использовали его.Вам понадобятся чистые входные данные X ( т.е. без строк и т. Д.), Назовем их X

kmeans = KMeans(n_clusters=4,init='k-means++', max_iter=600, algorithm = 'auto')
clusters = kmeans.fit_predict(X)

Теперь clusters имеет номер кластера для каждой выборки вX.

(в качестве альтернативы вы можете fit(X), а затем predict(X) отдельно, но в конечном итоге именно predict будет выводить метки кластера, которые вам понадобятся)

Если вы хотите позже получить кластеры данных, вы должны использовать kmeans.predict(new_data) вместо fit_predict(), чтобы KMeans использовал обучение из X и применил его к вашим новым_данным (или, в зависимости от ваших потребностей, вы можете переобучить его).).
Надеюсь, что это поможет.

Наконец, вы можете добавить еще один столбец в ваш DataFrame pandas, выполнив:

df['cluster'] = clusters

, где 'cluster' - строка для вашего нового имени столбца.Вы можете, конечно, называть это как хотите

...