#python #scikit-learn #blaze
#python #scikit-learn #blaze
Вопрос:
Я пытаюсь приспособить объект данных Blaze к функции scikit kmeans.
from blaze import *
from sklearn.cluster import KMeans
data_numeric = Data('data.csv')
data_cluster = KMeans(n_clusters=5)
data_cluster.fit(data_numeric)
Образец данных:
A B C
1 32 34
5 57 92
89 67 21
Его ошибка выброса :
Я смог сделать это с помощью фрейма данных Pandas. Есть ли способ передать объект blaze в эту функцию?
Комментарии:
1. Дважды проверьте, чтобы увидеть размер массива, который вы передаете в k-means. Обычно эта ошибка возникает при передаче одномерного массива.
2. Сколько образцов у вас есть в вашем объекте blaze?
Ответ №1:
Я думаю, вам нужно преобразовать ваш фрейм данных pandas в массив numpy, прежде чем вы его установите.
from blaze import *
import numpy
from sklearn.cluster import KMeans
data_numeric = numpy.array(data('data.csv'))
data_cluster = KMeans(n_clusters=5)
data_cluster.fit(data_numeric)
Ответ №2:
sklearn.cluster.KMeans
не поддерживайте входные данные с типом blaze.interactive._Data
, который является типом data_numeric в вашем коде.
Вы можете использовать data_cluster.fit(data_numeric.peek())
для подгонки переданных data_numeric с типом DataFrame
, поддерживаемым sklearn.cluster.KMeans
.
Ответ №3:
Я бы посоветовал вам выбрать количество кластеров (K) намного меньшим, чем количество обучающих примеров, которые у вас есть в вашем наборе данных. Неправильно запускать алгоритм K-Means, когда количество кластеров, которые вы хотите, больше или равно количеству обучающих примеров. Ошибка возникает при попытке передать объект blaze с нежелательной формой в функцию KMeans. Пожалуйста, проверьте: https://blaze.readthedocs.io/en/latest/csv.html
Комментарии:
1. Я передаю в функцию около 30000 строк данных, здесь я вставил только пример 3 строк.
2. Вам нужно использовать функцию reshape в
data_cluster.fit(data_numeric)
команде и преобразовать ваш массив в форму 2D-массива, которую примет K-Means scikit.
Ответ №4:
Да, прежде чем вы подойдете, вам необходимо преобразовать ваш фрейм данных pandas в массив numpy, теперь он работает нормально … я думаю, @aberger уже ответил.
Спасибо!
Комментарии:
1. преобразование в dataframe — дорогостоящий процесс, но, похоже, другого способа сделать это нет.