当使用 caret 的 train 函数拟合 GBM 分类模型时,函数 predictionFunction 基于 0.5 的概率阈值将概率预测转换为因子。
out <- ifelse(gbmProb >= .5, modelFit$obsLevels[1], modelFit$obsLevels[2])
## to correspond to gbmClasses definition above
Run Code Online (Sandbox Code Playgroud)
如果用户试图最大化 ROC 曲线下的面积 (AUROC),这种转换似乎为时过早。虽然敏感性和特异性对应于单个概率阈值(因此需要因子预测),但我更喜欢使用 gbmPredict 的原始概率输出来计算 AUROC。根据我的经验,我很少关心分类模型的校准;我想要信息量最大的模型,无论模型预测“1”与“0”的概率阈值如何。是否可以将原始概率强制用于 AUROC 计算?这看起来很棘手,因为无论使用什么汇总函数都会传递已经是二进制的预测。
假设我有一个数据集,我想使用逻辑回归进行 4 折交叉验证。所以会有4种不同的模型。在 R 中,我执行了以下操作:
ctrl <- trainControl(method = "repeatedcv", number = 4, savePredictions = TRUE)
mod_fit <- train(outcome ~., data=data1, method = "glm", family="binomial", trControl = ctrl)
Run Code Online (Sandbox Code Playgroud)
我认为 mod_fit 应该包含 4 个单独的系数集?当我输入时, modfit$finalModel$ 我只会得到相同的一组系数。
将df在训练和测试dataframes分裂。训练数据帧分为训练数据帧和测试数据帧。因变量Y是二进制(因子),值为 0 和 1。我试图用这个代码(神经网络,插入符号包)预测概率:
library(caret)
model_nn <- train(
Y ~ ., training,
method = "nnet",
metric="ROC",
trControl = trainControl(
method = "cv", number = 10,
verboseIter = TRUE,
classProbs=TRUE
)
)
model_nn_v2 <- model_nn
nnprediction <- predict(model_nn, testing, type="prob")
cmnn <-confusionMatrix(nnprediction,testing$Y)
print(cmnn) # The confusion matrix is to assess/compare the model
Run Code Online (Sandbox Code Playgroud)
但是,它给了我这个错误:
Error: At least one of the class levels is not a valid R variable name;
This will cause errors when class probabilities are generated …Run Code Online (Sandbox Code Playgroud) 我在R中使用了leaps包来执行前向和后向特征消除。但是,我希望自动化交叉验证和预测操作。因此,如何在插入符号中使用向前/向后选择?
在跳跃包中你可以这样做
forward <- regsubsets(x ~ ., data, nvmax = 20,
method = "forward")
Run Code Online (Sandbox Code Playgroud)