R(Caret) - 训练时出错" mlpML"循环模型

时间:2018-03-21 16:01:27

标签: r machine-learning neural-network r-caret

我使用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 个答案:

答案 0 :(得分:1)

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

  

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