如何在插入符号train()中仅对某些变量应用预处理?

时间:2016-11-09 11:32:02

标签: r r-caret

我想在列车功能中使用插入符号的超级方便的预处理方式,以便为后面的预测提供相同的操作。但是,我想将预处理仅应用于某些数字列。我怎么指定这个?我可以以某种方式使用trainControl中的preProcOptions参数吗?

如果我使用普通的preProcess对象,我可以这样做:

preObj <- preProcess(training[,"SomeCol"], method=c("scale"))
preData <- predict(preObj, training[,"SomeCol"]) 

但我不知道如何用train()和trainControl()实现相同的目标:

ctrl <- trainControl(method="repeatedcv",repeats = 1, preProcOptions = list(x=x[,"SomeCol"]))
fit <- train(y ~ ., data = training, method = "rf", trControl = ctrl, preProcess=c("scale"))

1 个答案:

答案 0 :(得分:2)

我毫不犹豫地提到这一点,但是有一个无证件没有经过充分测试的方式,你可以这样做

> pp <- preProcess(iris, method = list(center = "Petal.Width", scale = names(iris)[1:2]))
> pp
Created from 150 samples and 4 variables

Pre-processing:
  - centered (1)
  - ignored (1)
  - scaled (2)

> predict(pp, head(iris))
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1     6.158928    8.029986          1.4  -0.9993333  setosa
2     5.917402    6.882845          1.4  -0.9993333  setosa
3     5.675875    7.341701          1.3  -0.9993333  setosa
4     5.555112    7.112273          1.5  -0.9993333  setosa
5     6.038165    8.259414          1.4  -0.9993333  setosa
6     6.521218    8.947698          1.7  -0.7993333  setosa
> head(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa

我尚未测试所有方法组合的边缘情况,因此如果您选择使用此方法,请进行一些测试。