Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:glmnet的插入符号::训练功能能否在固定的alpha和lambda交叉验证AUC?_R_Logistic Regression_Cross Validation_R Caret_Roc - Fatal编程技术网

R:glmnet的插入符号::训练功能能否在固定的alpha和lambda交叉验证AUC?

R:glmnet的插入符号::训练功能能否在固定的alpha和lambda交叉验证AUC?,r,logistic-regression,cross-validation,r-caret,roc,R,Logistic Regression,Cross Validation,R Caret,Roc,我想使用caret::train 解释如何使用插入符号::train交叉验证alpha和lambda 我关于交叉验证的问题结束了,因为它已被归类为编程问题: 我拥有的 数据集: library(tidyverse) library(caret) library(glmnet) library(mlbench) # example data data(PimaIndiansDiabetes, package="mlbench") # make a training set

我想使用
caret::train

解释如何使用插入符号::train交叉验证alpha和lambda

我关于交叉验证的问题结束了,因为它已被归类为编程问题:

我拥有的

数据集:

library(tidyverse)
library(caret)
library(glmnet)
library(mlbench)

# example data
data(PimaIndiansDiabetes, package="mlbench")

# make a training set
set.seed(2323)
train.data <- PimaIndiansDiabetes
如果忽略该错误,则最好的alpha和lambda为:

model$bestTune
   alpha      lambda
11   0.2 0.002926378
现在,我想使用我的模型和最好的alpha和lambda以及列车数据得到10倍交叉验证AUC

我尝试的

我的方法是这样的,但是,我得到了一个错误:
出了问题;缺少所有精度度量值:

model <- train(
  diabetes ~., data = train.data, method = "glmnet",
  trControl = trainControl("cv",
                           number = 10,
                           classProbs = TRUE,
                           savePredictions = TRUE),
  alpha=model$bestTune$alpha,
  lambda=model$bestTune$lambda,
  tuneLength = 10,
  metric="ROC"
)
model您打算使用ROC曲线下的“ROC”-区域来选择最佳调谐参数,但您没有指定哪个参数包含此指标。这就是警告
通知你

Warning message:
In train.default(x, y, weights = w, ...) :
  The metric "ROC" was not in the result set. Accuracy will be used instead.
执行转向:

library(tidyverse)
library(caret)
library(glmnet)
library(mlbench)

data(PimaIndiansDiabetes, package="mlbench")

set.seed(2323)
train.data <- PimaIndiansDiabetes

set.seed(2323)
model <- train(
  diabetes ~., data = train.data, method = "glmnet",
  trControl = trainControl("cv",
                           number = 10,
                           classProbs = TRUE,
                           savePredictions = TRUE,
                           summaryFunction = twoClassSummary),
  tuneLength = 10,
  metric="ROC" #ROC metric is in twoClassSummary
)
这将为您提供每折叠度量。以获得平均性能

model$pred %>%
  filter(alpha == model$bestTune$alpha,
         lambda == model$bestTune$lambda) %>%
  group_by(Resample) %>%
  summarise(acc = sum(pred == obs)/n()) %>%
  pull(acc) %>%
  mean
#output
0.769566
当ROC用作选择度量时,超参数将在所有决策阈值上进行优化。在许多情况下,所选模型将使用默认决策阈值0.5执行次优

插入符号有一个功能

它将根据指定决策阈值上的重采样数据计算许多度量

thresholder(model, seq(0, 1, length.out = 10)) #in reality I would use length.out = 100
#输出

现在,根据您想要的度量选择一个阈值并使用它。通常是用于不平衡数据的度量,或。在这件事上我有一个像样的解释

请注意,由于该数据用于寻找最佳阈值,因此通过这种方式获得的性能将有乐观偏差。为了评估所选决策阈值的性能,最好使用几个独立的测试集。换句话说,我建议使用嵌套重采样,使用内部折叠优化参数和阈值,并对外部折叠进行评估

关于如何使用带插入符号的嵌套重采样和回归。需要进行一些修改,以使其与具有优化阈值的分类一起工作


请注意,这不是选择最佳决策阈值的唯一方法。另一种方法是预先选择所需的度量(例如MCC),并将决策阈值视为超参数,该超参数将与所有其他超参数一起调整。我相信在创建自定义模型时,插入符号不支持这一点。

