R中用caret做线性回归预测年龄遇“inputs must be factors”错误求助
问题原因与解决方案
你的报错完全是因为选错了模型评估的汇总函数。
核心问题
twoClassSummary是专门为二分类任务设计的汇总函数,它会计算敏感度(sensitivity)、特异性这类分类任务指标,而敏感度的计算要求输入必须是分类因子。但你的任务是回归任务(预测连续数值型的年龄),两者完全不匹配,所以才会出现"inputs must be factors"的错误,这和线性回归需要数值型数据的逻辑并不冲突。
修正方案
只需要修改trainControl中的summaryFunction参数,回归任务可以:
- 直接移除该参数,让
caret自动使用回归任务默认的评估指标(RMSE、R²等) - 或者明确指定回归专用的汇总函数
regressionSummary
修正后的代码示例
DEX = createDataPartition(y = age_pred$age, p=0.8, list = FALSE) age_trn = age_pred[DEX, ] age_tst = age_pred[-DEX,] # 方案1:移除summaryFunction参数 ctrlCV = trainControl(method = 'cv', number = 5 , classProbs = FALSE , savePredictions = TRUE) # 方案2:指定回归专用的汇总函数 # ctrlCV = trainControl(method = 'cv', number = 5 , classProbs = FALSE , savePredictions = TRUE, summaryFunction = regressionSummary) ageModel <- caret::train(age ~ ., data = age_trn, method = 'lm', trControl = ctrlCV)
额外说明
classProbs = FALSE这个参数设置是正确的,因为回归任务不需要计算类别概率,保持默认即可。
内容的提问来源于stack exchange,提问作者Programming Noob
相关产品推荐
相关产品推荐

