R(插入符号)-在循环中训练“mlpML”模型时出错

Posted

技术标签:

【中文标题】R(插入符号)-在循环中训练“mlpML”模型时出错【英文标题】:R (Caret) - Error while training "mlpML" model in loop 【发布时间】:2018-08-30 20:34:18 【问题描述】:

我正在使用 R 中的 Caret 包来训练多层感知器 (mlpML) 模型。

我正在尝试做的是前向特征消除技术,看看 mlpML 模型如何针对不同数量的特征执行。

这就是我在循环中训练 mlpML 模型的原因,其中每次迭代都会添加一个新特征并将其馈送到模型中。

这是我得到的错误 -

Error: Please use column names for `x`

这是我的代码 -

ig_features <- c("F1", "F2", "F3", "F4", "F5")

library(caret)

x_features <- c()

for (i in ig_features) 

  x_features <- c(x_features, i)
  y_features <- c("Status")

  #------------------------------------------ Building Model ---------------------------------------------------
  set.seed(1234)

  mlp_grid = expand.grid(layer1 = 10,
                         layer2 = 10,
                         layer3 = 10)

  mlp_fit = caret::train(x = TRAIN[,x_features], 
                         y = TRAIN[,y_features],
                         method = "mlpML",
                         preProc =  c('center', 'scale', 'knnImpute', 'pca'),
                         trControl = trainControl(method = "cv", verboseIter = TRUE, returnData = FALSE),
                         tuneGrid = mlp_grid)

  #------------------------------------------ Prediction & Evaluation -----------------------------------------
  predictions <- predict(mlp_fit, newdata=TEST[,x_features])

  cat("Accuracy:",confusionMatrix(predictions, 
                                  PARKINSON_TRAIN$Status, 
                                  dnn = c("Prediction", "Actual"), 
                                  positive="1")$overall[[1]],"\n")

【问题讨论】:

【参考方案1】:

您缺少x 的列名,在本例中为TRAIN[,x_features]。请参阅?caret::train 文档,其中指出:

x: 对于默认方法,x 是一个对象,其中样本在行中,并且 功能在列中。这可以是一个简单的矩阵、数据框或 其他类型(例如稀疏矩阵)但必须有列名(参见 详情如下)。

【讨论】:

以上是关于R(插入符号)-在循环中训练“mlpML”模型时出错的主要内容,如果未能解决你的问题,请参考以下文章

提高插入符号 (R) 中的模型训练速度

在 R 的插入符号训练函数中使用“ROC”度量的问题

R 插入符号保留样本和测试集 ROC

在插入符号交叉验证期间计算模型校准?

在 R 中使用插入符号调整朴素贝叶斯分类器

按组在插入符号中训练时间序列模型