首页 > 解决方案 > 与其他方法相比,使用 Caret 包的 KNN 给出了不好的结果

问题描述

我正在比较几种不同的机器学习算法来获得自动论文评分的准确性。我得到的训练集的 RMSE 和 Rsquared 值平均分别约为 0.75 和 0.43。但是由于某种原因,当我使用相同的函数框架运行 KNN 时,我得到 RMSE=0.95 和 RSquared=0.09。我也没有收到任何错误消息,所以我不知道出了什么问题。

我的数据集是连续的,我正在对其进行回归。

这是我的代码片段:

library(caret)

train_control <- trainControl(method="repeatedcv", number=10, repeats=3)

# Linear Regression ============================================================
lm <- train(holistic_score~., 
            data=training, 
            trControl=train_control, 
            method="lm")
lm$results
lm_pred <- predict(lm, testing)
postResample(pred = lm_pred, obs = testing$holistic_score)
# Train:  rmse = 0.714515   rsquared = 0.4737114
# Test:   rmse = 0.7508373  rsquared = 0.4423288

# K-NN =========================================================================
knn <- train(holistic_score~.,
             data=training,
             trControl=train_control,
             tuneLength=100,
             method="knn")
knn$results
knn_pred <- predict(knn, testing)
postResample(pred=knn_pred, obs=testing$holistic_score)
# Train:  rmse = 0.9466202  rsquared = 0.07567549
# Test:   rmse = 0.9512989  rsquared = 0.0966448

我只展示了线性回归,但我在 6 个不同的数据集上使用了 10 种不同的算法,而且与其他的相比,KNN 的表现要差得多。

我试过在网上查看文档和这里,但我没有找到任何可以解决我的问题或提到它的东西。是我发现的最接近有类似问题的人,但它不适用于我,因为我没有使用分类预测器。

有谁知道这可能是什么原因?

编辑: 这是因变量(holistic_score)的直方图:

在此处输入图像描述

标签: rmachine-learningregressionr-caretknn

解决方案


我的猜测是您没有为 knn 缩放自变量,当您的自变量处于不同的尺度时,这至关重要。你可以在这里看到一个有趣的讨论:

library(caret)
library(mlbench)
data(BostonHousing)
data = BostonHousing

train(medv ~.,data=data,method="knn",
trControl=trainControl(method="cv",number=3))

Summary of sample sizes: 337, 338, 337 
Resampling results across tuning parameters:

  k  RMSE      Rsquared   MAE     
  5  6.721722  0.4748246  4.625845
  7  6.897760  0.4429380  4.720363
  9  6.807877  0.4550040  4.654680

train(medv ~.,data=data,method="knn",
trControl=trainControl(method="cv",number=3),
preProc = c("center", "scale"))

Pre-processing: centered (13), scaled (13) 
Resampling: Cross-Validated (3 fold) 
Summary of sample sizes: 337, 338, 337 
Resampling results across tuning parameters:

  k  RMSE      Rsquared   MAE     
  5  4.873476  0.7354566  3.120004
  7  4.983704  0.7280253  3.125164
  9  4.972269  0.7348006  3.172021

train(medv ~.,data=data,method="glmnet",
trControl=trainControl(method="cv",number=3))

  alpha  lambda      RMSE      Rsquared   MAE     
  0.10   0.01355531  4.994509  0.7145962  3.483945
  0.10   0.13555307  4.997304  0.7145864  3.466551
  0.10   1.35553073  5.124558  0.7054928  3.504224
  0.55   0.01355531  4.995748  0.7145269  3.483881
  0.55   0.13555307  5.030863  0.7112925  3.463395
  0.55   1.35553073  5.423348  0.6793556  3.745830
  1.00   0.01355531  4.998020  0.7143324  3.482485
  1.00   0.13555307  5.084050  0.7055959  3.485051
  1.00   1.35553073  5.593417  0.6725029  3.904954

推荐阅读