簡體   English   中英

插入符號中KNN的自定義參數調整

[英]Custom parameter tuning for KNN in caret

我有一個最接近的鄰居實現,可以讓我在一次通過預測中計算k的多個值以及訓練和測試數據的多個子集(例如,K折交叉驗證中的所有折數,AKA重采樣指標)。 我的實現還可以利用多個內核。

我想將我的方法與插入符號包接口。 我可以輕松地為火車功能構建自定義方法。 但這將導致多次調用模型擬合(每個參數和折疊組合一個)。

據我所知,我在使用trainControl時無法指出調整策略。 火車的代碼源提到了有關“ seq”模型擬合的內容:

## 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 線性回歸LOOCV技巧,但也適用於多個參數值),那么如何在插入符號中對其進行接口?

以下是在插入符號中設置(空)自定義模型的一些示例代碼:

# 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)

我想控制訓練過程,以便在單個調用中生成所有折疊和參數值的預測。

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

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

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

如果您想在發布之前給我發送一封電子郵件,請給我發送電子郵件(不過不保證)。

馬克斯

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM