SAS EM:Data Partition node(数据拆分节点)

标签:
sasemdatapartitionnode数据拆分节点教育 |
分类: 企业数据挖掘EM |
SAS EM:Data Partition node(数据拆分节点)
SAS EM(Enterprise Miner)企业数据挖掘节点功能详解及代码实现(第二弹)
本文未经作者允许,请勿转载
Data Partition
node(数据拆分节点)允许用户拆分数据做为训练、验证及测试等目的。拆分数据有助于加速模块开发。此外数据拆分也提供相互独立的数据做为交叉验证和模块评估之用。主要以简单、分层随机或自定义的抽样为基础。在做完抽样之后,你可以对将资料拆分成几个互斥的子集合,使用互斥的集合可使得评估模式更为精确。在这边可设定的参数,除了抽样方法、样本大小和随机数种子之外,必须分别决定训练、验证和测试集合所占的比例。
SAS EM提供了三种数据拆分的方式,主要有简单随机数据拆分,层次数据拆分以及用户自定义的数据拆分:
数据拆分(Data
Partition),将数据集按照40%,30%和30%的比例拆分成相互独立的数据集,训练集、验证集和测试集。训练集用于拟合可供选择的模型,验证集用于选择合适的模型,测试集用于对模型效果进行评估测试。
1 简单随机数据拆分(Simple Random)
随机地将数据分到三个数据集中。
代码如下:
*先得到EM数据集;
data EMDATA.VIEW_4O9 / view=EMDATA.VIEW_4O9;
run;
* 设置随机种子为 12345;
%let seed = 12345;
* 随机拆分,得到三个数据集
data EMDATA.TRNAB45E
**这里,因为SAS
EM已经得到原始数据集为10000个,并且三个要得到的数据集的大小分别是40%:30%:30%,因此,这里直接就用4000,3000,3000来进行计算。我们写代码的时候,得先确定样本的总数,然后再将这个总数作为参数写入代码中;
run;
2 层次数据拆分(Stratitied Partition)
层次数据拆分,就是按照某一个变量进行分层,每个层的数据再进行数据拆分。例如:
这里,我们对sex这个变量进行层次数据拆分
代码如下:
*首先查看sex这个变量各个值的样本数;
proc freq data=EMDATA.VIEW_4O9;
run;
proc sort data=EMPROJ._FRQKJRU;
run;
**查看每个值的样本数是否大于3,如果小于3,则层次拆分无意义,故删除。这些值都可以自己设置;
data EMPROJ._FRQV3ZL(keep=count);
run;
*开始层次拆分:这里,通过上面的freq过程步,我们就已经知道了sex的各个值的样本数,然后EM会计算出有多少个样本会拆分到三个数据集中;
即:最终结果:
性别 |
总体 |
训练集(40%) |
验证集(30%) |
测试集(30%) |
女(F) |
4489 |
1796 |
1347 |
1347 |
男(M) |
5277 |
2111 |
1583 |
1583 |
缺失 |
234 |
94 |
70 |
70 |
以下的代码就是根据上表来生成的。这里,我们在写代码的时候,可以根据参数来实现。
%let seed = 12345;
data EMDATA.TRNAB45E
run;
3 用户自定义数据拆分(USER DEFINDED)
用户自定义数据拆分可以根据不同的变量,这些变量的不同的值进行拆分。
例如:我们根据BUY12这个变量的值进行拆分,其中,当BUY12=0时,为训练集,当BUY12=1时,为验证集,当BUY12=2时,为测试集。
代码如下:
**当BUY12=0时,创建训练集;
proc sql;
quit;
**当BUY12=1时,创建验证集;
proc sql;
quit;
**当BUY12=2时,创建测试集;
proc sql;
quit;
本文用到的SAS数据集为buytest.sas7bdat,其下载地址:
http://ishare.iask.sina.com.cn/f/8641118.html
本系列全部数据下载地址:
http://iask.sina.com.cn/u/1564153724/ish