r - 使用插入符号训练套索模型时,列不可用
问题描述
我收到一个奇怪的错误
Error in `[.data.frame`(data, , lvls[1]) : undefined columns selected
当我使用插入符号训练 glmnet 模型时的消息。我对序数模型使用了基本相同的代码和相同的预测变量(只是使用了不同的因子y
)并且效果很好。计算需要 400 个核心小时,所以我不能在这里展示)。
#Source a small subset of data
source("https://gist.githubusercontent.com/FredrikKarlssonSpeech/ebd9fccf1de6789a3f529cafc496a90c/raw/efc130e41c7d01d972d1c69e59bf8f5f5fea58fa/voice.R")
trainIndex <- createDataPartition(notna$RC, p = .75,
list = FALSE,
times = 1)
training <- notna[ trainIndex[,1],] %>%
select(RC,FCoM_envel:ATrPS_freq,`Jitter->F0_abs_dif`:RPDE)
testing <- notna[-trainIndex[,1],] %>%
select(RC,FCoM_envel:ATrPS_freq,`Jitter->F0_abs_dif`:RPDE)
fitControl <- trainControl(## 10-fold CV
method = "CV",
number = 10,
allowParallel=TRUE,
savePredictions="final",
summaryFunction=twoClassSummary)
vtCVFit <- train(x=training[-1],y=training[,"RC"],
method = "glmnet",
trControl = fitControl,
preProcess=c("center", "scale"),
metric="Kappa"
)
我找不到任何明显的数据错误。无 NA
table(is.na(training))
FALSE
43166
并且不明白为什么它会尝试在列数之外建立索引。
有什么建议么?
解决方案
您必须在 trainControl() 中删除 summaryFunction=twoClassSummary。这个对我有用。
fitControl <- trainControl(## 10-fold CV
method = "CV",
number = 10,
allowParallel=TRUE,
savePredictions="final")
vtCVFit <- train(x=training[-1],y=training[,"RC"],
method = "glmnet",
trControl = fitControl,
preProcess=c("center", "scale"),
metric="Kappa")
print(vtCVFit)
#glmnet
#113 samples
#381 predictors
# 2 classes: 'NVT', 'VT'
#Pre-processing: centered (381), scaled (381)
#Resampling: Bootstrapped (25 reps)
#Summary of sample sizes: 113, 113, 113, 113, 113, 113, ...
#Resampling results across tuning parameters:
# alpha lambda Accuracy Kappa
# 0.10 0.01113752 0.5778182 0.1428393
# 0.10 0.03521993 0.5778182 0.1428393
# 0.10 0.11137520 0.5778182 0.1428393
# 0.55 0.01113752 0.5778182 0.1428393
# 0.55 0.03521993 0.5748248 0.1407333
# 0.55 0.11137520 0.5749980 0.1136131
# 1.00 0.01113752 0.5815391 0.1531280
# 1.00 0.03521993 0.5800217 0.1361240
# 1.00 0.11137520 0.5939621 0.1158007
#Kappa was used to select the optimal model using the largest value.
#The final values used for the model were alpha = 1 and lambda = 0.01113752.
推荐阅读
- google-maps - 在谷歌地图中获取图标位置的纬度和经度
- python - 如何使用 Twisted 嗅探网络接口?
- php - 按属性集 ID 过滤类别产品
- reactjs - Aframe-react 如何注册和使用自定义组件?
- ruby-on-rails - 从购物车中删除物品时,Ruby on Rails 会引发错误
- python - 如何使递归函数坚持它的用途?
- visual-studio - dotnet 核心项目未在 docker 中运行
- python - Bokeh Chord 图表中的分组和标签 0.13
- json - Dart 从 base64 转换整个 json 树
- php - 在 Woocommerce 上的产品中设置产品类别术语