使用Caret包的KNN算法在自动评分中的表现较差

我在比较几种不同的机器学习算法,用于自动评分的准确性。训练集的RMSE和R平方值平均分别约为0.75和0.43。但是,当我使用相同的函数框架运行KNN时,得到的RMSE为0.95,R平方为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$resultslm_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$resultsknn_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的表现明显不如其他算法。

我在网上查看了文档和这里,但没有找到解决我问题或提及此问题的任何信息。这个是我找到的与我类似问题的最接近的帖子,但它不适用于我,因为我没有使用分类预测变量。

有谁知道可能是什么原因导致这种情况吗?

编辑:这是因变量(整体评分)的直方图:

enter image description here


回答:

我猜测您没有对KNN的自变量进行标准化处理,这在自变量尺度不同的情况下非常关键。你可以在这里看到一个有趣的讨论 这里

library(caret)library(mlbench)data(BostonHousing)data = BostonHousingtrain(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.654680train(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.172021train(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

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注