我的工作在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
算法在Spark
MlLib
?我的意思是它應該等於我的label
中唯一值的數量?我的標籤有10000
獨特的值,所以如果我把10000
作爲numClasses
的值,那麼它會不會顯着降低性能?
這裏是MlLib建立模型對隨機森林的典型特徵:
model = RandomForest.trainClassifier(trainingData, numClasses=2, categoricalFeaturesInfo={},
numTrees=3, featureSubsetStrategy="auto",
impurity='gini', maxDepth=4, maxBins=32)
我試着只用RF看待這個問題作爲迴歸並把標籤爲數值,而不是編碼它們(我只編碼特徵),但性能很差(RMSE在70-80左右)。我的猜測是,具有負面價值是導致業績下降。所以我想到了嘗試分類方法。對於每個值,我可能在我的完整數據中有超過300個樣本。如果我在迴歸中對標籤進行編碼,會不會影響性能? –
以及這是一個錯誤的做法。分類決不會比迴歸本身更好。這不是如何解決問題的方法。另外,負值在迴歸中並不重要,它們與正值一樣好。我最好的猜測是 - 你必須收集更多的特徵,當前的問題歸結爲每個向量在高維空間中表示爲4個向量似乎不足以預測連續值。特別是那個城市意味着一個國家,所以這比其他國家的知識更少。 – lejlot
實際上,在我的實際代碼中,我使用了一組12個不同的特徵,並且數據與上面顯示的示例有點不同(由於限制,因此無法發佈實際數據,因此它的表示)。 –