1

我的工作在Spark使用Random Forest算法Classification上有一個樣本dataset,看起來像這樣:如何決定numClasses參數傳遞到隨機森林算法火花MLlib與pySpark

Level1,Male,New York,New York,352.888890 
Level1,Male,San Fransisco,California,495.8001345 
Level2,Male,New York,New York,-495.8001345 
Level1,Male,Columbus,Ohio,165.22352099 
Level3,Male,New York,New York,495.8 
Level4,Male,Columbus,Ohio,652.8 
Level5,Female,Stamford,Connecticut,495.8 
Level1,Female,San Fransisco,California,495.8001345 
Level3,Male,Stamford,Connecticut,-552.8234 
Level6,Female,Columbus,Ohio,7000 

這裏的最後一個值在每一行將作爲label,其餘作爲features。但我想把label作爲一個類別而不是數字。所以165.22352099將表示一個類別,所以-552.8234。爲此,我將features以及label編碼爲分類數據。現在我有什麼困難在決定我應該通過什麼numClasses參數Random Forest算法在SparkMlLib?我的意思是它應該等於我的label中唯一值的數量?我的標籤有10000獨特的值,所以如果我把10000作爲numClasses的值,那麼它會不會顯着降低性能?

這裏是MlLib建立模型對隨機森林的典型特徵:

model = RandomForest.trainClassifier(trainingData, numClasses=2, categoricalFeaturesInfo={}, 
            numTrees=3, featureSubsetStrategy="auto", 
            impurity='gini', maxDepth=4, maxBins=32) 

回答

1

的困惑來自於事實,你正在做的事情,你不應該這樣做。你的問題顯然是迴歸/排名,而不是分類。你爲什麼會認爲它是一個分類?試着回答這兩個問題:

  • 你有每各(100,000 * 100 = 1,000,000)至少100個樣本?
  • 在類中是否完全沒有結構,例如 - 與值爲「-1000」或「-1000」的值相比,具有值「200」的對象更具類似於具有值「100」或「300」的值的對象具有值「200」而不是。 2300" ?

如果至少有一個答案是沒有,那麼你不應該把這個作爲一個分類問題

如果出於某種奇怪的原因,你回答兩次,那麼答案是:「是的,你應該編碼每個不同的值作爲一個不同的類」,從而導致了10000個不同類別,這會導致:

  • 極不平衡分類(RF,不均衡元學習者將幾乎總是在這樣的情況下失敗)
  • 類極端的數量(有沒有模型能夠解決它,肯定RF不會解決它)
  • 概率極小lem-看着你的特徵數量很少,如果你能從二元分類中預測的話,我會感到驚訝。正如你可以看到不規則的這些價值,你有3個點僅在第一個值分歧,你會得到完全不同的結果:

    Level1,Male,New York,New York,352.888890 
    Level2,Male,New York,New York,-495.8001345 
    Level3,Male,New York,New York,495.8 
    

所以總結起來,有近100%的把握這是不分類問題,你應該:

  • 迴歸的最後的值(關鍵字:reggresion)
  • 構建一個排名(關鍵字:學會排名)
  • 鬥你的價值觀爲最多10個不同的值,然後 - 分類(關鍵字:不平衡分類,稀疏二進制表示)
+0

我試着只用RF看待這個問題作爲迴歸並把標籤爲數值,而不是編碼它們(我只編碼特徵),但性能很差(RMSE在70-80左右)。我的猜測是,具有負面價值是導致業績下降。所以我想到了嘗試分類方法。對於每個值,我可能在我的完整數據中有超過300個樣本。如果我在迴歸中對標籤進行編碼,會不會影響性能? –

+0

以及這是一個錯誤的做法。分類決不會比迴歸本身更好。這不是如何解決問題的方法。另外,負值在迴歸中並不重要,它們與正值一樣好。我最好的猜測是 - 你必須收集更多的特徵,當前的問題歸結爲每個向量在高維空間中表示爲4個向量似乎不足以預測連續值。特別是那個城市意味着一個國家,所以這比其他國家的知識更少。 – lejlot

+0

實際上,在我的實際代碼中,我使用了一組12個不同的特徵,並且數據與上面顯示的示例有點不同(由於限制,因此無法發佈實際數據,因此它的表示)。 –