R knn 变量选择

机器算法验证 r 特征选择 k-最近邻 插入符号
2022-03-28 23:28:29

我有一个 200k 行 X 50 列的数据集。我正在尝试在其上使用knn模型,但性能存在巨大差异,具体取决于使用的变量(即,rsqd范围从 0.01(使用所有变量)到 0.98(仅使用 5 个变量))。

这种复合我的问题,因为现在我需要确定k 使用哪些变量。

R 中是否有一个包可以帮助knn在调整时为模型选择变量k我已经看过了rfe()caret但它似乎只是为线性回归randomforest、、朴素贝叶斯等而构建的,但没有knn

顺便说一句,我尝试手动构建一个循环来使用插入符号训练函数,如下所示:

for(i in 2:50){
knnFit <- train(x[,i],y,...) ## trains model using single variable
}

我的问题是knnFit$results打印所有结果并且knnFit$bestTune只打印k.

> data1 <- data.frame(col1=runif(20), col2=runif(20), col3=runif(20), col4=runif(20), col5=runif(20))
> bootControl <- trainControl(number = 1)
> knnGrid <- expand.grid(.k=c(2:5))
> set.seed(2)
> knnFit1 <- train(data1[,-c(1)], data1[,1]
+ , method = "knn", trControl = bootControl, verbose = FALSE,
+ tuneGrid = knnGrid )
> knnFit1 
20 samples
 4 predictors

No pre-processing
Resampling: Bootstrap (1 reps) 

Summary of sample sizes: 20 

Resampling results across tuning parameters:

  k  RMSE   Rsquared
  2  0.485  0.124   
  3  0.54   0.369   
  4  0.52   0.241   
  5  0.528  0.232   

RMSE was used to select the optimal model using  the smallest value.
The final value used for the model was k = 2. 

> knnFit1$results
      k      RMSE  Rsquared RMSESD RsquaredSD
    1 2 0.4845428 0.1241031     NA         NA
    2 3 0.5401009 0.3690569     NA         NA
    3 4 0.5197262 0.2410814     NA         NA
    4 5 0.5277939 0.2317607     NA         NA

> knnFit1$bestTune
      .k
    1  2

我需要一些方法来打印最佳单一性能模型的 RMSE/rsqd/其他指标(即,只是“R-Squared: .91”)。

有什么建议么?

1个回答

knnFit1$results 实际上是一个 data.frame,因此您可以使用以下命令打印所有 R 平方结果:

knnFit1$results$Rsquared

或者最佳模型的 R 平方结果:

knnFit1.sorted <- results[order(results$Rsquared),]
knnFit1.sorted[1,'Rsquared']

这回答了你的问题了吗?