小编mis*_*use的帖子

使用插入符号训练套索模型时不可用的列

我收到一个奇怪的错误

Error in `[.data.frame`(data, , lvls[1]) : undefined columns selected
Run Code Online (Sandbox Code Playgroud)

当我使用插入符号训练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"
)
Run Code Online (Sandbox Code Playgroud)

我无法找到任何明显错误的数据.没有NAs

table(is.na(training))

FALSE 
43166
Run Code Online (Sandbox Code Playgroud)

并且不明白为什么它会尝试在列数之外进行索引.

有什么建议?

r training-data glmnet r-caret

8
推荐指数
1
解决办法
162
查看次数

提取插入符号中glmnet模型的最佳调整参数的系数

我正在使用插入符号运行弹性净正则化glmnet

我将值序列传递给trainControlalpha和lambda,然后执行repeatedcv以获得alpha和lambda的最佳调整。

这是一个示例,其中alpha和lambda的最佳调整分别为0.7和0.5:

age     <- c(4, 8, 7, 12, 6, 9, 10, 14, 7, 6, 8, 11, 11, 6, 2, 10, 14, 7, 12, 6, 9, 10, 14, 7) 
gender  <-  make.names(as.factor(c(1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1)))
bmi_p   <- c(0.86, 0.45, 0.99, 0.84, 0.85, 0.67, 0.91, 0.29, 0.88, 0.83, 0.48, 0.99, 0.80, 0.85,
         0.50, 0.91, 0.29, …
Run Code Online (Sandbox Code Playgroud)

r machine-learning glmnet r-caret

5
推荐指数
1
解决办法
2594
查看次数

绘制自举插入符号模型的 ROC 曲线

我有一个如下所示的模型:

library(mlbench)
data(Sonar)

library(caret)
set.seed(998)

my_data <- Sonar

fitControl <-
  trainControl(
    method = "boot632",
    number = 10,
    classProbs = T,
    savePredictions = T,
    summaryFunction = twoClassSummary
  )


model <- train(
  Class ~ .,
  data = my_data,
  method = "xgbTree",
  trControl = fitControl,
  metric = "ROC"
)
Run Code Online (Sandbox Code Playgroud)

如何绘制此模型的 ROC 曲线?据我了解,必须保存概率(我在 trainControl 中所做的),但是由于引导用于生成“测试”集的随机抽样,我不确定 caret 如何计算 ROC 值以及如何生成曲线。

为了隔离最佳性能参数的类概率,我正在做:

for (a in 1:length(model$bestTune))       
{model$pred <-
        model$pred[model$pred[, paste(colnames(model$bestTune)[a])] == model$bestTune[1, a], ]}
Run Code Online (Sandbox Code Playgroud)

请指教。

谢谢!

r r-caret

5
推荐指数
1
解决办法
1969
查看次数

插入符号交叉验证中的预处理

我有一个关于数据预处理的问题需要澄清。据我了解,当我们通过交叉验证调整超参数并估计模型性能时,我们需要在交叉验证中进行,而不是预处理整个数据集。换句话说,在交叉验证中,我们对训练折叠进行预处理,然后使用相同的预处理参数来处理测试折叠并进行预测。

在下面的示例代码中,当我在 caret::train 中指定 preProcess 时,它会自动执行此操作吗?如果有人能澄清我这一点,我真的很感激。

从一些在线资源来看,有些人预处理整个数据集(训练集),然后使用预处理数据通过交叉验证来调整超参数,这似乎不对......

library(caret)
library(mlbench)
data(PimaIndiansDiabetes)

control <- trainControl(method="cv", 
                        number=5,
                        preProcOptions = list(pcaComp=4))
grid=expand.grid(mtry=c(1,2,3))

model <- train(diabetes~., data=PimaIndiansDiabetes, method="rf", 
               preProcess=c("scale", "center", "pca"), 
               trControl=control,
               tuneGrid=grid)
Run Code Online (Sandbox Code Playgroud)

r r-caret

5
推荐指数
1
解决办法
1337
查看次数

使用bit.names和bits.to.features参数makeFeatSelWrapper(mlr)对功能组执行包装器选择

我想通过使用mlr包的虹膜数据集上的包装器方法来执行特征选择,但是我想仅查看与Petal和/或Sepal相关联的特征组.因此,不是以不同的组合查看4个特征,而是包装程序将以不同的组合查看两组特征.

国土资源部文件指出这可以用两个参数来执行bit.namesbit.to.feature:

bit.names [character]编码解决方案的位的名称.还定义了编码中的总位数.默认情况下,这些是任务的功能名称.

bits.to.features [function(x,task)]将整数0-1向量转换为所选要素的字符向量的函数.默认情况下,第i位中的值为1会选择第i个要素作为候选解.

我在mlr教程或其他地方找不到这两个参数的使用示例.

我将使用提供的示例?mlr::selectFeatures.

首先对所有功能进行操作

library(mlr)
rdesc <- makeResampleDesc("Holdout")
ctrl <- makeFeatSelControlSequential(method = "sfs",
                                    maxit = NA)
res <- selectFeatures("classif.rpart",
                     iris.task,
                     rdesc,
                     control = ctrl)
analyzeFeatSelResult(res)
Run Code Online (Sandbox Code Playgroud)

这按预期工作

为了运行一组特征,我设计了一个0/1矩阵来将特征映射到组(我不确定这是否可行,它看似合乎逻辑):

mati <- rbind(
  c(0,0,1,1),
  c(1,1,0,0))

rownames(mati) <- c("Petal", "Sepal")
colnames(mati) <- getTaskFeatureNames(iris.task)
Run Code Online (Sandbox Code Playgroud)

矩阵看起来像:

      Sepal.Length Sepal.Width Petal.Length Petal.Width
Petal            0           0            1           1
Sepal            1           1            0           0
Run Code Online (Sandbox Code Playgroud)

现在我跑:

res <- selectFeatures("classif.rpart",
                     iris.task,
                     rdesc,
                     control = ctrl,
                     bit.names = c("Petal", "Sepal"),
                     bits.to.features = …
Run Code Online (Sandbox Code Playgroud)

r feature-selection mlr

5
推荐指数
1
解决办法
170
查看次数

使用测试数据进行统计测试

如果我使用两种带插入符号的方法(NN 和 KNN),然后我想提供显着性检验,我该如何进行 wilcoxon 检验。

我提供的数据样本如下

structure(list(Input = c(25, 193, 70, 40), Output = c(150, 98, 
        27, 60), Inquiry = c(75, 70, 0, 20), File = c(60, 36, 12, 12), 
        FPAdj = c(1, 1, 0.8, 1.15), RawFPcounts = c(1750, 1902, 535, 
        660), AdjFP = c(1750, 1902, 428, 759), Effort = c(102.4, 
        105.2, 11.1, 21.1)), row.names = c(NA, 4L), class = "data.frame")

    d=readARFF("albrecht.arff") 
    index <- createDataPartition(d$Effort, p = .70,list = FALSE)
    tr <- d[index, ]
    ts <- d[-index, ] 

    boot <- …
Run Code Online (Sandbox Code Playgroud)

r machine-learning r-caret pairwise.wilcox.test

3
推荐指数
1
解决办法
987
查看次数

使用预测概率的插入符包中的自定义性能函数

这篇 SO 文章是关于在包中使用自定义性能测量函数的caret。您想要找到最佳的预测模型,因此您构建了多个预测模型,并通过计算通过比较观察值和预测值得出的单个指标来比较它们。有默认函数来计算此指标,但您也可以定义自己的指标函数。此自定义函数必须将观测值和预测值作为输入。

在分类问题(假设只有两个类别)中,预测值是01。然而,我需要评估的也是模型中计算的概率。有什么办法可以实现这一点吗?

原因是,在某些应用程序中,您需要知道1预测的概率实际上是 99% 还是 51%,而不仅仅是预测是 1 还是 0。

有人可以帮忙吗?


编辑 好,让我尝试更好地解释一下。在 5.5.5(替代性能指标)下的包的文档中,caret有一个描述如何使用您自己的自定义性能函数,如下所示

fitControl <- trainControl(method = "repeatedcv",
                           number = 10,
                           repeats = 10,
                           ## Estimate class probabilities
                           classProbs = TRUE,
                           ## Evaluate performance using 
                           ## the following function
                           summaryFunction = twoClassSummary)
Run Code Online (Sandbox Code Playgroud)

twoClassSummary是本例中的自定义性能函数。此处提供的函数需要将带有obs和 的数据帧或矩阵作为输入pred。这就是要点 - 我想使用一个不采用观察和预测的函数,而是采用观察和预测的概率


还有一件事:

也欢迎其他软件包的解决方案。我唯一不寻找的是“这就是你编写自己的交叉验证函数的方式”。

r machine-learning r-caret

3
推荐指数
1
解决办法
1242
查看次数

rpart回归树解释

我在回归树上应用了 rpart.plot,但我不知道节点内的值指的是什么。以及如何选择根?非常感谢。您能解释一下每个节点内的值是什么吗?(图片显示了我的问题)

https://i.stack.imgur.com/tEofb.png

r machine-learning decision-tree rpart

1
推荐指数
1
解决办法
5750
查看次数