2016-11-09 51 views
1

我想在火車功能中使用插入符號的超便捷方式進行預處理,以便爲以後的預測提供相同的操作。但是,我想僅將預處理應用於數字列的某些。我怎樣才能指定這個?我可以以某種方式使用trainControl中的preProcOptions參數嗎?如何將預處理應用於插入符號train()僅適用於某些變量?

如果我使用普通的預處理對象我可以這樣做:

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

但我不知道我怎麼能實現與列車()和trainControl()一樣:

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

回答

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 

我沒有測試過所有的方法組合的邊緣情況呢,所以請做一些測試,如果你選擇使用此。

+2

當我想在模型訓練之前應用此預處理一次時,此方法正常工作。然而,我想要有相同的預處理可用於生產中模型的任何後期預測(即新的數據行 - >負載訓練模型 - >應用與模型訓練相同的預處理 - >預測Y)。因此,我需要將它整合到caret :: train()中。我試過火車(...,preProcess =列表(規模=「Petal.Width」)),但它不工作在這裏 – Malte

+0

@Malte我有同樣的問題..你有沒有找到一個解決方案? –

相關問題