如何在SAS中指定自定义分组实现交叉验证构建树模型
SAS 自定义交叉验证分组构建树模型实现方案
核心实现逻辑
SAS中做决策树、梯度提升树等树模型的官方过程步PROC HPSPLIT原生支持自定义交叉验证分组,无需使用默认的随机抽样分组逻辑,仅需提前在数据集中生成你自行指定的分组变量即可。
前置准备
你的输入数据集需要提前新增一列自定义分组变量,例如命名为cv_group,取值为1~k(k为你设定的交叉验证折数),每个观测的cv_group取值完全由你自行指定。
完整示例代码
基础实现(分类树场景)
/* 自定义k折交叉验证构建分类树 */ proc hpsplit data=你的数据集名 seed=123 plots=all; class 目标变量 分类自变量1 分类自变量2; /* 仅分类变量需要在此声明,连续变量不用加 */ model 目标变量(event='目标事件取值') = 自变量1 自变量2 自变量3 ... 自变量n; /* 核心语句:指定自定义分组变量,SAS完全按照该变量取值划分交叉验证折数 */ partition cvvar=cv_group; prune costcomplexity; /* 成本复杂度剪枝,可按需替换为其他剪枝规则 */ output out=模型输出数据集 predicted=预测值变量名 prob=预测概率变量名; run;
进阶:提取交叉验证性能指标
如果需要获取每折的模型效果指标(误分类率、准确率、AUC等),可以用ODS输出捕获对应结果:
/* 捕获交叉验证性能结果到数据集 */ ods output CrossValidatedFit=交叉验证性能数据集; proc hpsplit data=你的数据集名 seed=123; class 目标变量 分类自变量1 分类自变量2; model 目标变量(event='目标事件取值') = 自变量列表; partition cvvar=cv_group; prune costcomplexity; run; ods output close; /* 查看各折及平均性能指标 */ proc print data=交叉验证性能数据集; run;
注意事项
- 如果是构建回归树,仅需删除
model语句中的event参数,将目标变量替换为连续型变量即可 - 运行后查看结果中的「分区摘要」表,可以核对每折的观测数是否和你预设的分组完全一致,确认自定义分组生效
内容的提问来源于stack exchange,提问作者YYY
相关产品推荐
相关产品推荐

