与其他方法相比,使用 Caret 包的 KNN 给出了糟糕的结果
KNN using Caret package giving bad results compared to other methods
我正在比较几种不同的机器学习算法以提高自动作文评分的准确性。我得到的训练集的 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) 的直方图:
我猜你没有为 knn 缩放你的自变量,当你的自变量在不同的尺度上时,这是至关重要的。可以看到一个有趣的讨论here:
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
我正在比较几种不同的机器学习算法以提高自动作文评分的准确性。我得到的训练集的 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) 的直方图:
我猜你没有为 knn 缩放你的自变量,当你的自变量在不同的尺度上时,这是至关重要的。可以看到一个有趣的讨论here:
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