Ach*_*oud 2 r classification machine-learning calibration r-caret
第一次在这里发布海报,为新秀错误道歉
我使用R中的插入包进行分类.我在训练集上使用重复的10倍交叉验证来拟合一些模型(GBM,线性SVM,NB,LDA).使用自定义trainControl,插入符号甚至可以为我提供一系列模型性能指标,如ROC,Spec/sens,Kappa,测试折叠的准确度.真的很棒.我希望还有一个指标:模型校准的一些衡量标准.
我注意到插入符号中有一个功能可以创建校准图来估计数据部分模型的一致性.在交叉验证的模型构建过程中,是否可以为每个测试折叠计算插入符号?或者它只能应用于我们正在进行预测的一些新的数据吗?
对于某些情况,目前我有这样的事情:
fitControl <- trainControl(method = "repeatedcv", repeats=2, number = 10, classProbs = TRUE, summaryFunction = custom.summary)
gbmGrid <- expand.grid(.interaction.depth = c(1,2,3),.n.trees = seq(100,800,by=100),.shrinkage = c(0.01))
gbmModel <- train(y= train_target, x = data.frame(t_train_predictors),
method = "gbm",
trControl = fitControl,
tuneGrid = gbmGrid,
verbose = FALSE)
Run Code Online (Sandbox Code Playgroud)
如果它有帮助,我使用~25个数字预测器,N = 2,200,预测一个两级因子.
非常感谢您的任何帮助/建议.亚当
该calibration函数接受您提供的任何数据.您可以从train子对象获取重新采样的值pred:
> set.seed(1)
> dat <- twoClassSim(2000)
>
> set.seed(2)
> mod <- train(Class ~ ., data = dat,
+ method = "lda",
+ trControl = trainControl(savePredictions = TRUE,
+ classProbs = TRUE))
>
> str(mod$pred)
'data.frame': 18413 obs. of 7 variables:
$ pred : Factor w/ 2 levels "Class1","Class2": 1 2 2 1 1 2 1 1 2 1 ...
$ obs : Factor w/ 2 levels "Class1","Class2": 1 2 2 1 1 2 1 1 2 2 ...
$ Class1 : num 0.631 0.018 0.138 0.686 0.926 ...
$ Class2 : num 0.369 0.982 0.8616 0.3139 0.0744 ...
$ rowIndex : int 1 3 4 10 12 13 18 22 25 27 ...
$ parameter: Factor w/ 1 level "none": 1 1 1 1 1 1 1 1 1 1 ...
$ Resample : chr "Resample01" "Resample01" "Resample01" "Resample01" ...
Run Code Online (Sandbox Code Playgroud)
然后你可以使用:
> cal <- calibration(obs ~ Class1, data = mod$pred)
> xyplot(cal)
Run Code Online (Sandbox Code Playgroud)
请记住,使用许多重新采样方法,单个训练集实例将被多次保留:
> table(table(mod$pred$rowIndex))
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
2 11 30 77 135 209 332 314 307 231 185 93 48 16 6 4
Run Code Online (Sandbox Code Playgroud)
rowIndex如果你愿意,你可以平均每个类的概率.
马克斯