【问题标题】:Preprocess from caret package从 caret 包预处理
【发布时间】:2017-08-11 06:08:07
【问题描述】:

我为贵宾犬或炸鸡的每张灰度图像提供了 5000 个 SIFT 特征,并要求我建立一个分类模型。

我在 sift 特征矩阵上运行了 preProcess 函数:

mat1=preProcess(mat, method=c("pca", "zv"))

我得到的是一个“预处理”的类,我不知道如何在下面的函数调用中使用这个对象mat1

model_gbm <- train(ensembleData[,predictors], ensembleData[,labelName], method='gbm',  trControl=myControl)

ensembleData[, predictors] 用于包含筛选特征的特征部分,而 ensembleData[, labelName] 包含数据的实际类别(0 或 1)。

我曾考虑在train 函数内部使用preProcess 函数,但我希望能够在其他模型的其他地方使用相同的预处理数据。

谢谢!

【问题讨论】:

  • 但我希望能够在其他模型的其他地方使用相同的预处理数据。 不。在其他任何地方使用dog/chicken 分类器的想法是bad idea.
  • @ElliottFrisch 对不起,我的意思是说,我想在相同的数据上尝试不同的分类器,并可能使用集成学习。但是在链接上大声笑。
  • 哦,那么SparkR。而且,这是一项艰巨的任务。还有good luck.

标签: r machine-learning classification


【解决方案1】:

根据caret documentation

函数 preProcess 估计每个操作所需的参数,predict.preProcess 用于将它们应用于特定数据集

因此,您需要将估计的参数应用于您的数据,如下所示:

mat1=preProcess(mat, method=c("pca", "zv"))
transformed = predict(mat1, mat)
model_gbm <- train(data=transformed, method='gbm',  trControl=myControl)

【讨论】:

  • 感谢您的解决方案。但是,我还有另一个问题。我曾经将 mat 中的数据分成两部分以进行交叉验证。现在,mat1 变成了一个 Large preProcess,我不知道如何拆分数据并将拆分后的数据用于以下函数:p_gbm = predict(object=model_gbm, testingData[,predictors]),其中testingData[, predictors]) 包含不在训练集中的数据部分。
  • 为什么不先拆分数据?所以这不是问题。
猜你喜欢
  • 2020-10-25
  • 2017-01-21
  • 1970-01-01
  • 2018-10-24
  • 2015-06-03
  • 1970-01-01
  • 2019-06-22
  • 2014-06-03
  • 2016-08-14
相关资源
最近更新 更多