R语言机器学习入门:predict函数报‘object 'BMI' not found’错误求助
解决SVM预测时的"object 'BMI' not found"错误
错误原因分析
嘿,我看到你在用R的SVM做体重状态分类时遇到了这个报错,咱们来拆解一下问题:
当你执行x <- dataset[,-2]提取BMI列时,R会默认把单列的data.frame简化成一个numeric向量(你可以用class(x)验证,输出会是"numeric"而不是"data.frame")。而你的SVM模型是基于带列名的data.frame训练的,predict()函数需要传入一个包含相同列名(也就是BMI)的data.frame才能正确匹配特征,否则模型就找不到对应的变量啦。
修复方法(三种任选其一)
方法1:提取x时保留data.frame结构
修改x的提取代码,加上drop=FALSE参数,强制R不把单列data.frame转为向量:
x <- dataset[, -2, drop=FALSE] # 验证类型:class(x) 会输出 "data.frame" pred <- predict(model_svm, x)
方法2:直接传入带列名的单列data.frame
不需要单独定义x,直接在predict时指定正确的输入格式:
pred <- predict(model_svm, dataset[, "BMI", drop=FALSE])
方法3:将向量转为带列名的data.frame
如果已经定义了x是向量,可以把它转换成符合要求的data.frame:
pred <- predict(model_svm, data.frame(BMI = x))
完整修正后的代码示例
# 构建数据集 dataset <- data.frame( BMI = c(15.5, 16.7, 17.8, 18.9, 19.0, 19.5, 20.7, 21.9, 22.5, 23.5, 24.5, 25.0, 26.0, 27.7, 26.6, 29.3), Result = c("Underweight", "Underweight", "Underweight", "Healthy", "Healthy", "Healthy", "Healthy", "Healthy", "Healthy", "Healthy", "Healthy", "Overweight", "Overweight", "Overweight", "Overweight", "Overweight") ) head(dataset) # 提取特征(保留data.frame结构) x <- dataset[, -2, drop=FALSE] y <- dataset$Result # 响应变量可以是向量,模型支持这种格式 # 训练SVM模型 model_svm <- svm(Result ~ ., data = dataset) summary(model_svm) # 执行预测 pred <- predict(model_svm, x) # 查看预测结果 pred
小提示
以后遇到类似的"变量找不到"错误,先检查输入数据的类型和列名是否和训练数据一致,用class()和colnames()函数就能快速排查问题哦!
内容的提问来源于stack exchange,提问作者91StarSky
相关产品推荐
相关产品推荐

