2016-09-29 113 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

轉換爲數據框是一種昂貴的過程,但看起來沒有其他方式可以做到這一點。 –