Подтвердить что ты не робот

Будет ли объект 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-средств?

4b9b3361

Ответ 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.