2014-02-28 18 views
3

我希望這不是一個太天真的問題。 我在R的caret包中使用不同模型執行一系列二項式迴歸。除了地球(MARS)之外,所有工作都到目前爲止。通常,earth家族通過earth函數glm=list(family=binomial)傳遞給glm函數。這似乎工作正常(如下所示)。對於一般的predict()函數,我會使用type="response'來正確縮放預測。以下示例顯示fit1中的無符號方法,並在pred1中進行了正確的預測。如果沒有type='response'pred1a是不正確的縮放預測。 fit2caretpred2的方法是預測;它與pred1a中的非縮放預測相同。通過fit2對象挖掘,正確擬合的值出現在glm.list組件中。因此,earth()函數表現得應該如此。「響應」預測與地球(MARS)和插入符號R

問題是...因爲caretprediction()功能只需要type='prob' or 'raw',我該怎麼指示是預測響應的規模?

非常感謝。

require(earth) 
library(caret) 
data(mtcars) 

fit1 <- earth(am ~ cyl + mpg + wt + disp, data = mtcars, 
     degree=1, glm=list(family=binomial)) 
pred1 <- predict(fit1, newdata = mtcars, type="response") 
range(pred1) 
[1] 0.0004665284 0.9979135993 # Correct - binomial with response 

pred1a <- predict(fit1, newdata = mtcars) 
range(pred1a) 
[1] -7.669725 6.170226 # without "response" 

fit2ctrl <- trainControl(method = "cv", number = 5) 
fit2 <- train(am ~ cyl + mpg + wt + disp, data = mtcars, method = "earth", 
     trControl = fit2ctrl, tuneLength = 3, 
     glm=list(family='binomial')) 
pred2 <- predict(fit2, newdata = mtcars) 
range(pred2) 
[1] -7.669725 6.170226 # same as pred1a 

#within glm.list object in fit4 
[1] 0.0004665284 0.9979135993 

回答

8

有幾件事情:

  • 結果(mtcars$am)是數字0/1 train將其視爲迴歸模型
  • 時,結果是一個因素,train會假設分類並將自動添加glm=list(family=binomial)
  • 分類和train,您需要將classProbs = TRUE添加到trainControl爲模型產生類概率。

這裏是一個不同的數據在earth包以身作則:

​​

則:

> predict(a1, head(etitanic), type = "response") 
     survived 
[1,] 0.8846552 
[2,] 0.9281010 
[3,] 0.8846552 
[4,] 0.4135716 
[5,] 0.8846552 
[6,] 0.4135716 
> 
> predict(a2, head(etitanic), type = "prob") 
     yes   no 
1 0.8846552 0.11534481 
2 0.9281010 0.07189895 
3 0.8846552 0.11534481 
4 0.4135716 0.58642840 
5 0.8846552 0.11534481 
6 0.4135716 0.58642840 

最大

+1

@Max,謝謝你的明確答覆和例。很有幫助! –