如何用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
你之前代码的问题说明
newdata参数未传入处理好的测试集,必须确保传入数据包含模型用到的所有特征:sex、marital.status、race、education- 错误地将概率值与字符串
"50k"比较,概率是0-1的数值,应与阈值(如0.5)比较 - 之前的代码将结果存入训练集
dataReduced,而你需要的是存入测试集dataTestReduced
内容的提问来源于stack exchange,提问作者IanAnthony1
相关产品推荐
相关产品推荐

