我正试图找出如何应用knn.reg
函数来预测特定值x(它是同一数据集的"马力"变量(的y(在本例中是Auto
数据集的mpg
(。
起初,我使用knn.reg
函数构建了一个k=10的knn回归模型,如下所示:
#Preliminary setup
library(ISLR)
library(fastDummies)
library(leaps)
library(boot)
library(FNN)
library(caTools)
df<-Auto
df$origin <- as.factor(df$origin)
df <- dummy_cols(df, select_columns = "origin")
df <- df[,!(names(df) %in% c("name", "origin","origin_1"))]
#Attempted models
knn.model<-knn.reg(train=df$horsepower, y=df$mpg, k=10)
split<-sample.split(df$mpg, SplitRatio=0.8)
train=df[split,]
test=df[!split,]
knn.model<-knn.reg(train=train[c('horsepower')], test=test[c('horsepower')], y=df$mpg, k=10)
我已经尝试了两个模型,它们要么包含测试数据,要么排除测试数据是从原始数据中分离出来的,但我想我想使用整个数据集作为训练数据。
在构建这些模型后,我尝试使用predict((函数来估计车辆马力为200时的mpg,它看起来像这样:
mpg<-c(200)
predict(knn.model, newdata=mpg)
然而,predict()
函数的问题是,它给出了一个错误,告诉我predict() can't be applied to class "knnRegCV."
我不确定我是否应该使用predict()
以外的函数,或者我的代码是否缺少一些重要的东西。如果有任何建议或意见可以帮助我解决这个问题,我将不胜感激。非常感谢!
predict()
没有用于knn.reg()
函数返回的对象的方法,但可以很容易地使用test=
参数。使用您的第一个knn.model
:
knn.reg(train=df$horsepower, test=200, y=df$mpg, k=10)
# Prediction:
# [1] 12.45
由于您只有一个预测器,因此需要创建一个数据帧来估计多个值:
pred <- data.frame(horsepower=c(100, 150, 200, 250))
knn.reg(train=df$horsepower, test=pred, y=df$mpg, k=10)
# Prediction:
# [1] 17.90 14.50 12.45 12.90