我希望这不是一个天真的问题。
我在R中的caret
包中执行了一系列具有不同模型的二项式回归。到目前为止,除了地球(MARS)之外,所有这些都是有效的。通常,earth
系列会通过glm
函数earth
传递给glm=list(family=binomial)
函数。这似乎工作正常(如下所示)。对于常规predict()
函数,我会使用type="response'
来正确地缩放预测。以下示例显示了fit1
中的非插入符方法以及pred1
中的正确预测。 pred1a
是没有type='response'
的不正确缩放预测。 fit2
是caret
的方法,pred2
是预测;它与pred1a
中的非缩放预测相同。挖掘fit2
对象,glm.list
组件中存在正确拟合的值。因此,earth()
函数的行为应该如此。
问题是......因为caret
prediction()
函数只需要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
答案 0 :(得分:8)
有一些事情:
mtcars$am
)是数字0/1,train
会将此视为回归模型train
将采用分类并自动添加glm=list(family=binomial)
train
,您需要为模型添加classProbs = TRUE
以生成类概率。以下是trainControl
包中不同数据集的示例:
earth
然后:
library(earth)
library(caret)
data(etitanic)
a1 <- earth(survived ~ .,
data = etitanic,
glm=list(family=binomial),
degree = 2,
nprune = 5)
etitanic$survived <- factor(ifelse(etitanic$survived == 1, "yes", "no"),
levels = c("yes", "no"))
a2 <- train(survived ~ .,
data = etitanic,
method = "earth",
tuneGrid = data.frame(degree = 2, nprune = 5),
trControl = trainControl(method = "none",
classProbs = TRUE))
最高