Будет ли объект pandas DataFrame работать с кластером sklearn kmeans?
dataset pandas dataframe. Это sklearn.cluster.KMeans
km = KMeans(n_clusters = n_Clusters)
km.fit(dataset)
prediction = km.predict(dataset)
Вот как я решаю, какой объект принадлежит кластеру:
for i in range(len(prediction)):
cluster_fit_dict[dataset.index[i]] = prediction[i]
Вот как выглядит набор данных:
A 1 2 3 4 5 6
B 2 3 4 5 6 7
C 1 4 2 7 8 1
...
где A, B, C - индексы
Это правильный способ использования k-средств?
Ответы
Ответ 1
Чтобы узнать, имеет ли ваш файл данных dataset
подходящий контент, вы можете явно преобразовать в массив numpy:
dataset_array = dataset.values
print(dataset_array.dtype)
print(dataset_array)
Если массив имеет однородную численную dtype
(обычно numpy.float64
), то это должно быть хорошо для scikit-learn 0.15.2 и более поздних версий. Возможно, вам все равно необходимо нормализовать данные с помощью sklearn.preprocessing.StandardScaler
.
Если ваш фрейм данных неоднородно типизирован, dtype
соответствующего массива numpy будет object
, который не подходит для scikit-learn. Вам нужно извлечь числовое представление для всех соответствующих функций (например, путем извлечения фиктивных переменных для категориальных функций) и удалить столбцы, которые не подходят для функций (например, идентификаторы образцов).
Ответ 2
Предполагая, что все значения в фрейме данных являются числовыми,
# Convert DataFrame to matrix
mat = dataset.as_matrix()
# Using sklearn
km = sklearn.cluster.KMeans(n_clusters=5)
km.fit(mat)
# Get cluster assignment labels
labels = km.labels_
# Format results as a DataFrame
results = pandas.DataFrame([dataset.index,labels]).T
В качестве альтернативы вы можете попробовать KMeans ++ для Pandas.