2017-04-11 116 views
2

我正在處理一個具有500個維度的640萬個樣本的數據集,並且我試圖將它分組爲200個集羣。我僅限於90GB的內存,當我嘗試從sklearn.cluster運行MiniBatchKmeans時,操作系統將殺死用盡太多內存的進程。有沒有辦法減少小批量kmeans的內存使用量?

這是代碼:

data = np.loadtxt('temp/data.csv', delimiter=',') 
labels = np.genfromtxt('temp/labels', delimiter=',') 

kmeans = cluster.MiniBatchKMeans(n_clusters=numClusters, random_state=0).fit(data) 
predict = kmeans.predict(data) 
Tdata = kmeans.transform(data) 

它不會讓過去集羣。

+0

對不起,我之前的回答是錯誤的。我錯過了你沒有使用GPU,但實際用完了主RAM。 –

+0

我確實擁有GPU訪問權限。你認爲我可以重寫這個在GPU上工作而不佔用太多內存嗎? – user1816679

+0

不,你想要做的是延遲加載數據文件,我。即一片一片。我知道這是可能的,而且不是非常困難,但不幸的是現在不記得具體細節。 –

回答

1

解決方法是使用sklearn的partial_fit方法 - 並非所有算法都有此選項,但MiniBatchKMeans有。

所以,你可以訓練「部分」,但你必須拆分你的數據,而不是一口氣讀完,這可以用發電機完成,有很多方法可以做到,如果你使用熊貓例如,您可以使用this

然後,而不是使用fit,你應該使用partial_fit來訓練。

相關問題