2013-11-04 32 views
2

我有一個k最近鄰居的實現,讓我計算一個單一的預測k值的多個值和多個子集的訓練和測試數據(例如所有摺疊K摺疊十字驗證,AKA重採樣指標)。我的實現也可以利用多個核心。在插入符號KNN的自定義參數調整

我想將我的方法與脫字符包一起使用。我可以輕鬆地爲列車功能建立自定義方法。但是這會導致對模型擬合的多次調用(每個參數和摺疊組合都有一個調用)。

據我所知,使用trainControl時我無法指出調整策略。火車的源代碼提一些有關「序列」模型擬合:

## There are two types of methods to build the models: "basic" means that each tuning parameter 
## combination requires it's own model fit and "seq" where a single model fit can be used to 
## get predictions for multiple tuning parameters. 

但我無法看到實際使用自定義模式的任何方式。

任何有關如何解決這個問題的線索?更一般地,假設您有一個模型類,您可以使用單個模型擬合(例如ala Linear Regression LOOCV Trick,但對於多個參數值)來估計跨多個參數的預測誤差,您將如何將它與插入符號進行對接?

下面是一些例子代碼來設置在插入符的(空)自定義模型:

# Custom caret 
library(caret) 
learning_data = data.frame(y=sample(c("one","two","three"),200,replace=T)) 
learning_data = cbind(learning_data,matrix(runif(3*200),ncol=3)) 
testRatio=0.75 
inTrain <- createDataPartition(learning_data$y, p = testRatio, list = FALSE) 
trainExpr <- learning_data[inTrain,] 
testExpr <- learning_data[-inTrain,] 

trainClass <- trainExpr$y 
testClass <- testExpr$y 

trainExpr$y<-NULL 
testExpr$y<-NULL 
cv_opts = trainControl(method="cv", number=4,verboseIter=T) 

my_knn <- function(data,weight,parameter,levels,last,...){ 
     print("training") 
     # print(dim(data)) 
     # str(parameter) 
     # list(fit=rdist(data$,data)) 
     list(fit=NA) 
} 
my_knn_pred <- function(object,newdata){ 
    print("testing") 
    # str(object) 
    # print(dim(newdata)) 
    return("one") 
} 

sortFunc <- function(x) x[order(x$k),] 
# Values of K to test 
knn_opts = data.frame(.k=c(seq(7,11, 2))) #odd to avoid ties 
custom_tr = trainControl(method="cv", number=4,verboseIter=T, custom=list(parameters=knn_opts,model=my_knn,prediction=my_knn_pred,probability=NULL,sort=sortFunc)) 

# This will result in 12 calls, 6 to my_knn, 6 to my_knn_pred, one per combination of fold and parameter value 
custom_knn_performances <- train(x = trainExpr, y = trainClass,method = "custom",trControl=custom_tr,tuneGrid=knn_opts) 

我想控制培訓程序,以產生一個單一的呼籲,所有的摺疊和參數值預測。

回答

2

train的當前自定義模型擬合部分不允許使用順序參數。

下一個版本將會發布。所有特定的型號代碼將不再是硬編碼的,並且將被模塊化(包括順序參數)。

這項工作大約完成了80%,我希望在年底前完成。我想在這個版本上做很多測試。

如果您想在發佈前發送郵件,請發郵件給我(不保證)。

最大值

+0

Thanks Max!我一定會與您聯繫,試試看。 – massyah

相關問題