SAS中线性回归如何实现预测结果仅输出0和1二值
报错原因
PROC GLMSELECT是SAS专属的模型选择过程步,过程步内部仅支持该过程预先定义的专属语法,不支持直接写数据处理场景用的if/then/else赋值语句,你在过程步里插入的赋值逻辑会被直接识别为非法语法导致运行失败。
另外注意:你需要做阈值判断的是模型输出的预测概率值,不是原始数据集中的真实buy标签,不能直接覆盖原始buy字段,否则会丢失真值,后续无法做模型效果评估。
正确实现代码
逻辑拆成两步:先运行模型输出带预测值的结果集,再在数据步中完成0.5阈值的二分类转换:
/* 1. 运行线性模型,将预测值输出到临时数据集 */ proc GLMSELECT data=tasks.data plots=all; by descending gender; model buy = affiliate age; /* 输出语句:把预测概率命名为pred_prob,存入work.model_output临时表 */ output out=work.model_output p=pred_prob; run; /* 2. 数据步中做阈值判断,生成0/1分类预测结果 */ data work.predict_result; set work.model_output; /* 布尔表达式直接生成0/1结果,逻辑成立返回1,否则返回0 */ pred_buy = (pred_prob >= 0.5); /* 如果你习惯写if/else语法,也可以替换成下面这段 if pred_prob >= 0.5 then pred_buy = 1; else pred_buy = 0; */ run;
注意事项
- 生成的0/1预测值单独存为
pred_buy字段,不要覆盖原始的buy真实标签字段,否则后续计算准确率、混淆矩阵等模型评估指标时会完全出错。 - 如果你需要调整分类阈值(比如为了提升召回率把阈值降到0.3),直接修改判断条件里的数值即可,不需要改动建模代码。
内容的提问来源于stack exchange,提问作者Egon Carter
相关产品推荐
相关产品推荐

