2016-09-29 2 views
10

Я пытаюсь установить объект данных Blaze в функцию scikit kmeans.Blaze with Scikit Learn K-Means

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 

Его ошибка метания:

enter image description here

Я был в состоянии сделать это с панды Dataframe. Любой способ передать объект blaze этой функции?

+0

Двойная проверка, чтобы увидеть размер массива, который вы передаете в k-означает. Обычно эта ошибка возникает при передаче массива 1-D. – jonplaca

+0

Сколько у вас образцов в вашем объекте пламени? – MMF

ответ

5

Я думаю, вам нужно преобразовать вашу базу данных 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) 
1

Я бы предположил, что вы выбрали количество кластеров (K) намного меньше, чем количество примеров обучения, которые у вас есть в вашем наборе данных. Неправильно запускать алгоритм K-Means, когда количество желаемых кластеров больше или равно количеству примеров обучения. Ошибка возникает, когда вы пытаетесь передать объект Blaze с нежелательной формой, в функцию KMeans. Пожалуйста, проверьте: https://blaze.readthedocs.io/en/latest/csv.html

+0

Я передаю около 30000 строк данных функции, здесь я вставил только образец 3 строки. –

+0

Вам нужно использовать функцию reshape в команде 'data_cluster.fit (data_numeric)' и изменить форму массива в виде формы 2D-массива, которая примет K-Meis scikit. – PJay

2

sklearn.cluster.KMeans не поддерживает входные данные с типом blaze.interactive._Data который является типом data_numeric в вашем коде.

Вы можете использовать data_cluster.fit(data_numeric.peek()) для соответствия переданным данным_нумерным типам DataFrame при поддержке sklearn.cluster.KMeans.

0

Да, перед тем, как вы поместились, вам нужно будет преобразовать ваш кадр данных pandas в массив numpy, теперь его работы прекрасны ... я думаю, что @aberger уже ответил.

спасибо!

+1

Преобразование в dataframe - это дорогостоящий процесс, но похоже, что нет другого способа сделать это. –

Смежные вопросы