2016-09-29 107 views
10

我正在尝试将Blaze数据对象放到scikit kmeans函数中。Scikit的大火学习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

我已经能够与大熊猫据帧做。任何方式来反馈这个功能的火焰对象?

+0

仔细检查,看看你传入k-means的数组的大小。通常,当传递一维数组时,会引发此错误。 – jonplaca

+0

你有多少样品在你的火焰中? – MMF

回答

5

我认为你需要在你适合之前将你的熊猫数据框转换成一个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均值算法是不正确的。 当您尝试将具有不希望的形状的闪烁对象传递给KMeans函数时,会发生此错误。 请检查: https://blaze.readthedocs.io/en/latest/csv.html

+0

我将大约30000行数据传递给函数,这里我只粘贴了3行样本。 –

+0

您需要在'data_cluster.fit(data_numeric)'命令中使用重塑函数,并将数组重塑为二维数组形式,scikit的K-Means将接受。 – PJay

2

sklearn.cluster.KMeansblaze.interactive._Data类型是data_numeric在你的代码的类型支持输入数据。

您可以使用data_cluster.fit(data_numeric.peek())来适应所支持的传输的数据数字型号sklearn.cluster.KMeans

0

是的,在你适应之前,你必须将你的熊猫数据框转换成一个numpy数组,现在它的工作正常......我认为@aberger已经回答了。

谢谢!

+1

转换为数据框是一种昂贵的过程,但看起来没有其他方式可以做到这一点。 –