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

如何用predict函数获取年收入≥50K概率并转为分类变量加入dataTestReduced

如何用GLM模型计算测试集年收入超50K的概率并生成分类变量

步骤1:对测试集做与训练集完全一致的预处理

模型预测要求测试集特征与训练集结构完全匹配,必须先对dataTest执行和训练集相同的清洗、特征编码操作:

# 过滤race为Black/White的样本
dataTestReduced <- dataTest[dataTest$race %in% c("Black", "White"),]

# 合并marital.status类别
dataTestReduced[dataTestReduced$marital.status %in% c("Married-civ-spouse", "Married-AF-spouse"),"marital.status"] <- "married"
dataTestReduced[dataTestReduced$marital.status %in% c("Divorced", "Separated","Widowed","Married-spouse-absent"),"marital.status"] <- "pMarried"

# 合并education类别
dataTestReduced[dataTestReduced$education %in% c("11th","12th","1st-4th","5th-6th","7th-8th", "9th", "HS-grad","10th", "Preschool", "Some-college"), "education"] <- "less-than-Uni" 
dataTestReduced[dataTestReduced$education %in% c("Assoc-acdm","Assoc-voc", "Prof-school", "Bachelors"), "education"] <- "University"
dataTestReduced[dataTestReduced$education %in% c("Masters","Doctorate", "Prof-school"), "education"] <- "advancedDegree"

# 可选:生成测试集真实标签(用于后续模型评估)
dataTestReduced$incomeNum <- dataTestReduced$income == ">50K"

步骤2:用模型预测测试集的收入概率

predict()函数的newdata参数需传入包含所有模型特征的测试集数据框,type="response"会输出0-1之间的概率值(代表年收入>50K的概率):

# 预测测试集样本年收入>50K的概率
probabilities <- predict(theModel, newdata = dataTestReduced, type = "response")

# 将概率添加到测试集数据框
dataTestReduced$income_prob <- probabilities

步骤3:将概率转换为分类变量

选择合适阈值(常用0.5,可根据业务需求调整),将概率转为分类标签:

# 以0.5为阈值,生成预测分类标签
dataTestReduced$predicted_income <- ifelse(probabilities > 0.5, ">50K", "<=50K")

# 或者生成布尔型标签(与训练集incomeNum格式一致)
dataTestReduced$predicted_incomeNum <- probabilities > 0.5

你之前代码的问题说明

  1. newdata参数未传入处理好的测试集,必须确保传入数据包含模型用到的所有特征:sex、marital.status、race、education
  2. 错误地将概率值与字符串"50k"比较,概率是0-1的数值,应与阈值(如0.5)比较
  3. 之前的代码将结果存入训练集dataReduced,而你需要的是存入测试集dataTestReduced

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 07:40:20