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