You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用knn.reg预测Auto数据集指定horsepower对应的mpg?

问题描述

我正在尝试使用knn.reg函数,基于Auto数据集的horsepower变量,预测对应的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()函数估算horsepower为200的车辆的mpg,代码如下:

mpg<-c(200)
predict(knn.model, newdata=mpg)

但运行后报错:predict() can't be applied to class "knnRegCV.",不确定是否该用其他函数,或者代码有遗漏。


解决方案

核心问题原因

FNN包的knn.reg函数返回的对象没有内置predict方法,直接调用predict()会报错;另外你最后一次调用knn.reg时传入了test参数,返回的是测试集的预测结果对象,而非可用于后续预测的训练模型结构。

修正步骤

  1. 用全数据集训练模型
    要使用整个数据集作为训练集,调用knn.reg时只传入train和y参数,不要加test。同时注意train参数需为数据框/矩阵格式,避免向量引发维度问题:

    # 用全数据集训练k=10的KNN回归模型
    knn.model <- knn.reg(train = df[, "horsepower", drop = FALSE], y = df$mpg, k = 10)
    
  2. 自定义预测逻辑
    因为knn.reg没有内置预测方法,需要手动实现KNN的核心逻辑:找到新数据点在训练集中的k个最近邻,取它们的mpg平均值作为预测值。可以用FNN包的knnx.index函数实现:

    # 定义KNN预测函数
    predict_knn_reg <- function(model, new_data, k) {
      # 获取训练数据集
      train_data <- model$train
      # 找到新数据的k个最近邻索引
      nn_index <- knnx.index(train = train_data, test = new_data, k = k)
      # 计算最近邻y值的平均值
      apply(nn_index, 1, function(idx) mean(model$y[idx]))
    }
    
    # 预测horsepower=200的mpg值
    new_horsepower <- data.frame(horsepower = 200)
    predicted_mpg <- predict_knn_reg(knn.model, new_data = new_horsepower, k = 10)
    print(predicted_mpg)
    
  3. 额外注意事项

    • 确保训练数据和新数据结构一致:均为数据框/矩阵,且列名相同(此处为horsepower)。
    • KNN对特征尺度敏感,若后续加入其他特征,建议先做标准化处理(比如scale()函数),避免数值范围大的特征主导距离计算。

内容的提问来源于stack exchange,提问作者Boogie Ly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 04:05:26