KNN использует пакет Caret, дающий плохие результаты по сравнению с другими методами - PullRequest
1 голос
/ 11 апреля 2020

Я сравниваю несколько различных алгоритмов машинного обучения для автоматической оценки эссе. Значения 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

Я только показываю линейную регрессию, но я использую 10 различных алгоритмов на 6 различных наборах данных и по всем направлениям KNN работает намного хуже по сравнению с остальными.

Я пытался посмотреть онлайн документацию и здесь, но я не нашел ничего, что решало бы мою проблему или упоминало бы это. Этот наиболее близок к тому, что я нашел для кого-то с подобной проблемой, но он не относится ко мне, потому что я не использую категориальные предикторы.

Кто-нибудь знает, что может вызвать это ?

Редактировать: Вот гистограмма зависимой переменной (holistic_score):

enter image description here

1 Ответ

2 голосов
/ 11 апреля 2020

Полагаю, вы не масштабировали свои независимые переменные для 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
...