2011-12-21 71 views
10

我試圖做一些機器學習的東西,涉及到很多因子類型的變量(單詞,描述,時間,基本上是非數字的東西)。我通常依靠randomForest,但它不適用於具有> 32級別的因素。R機器學習包來處理大量的因素

任何人都可以推薦一些好的替代品嗎?

回答

15

樹方法將不起作用,因爲可能的分割數隨着級數呈指數增長。然而,用詞通常通過爲每個詞(描述等)創建指示符變量來解決 - 這樣分割可以一次使用一個詞(是/否)而不是選擇所有可能的組合。總的來說,你總是可以將水平擴展到指標(並且有些模型可以隱式地實現,如glm)。 ML在使用SVM等其他方法處理文本時也是如此。因此,答案可能是您需要考慮輸入數據結構,而不是方法。或者,如果您在關卡上有某種訂單,則可以將其線性化(因此只有c-1拆分)。

3

從理論上講,在32個類以上的類變量上使用randomForest方法沒有任何錯誤 - 這在計算上很昂貴,但使用randomForest方法處理任意數量的類並非不可能。正常的R包randomForest將32設置爲給定類變量的最大類數,因此禁止用戶對任何具有> 32類的任何類變量運行randomForest。

對變量進行線性化是一個非常好的建議 - 我已經使用了對類進行排序的方法,然後將它們平均分解爲32個元類。因此,如果實際上有64個不同的類,元類1包含1和2類中的所有東西等。唯一的問題是找出一個明智的排名方法 - 如果您正在使用,比如說,單詞很難知道每個單詞應該如何與其他單詞進行排名。

解決此問題的一個方法是製作n個不同的預測集,其中每個集包含具有多於32個類的每個類變量中具有31個類的任何特定子集的所有實例。您可以使用所有集合進行預測,然後使用包中包含的可變重要性度量來查找所使用的類最具預測性的實現。一旦你發現了31個最具預測性的課程,使用指定這些最具預測性的課程的所有數據爲1到31,並將其他所有課程變爲「其他」課程,從而實現一個新版本的RF課程,爲您提供最多32個課程分類變量但希望保留大部分的預測能力。

祝你好運!

5

一般來說,我發現的最好的包裝有很多因素水平的情況是使用gbm包。

它可以處理高達1024個因子水平。

如果超過1024個級別,我通常會通過保持1023個最常出現的因子級別來更改數據,然後將其餘級別編碼爲一個級別。