2012-02-05 110 views
3

我有一個數據集NAs灑在整個慷慨。R因子(R)變量選擇因子()和NIA

另外它有列需要是factors()

我正在使用caret包中的rfe()函數來選擇變量。

似乎使用lmFuncs作品用於NAS的數據rfe()functions=說法,但不是在因子變量,而rfFuncs作品因子變量,但不是來港定居。

對此有何建議?

我試過model.matrix()但它似乎只是導致更多的問題。

+1

我很懷疑'lmFuncs'會因爲一些因素而失敗。不過,我可以確信一個可重複的例子。 Random Forest不會(默認情況下)接受NAs案例,這只是該算法(或至少是R版本)的一個有據可查的「特徵」。如果你想要無縫處理NAs的基於樹的模型,'treebagFuncs'可能是一個更安全的選擇(但我沒有測試過它)。 – joran 2012-02-05 01:33:15

回答

3

由於包之間在這些點上的行爲不一致,更不用說當去更多的「元」包(比如caret)時額外的技巧,我總是會發現在做任何事情之前,先處理NAs和因素變量更容易機器學習。

  • 對於NA,無論是省略還是省略(中位數,knn等)。
  • 對於因素特徵,你在正確的軌道上model.matrix()。它可以讓你爲不同層次的因素生成一系列「虛擬」特徵。典型的用法是這樣的:
> dat = data.frame(x=factor(rep(1:3, each=5))) 
> dat$x 
[1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 
Levels: 1 2 3 
> model.matrix(~ x - 1, data=dat) 
    x1 x2 x3 
1 1 0 0 
2 1 0 0 
3 1 0 0 
4 1 0 0 
5 1 0 0 
6 0 1 0 
7 0 1 0 
8 0 1 0 
9 0 1 0 
10 0 1 0 
11 0 0 1 
12 0 0 1 
13 0 0 1 
14 0 0 1 
15 0 0 1 
attr(,"assign") 
[1] 1 1 1 
attr(,"contrasts") 
attr(,"contrasts")$x 
[1] "contr.treatment" 

而且,萬一你沒有(儘管它聽起來像你有),在CRAN的caret小插曲都非常好,觸摸上的一些觀點。 http://cran.r-project.org/web/packages/caret/index.html