2015-01-09 13 views
2

對於分類任務,我有一個4000萬x 22的numpy整型數據數組。 大部分功能都是使用不同整數值表示不同類別的分類數據。例如,在「顏色」欄中:0代表藍色,1代表紅色等等。我使用LabelEncoder對數據進行了預處理。Scikit-Learn中的分類數據轉換

  1. 將這些數據適用於SK學習中的任何分類模型是否有意義?我試圖將數據擬合到隨機森林模型中,但準確性非常差。我還嘗試過一種熱門編碼技術將數據轉換爲虛擬變量,但是我的電腦只能在使用一種熱門編碼後才能處理稀疏矩陣,問題是隨機森林只能採用密集矩陣,這會超出我的計算機內存。
  2. 在SK學習中處理分類數據的正確策略是什麼?
+0

在嘗試處理4000萬行數據之前,我會減少訓練數據的大小,並找出哪些功能最有用。 RandomForest有一個屬性'feature_importances_',它會告訴你什麼它認爲是最有用的功能:http://scikit-learn.org/stable/modules/ensemble.html#feature-importance-evaluation – EdChum

+0

感謝您的幫助!我不知道sklearn有這個。 –

回答

1

LabelEncoder在你的情況下是無用的,因爲輸出數字對數字沒有任何意義(即對它們執行算術運算沒有意義)。處理分類數據時,OneHotEncoder是必不可少的。

最近sklearn got support for sparse input在隨機森林和決策樹,所以你可能想看看最新版本。另外,其他方法如LogisticRegression支持稀疏數據。

此外,我不認爲你需要使用全部40M的例子來獲得一個體面的準確性。它應該足夠隨機抽樣,例如100k(這個數字取決於OneHotEncoding之後的特徵數量,它們的變化性和目標類別的數量)。

+0

哇!那是好消息!我目前使用最新的穩定版本0.15.2。我應該更新到最新的開發版本嗎?對不起,我不知道如何找到合適的版本。 –

+0

@JimGB,我不熟悉sklearn的版本政策,所以當我需要稀疏的隨機森林時,我只是檢查了'master'。 –