如果从最后一段代码中删除
tuneLength=10
部分,会发生什么情况?谢谢。如果我删除了它,我会收到警告消息:
1:In train.default(x,y,weights=w,…):结果集中没有度量“ROC”。将使用准确度代替。2:Fold01的模型拟合失败:alpha=0.10,lambda=0.04967(函数(x,y,family=c(“高斯”、“二项”、“泊松”),:形式参数“alpha”与多个实际参数匹配,而不是tuneLength,set
tuneGrid=data.frame(alpha=model$bestTune$alpha,lambda=model$tune$bestTune$lambda)
。但是这不是必需的,因为这些参数的AUC已经包含在您优化alpha和lambda的第一次调用中-请参见
model$results
。谢谢。我误解了。我没有意识到,如果我优化alpha和lambda,并且使用固定alpha和lambda交叉验证,我实际上会得到相同的结果。最后一个问题,我刚刚意识到,我选择最佳模型的依据是准确度,而不是我实际想要的ROC。我能以某种方式解决这个问题吗?谢谢你的回答。我有一些问题:你提出的调整没有选择模型参数(alpha和lambda)这给出了最高的AUC,对吗?这有可能吗?如果有,我可以只计算每倍的AUC(就像你为acc做的那样)将平均值作为交叉验证的AUC,对吗?我建议的调整会选择产生最高AUC的alpha和lambda。如果您计算每倍的AUC并对其进行平均,您将得到与返回的train对象中插入符号相同的结果。再次感谢您的回答。不幸的是,我仍在与嵌套的AUC进行斗争重采样。如果你有时间看看我的,我会非常感谢!
model$pred %>%
  filter(alpha == model$bestTune$alpha,   #filter predictions for best tuning parameters
         lambda == model$bestTune$lambda) %>%
  group_by(Resample) %>% #group by fold
  summarise(acc = sum(pred == obs)/n()) #calculate metric
#output
`summarise()` ungrouping output (override with `.groups` argument)
# A tibble: 10 x 2
   Resample   acc
   <chr>    <dbl>
 1 Fold01   0.740
 2 Fold02   0.753
 3 Fold03   0.818
 4 Fold04   0.776
 5 Fold05   0.779
 6 Fold06   0.753
 7 Fold07   0.766
 8 Fold08   0.792
 9 Fold09   0.727
10 Fold10   0.789
model$pred %>%
  filter(alpha == model$bestTune$alpha,
         lambda == model$bestTune$lambda) %>%
  group_by(Resample) %>%
  summarise(acc = sum(pred == obs)/n()) %>%
  pull(acc) %>%
  mean
#output
0.769566
thresholder(model, seq(0, 1, length.out = 10)) #in reality I would use length.out = 100
alpha     lambda prob_threshold Sensitivity Specificity Pos Pred Value Neg Pred Value Precision Recall        F1 Prevalence Detection Rate Detection Prevalence Balanced Accuracy  Accuracy
1    0.1 0.03607775      0.0000000       1.000  0.00000000      0.6510595            NaN 0.6510595  1.000 0.7886514  0.6510595      0.6510595            1.0000000         0.5000000 0.6510595
2    0.1 0.03607775      0.1111111       0.994  0.02621083      0.6557464      0.7380952 0.6557464  0.994 0.7901580  0.6510595      0.6471463            0.9869617         0.5101054 0.6562714
3    0.1 0.03607775      0.2222222       0.986  0.15270655      0.6850874      0.8711111 0.6850874  0.986 0.8082906  0.6510595      0.6419344            0.9375256         0.5693533 0.6952837
4    0.1 0.03607775      0.3333333       0.964  0.32421652      0.7278778      0.8406807 0.7278778  0.964 0.8290127  0.6510595      0.6276316            0.8633459         0.6441083 0.7408578
5    0.1 0.03607775      0.4444444       0.928  0.47364672      0.7674158      0.7903159 0.7674158  0.928 0.8395895  0.6510595      0.6041866            0.7877990         0.7008234 0.7695147
6    0.1 0.03607775      0.5555556       0.862  0.59002849      0.7970454      0.7053968 0.7970454  0.862 0.8274687  0.6510595      0.5611928            0.7043575         0.7260142 0.7669686
7    0.1 0.03607775      0.6666667       0.742  0.75740741      0.8521972      0.6114289 0.8521972  0.742 0.7926993  0.6510595      0.4830827            0.5677204         0.7497037 0.7473855
8    0.1 0.03607775      0.7777778       0.536  0.90284900      0.9156149      0.5113452 0.9156149  0.536 0.6739140  0.6510595      0.3489918            0.3828606         0.7194245 0.6640636
9    0.1 0.03607775      0.8888889       0.198  0.98119658      0.9573810      0.3967404 0.9573810  0.198 0.3231917  0.6510595      0.1289474            0.1354751         0.5895983 0.4713602
10   0.1 0.03607775      1.0000000       0.000  1.00000000            NaN      0.3489405       NaN  0.000       NaN  0.6510595      0.0000000            0.0000000         0.5000000 0.3489405
       Kappa          J      Dist
1  0.0000000 0.00000000 1.0000000
2  0.0258717 0.02021083 0.9738516
3  0.1699809 0.13870655 0.8475624
4  0.3337322 0.28821652 0.6774055
5  0.4417759 0.40164672 0.5329805
6  0.4692998 0.45202849 0.4363768
7  0.4727251 0.49940741 0.3580090
8  0.3726156 0.43884900 0.4785352
9  0.1342372 0.17919658 0.8026597
10 0.0000000 0.00000000 1.0000000