2017-04-26 21 views
0

我試圖從kaggle網站與Twitter的情緒數據有大約100萬的原始它們實現單詞模型的袋子。我已經清理,但在最後一部分我申請我的特徵向量和情緒,以隨機森林分類它走了這麼多time.here是我的代碼...如何使RandomForestClassifier更快?

from sklearn.ensemble import RandomForestClassifier 
forest = RandomForestClassifier(n_estimators = 100,verbose=3) 
forest = forest.fit(train_data_features, train["Sentiment"]) 

train_data_features是1048575x5000稀疏matrix.I試圖將其轉換爲數組,同時進行顯示內存錯誤。

我在哪裏做錯了嗎?一些建議我一些源或另一種方式來做到這一點更快嗎?我絕對新手,在機器學習,而不是有那麼多的編程背景使一些導遊會適應。

很多感謝你提前

+0

你幾乎肯定不需要做的大部分工作訓練對每次100萬行。這裏有一個建議:在你的1M隨機採樣中,fit()/ predict()/ score(在持續測試集上)你的問題訓練(擬合)在5萬行上。然後對100,000行進行同樣的操作。然後是150,000行等等。我敢打賭,你會看到測試成績開始趨於一致,並且明顯少於1M行。 –

+1

即使您的問題確實顯示了性能提高,因爲您一直添加數據至1M行,上述練習可讓您估計需要多長時間運行1M行。那麼你知道它是「我需要運行這個一夜之間」問題或「這需要時間的完全不可行量」的問題。如果它是「一夜之間運行」的問題,我仍然建議你做大部分編碼/迭代你的一小部分數據,然後當你有你想要的代碼並且想要重新運行所有數據時,只需重新運行所有數據在過夜 –

+0

最後的建議 - 5000列是巨大的。嘗試一些你會發現從谷歌搜索「sklearn降維」的方法。 –

回答

1

其實解決的辦法是非常簡單的:獲得強機及並行運行。默認情況下,RandomForestClassifier使用單線程,但因爲它是完全獨立的模型的集合,你可以訓練每個100個髮辮並行。只需設置

forest = RandomForestClassifier(n_estimators = 100,verbose=3,n_jobs=-1) 

使用所有核心。您還可以限制max_depth這將加快速度(最終你可能會需要這個無論哪種方式,因爲RF會嚴重過度擬合沒有深度任何限制)。