r - 插入符号中 KNN 的自定义参数调整

标签 r knn r-caret

我有一个 k 最近邻实现,可以让我在一次传递中计算 k 的多个值以及训练和测试数据的多个子集(例如 K 折交叉验证中的所有折叠,又名重采样指标)。我的实现还可以利用多个核心。

我想将我的方法与插入符包一起使用。我可以轻松地为火车功能构建自定义方法。但这将导致多次调用模型拟合(每个参数和折叠组合调用一次)。

据我所知,我无法在使用trainControl时指示调整策略。 train 的代码源提到了一些关于“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 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)

我想控制训练过程,以便在一次调用中生成所有折叠和参数值的预测。

最佳答案

train 当前的自定义模型拟合部分不允许使用顺序参数。

下一个版本将会。所有特定模型代码将不再是硬编码,并将被模块化(包括顺序参数)。

工作已完成约 80%,我希望能在年底前完成。我想对此版本进行大量测试。

如果您想在发布之前试用它,请给我发一封电子邮件(尽管没有保证)。

最大

关于r - 插入符号中 KNN 的自定义参数调整,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19767528/

相关文章:

python - 使用 TF-IDF 分数进行文本分类的 KNN

r - 线性 SVM 和提取权重

r - 更改 r 中 Axis 文本的大小

r Shiny : highlight some cells

r - 在 dplyr 包中使用 summarise 和 across ,同时区分数字列和非数字列

R:将描述性列和相关值组合成矩阵形式

matlab - 如何在不使用内置函数的情况下预测 KNN 分类器

python - 带有opencv 3.0的cv2中的KNN train()

r - 为什么在包含 Rmarkdown 文件时,Shiny 应用程序布局会发生变化?

R插入符火车glmnet最终模型lambda值不符合指定