R插入符号:最大限度地提高手动定义的训练(分类)正类的灵敏度,

Boe*_*ern 8 r r-caret

精简版:

有没有办法指导插入符号训练回归模型

  1. 使用用户定义的标签作为"正类标签"?
  2. 在训练期间(而不是ROC)优化模型的灵敏度?

长版:

我有一个数据帧

> feature1 <-                 c(1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0)
> feature2 <-                 c(1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1)
> feature3 <-                 c(0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0)
> TARGET <- factor(make.names(c(1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,1,0,1,1)))
> df <- data.frame(feature1, feature2, feature3, TARGET)
Run Code Online (Sandbox Code Playgroud)

模型训练就像实施一样

> ctrl <- trainControl(
+     method="repeatedcv",
+     repeats = 2)
> 
> tuneGrid <- expand.grid(k = c(2,5,7))
> 
> tune <- train(
+     TARGET ~ .,
+     metric = '???',
+     maximize = TRUE,
+     data = df,
+     method = "knn", 
+     trControl = ctrl, 
+     preProcess = c("center","scale"), 
+     tuneGrid = tuneGrid
+ )
> sclasses <- predict(tune, newdata = df)
> df$PREDICTION <- make.names(factor(sclasses), unique = FALSE, allow_ = TRUE)
Run Code Online (Sandbox Code Playgroud)

我想最大化 sensitivity = precision = A / ( A + C )

在此输入图像描述

Event(在图像中)应该在我的情况下X1 = action taken.但插入符号使用 X0 = no action taken.

我可以使用positive像这样的参数为我的混淆矩阵设置正类

> confusionMatrix(df$PREDICTION, df$TARGET, positive = "X1")
Run Code Online (Sandbox Code Playgroud)

但有没有办法在训练时设置这个(最大化灵敏度)?

我已经检查过是否有其他指标适合我的需要,但我无法在文档中找到一个.我必须实现自己summaryFunctiontrainControl吗?

谢谢!

Bar*_*VdW 11

据我所知,在训练中没有直接的方法来指明这一点(我现在一直在寻找这个问题).但是,我找到了一种解决方法:您只需重新排序数据框中目标变量的级别.由于训练算法默认将第一个遇到的级别作为正类,这可以解决您的问题.只需添加这一简单的代码行即可:

TARGET <- factor(make.names(c(1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,1,0,1,1)))
TARGET <- relevel(TARGET, "X1")
Run Code Online (Sandbox Code Playgroud)