楼主: CDA网校
986 0

[数据] 决策树也可以做特征分析啦——CDA人工智能学院 [推广有奖]

管理员

已卖:189份资源

泰斗

2%

还不是VIP/贵宾

-

威望
3
论坛币
114997 个
通用积分
9589.4431
学术水平
268 点
热心指数
276 点
信用等级
243 点
经验
227157 点
帖子
6826
精华
19
在线时间
4361 小时
注册时间
2019-9-13
最后登录
2025-12-8

初级热心勋章

楼主
CDA网校 学生认证  发表于 2020-9-18 10:29:39 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
CDA人工智能学院致力于以优质的人工智能在线教育资源助力学员的DT职业梦想!课程内容涵盖数据分析机器学习深度学习人工智能tensorFlowPyTorch知识图谱等众多核心技术及行业案例,让每一个学员都可以在线灵活学习,快速掌握AI时代的前沿技术。PS:私信我即可获取《银牌会员》1个月免费试听机会

那么这个代码是用于建模初期,你为了大概了解变量的一个基本特征写的,不是最优分组哈,因为这个代码是将变量最多分为12组,分这么多组的原因也是为了更好的观察特征而已啦,你要是觉得太多组,你可以改下树的深度这些调整一下,这里关于变量特征怎么看,我就不说了.....

%macro

zhandapao(data,DVAR,id,dir);

proc datasets lib=work nodetails;

delete

varname_total;

run;

/*建立数值型数据集*/

%let lib=%upcase(%scan(&data.,1,'.'));

%letdname=%upcase(%scan(&data.,2,'.'));

%globalvar_list var_num;

proc sql noprint;

select name,count(*) into :var_list separated by' ',:var_num

from sashelp.VCOLUMN

where left(libname)="&lib."and

left(memname)="&dname."and

type="num"and

lowcase(name)^=lowcase("&DVAR.")

and lowcase(name)^="&id.";

quit;

%put

&var_list.;

/*把数值型变量定义为宏变量*/

%doi=1%to&var_num.;

%letnumvar_name_&i.=%scan(&var_list.,&i.);

%put&numvar_name_1.;

proc split data=&data.splitsize=300

maxbranch=2

MAXDEPTH=5nsurrs=5

assess=lift criterion=gini;

input &&numvar_name_&i./level=interval;

target &DVAR./level=binary;

Score data=&data.out=d_&&numvar_name_&i.;

code file="&dir.treecode_tic_&&numvar_name_&i..sas";

describe file="&dir.treerule_tic_&&numvar_name_&i..txt";

run;

data n_D_&&numvar_name_&i.;

set d_&&numvar_name_&i.;

%include"&dir.treecode_tic_&&numvar_name_&i..sas";

rename p_&DVAR.1=p_&&numvar_name_&i.;

run;

proc sql noprint;

select count(*),max(&&numvar_name_&i.),min(&&numvar_name_&i.)into:total, :max ,:min from n_D_&&numvar_name_&i.;

quit;

data n_D_&&numvar_name_&i.;

set n_D_&&numvar_name_&i.;

if &min.<=&&numvar_name_&i.<=&max.

then flag="no_null";

else flag="null";

run;

proc sql;

select count(*) into:is_null from

n_D_&&numvar_name_&i.;

quit;

%if&is_null.>0%then%do;

proc sql noprint;

select count(*),max(&&numvar_name_&i.),min(&&numvar_name_&i.)into:total,:max ,:min from n_D_&&numvar_name_&i.;

create table total as

select"&&numvar_name_&i."as

varname,

min(&&numvar_name_&i.) as interval_1,

max(&&numvar_name_&i.) as interval_2,

compress(put(min(round(&&numvar_name_&i.,0.0001)),best32.))||'-'||compress(put(max(round(&&numvar_name_&i.,0.0001)),best32.)) as interval,

sum(&DVAR.) as bad_num,

count(*) as total_num,

count(*)/&total.as num_rate,

sum(&DVAR.)/count(*) as bad_rate

from n_D_&&numvar_name_&i.

group by p_&&numvar_name_&i.

union all

select"&&numvar_name_&i."as varname,

-9999as interval_1,

-9999as interval_2,

'null'as interval,

sum(&DVAR.) as bad_num,

count(*) as total_num,

count(*)/&total.as num_rate,

sum(&DVAR.)/count(*) as bad_rate

from n_D_&&numvar_name_&i.(where=(&&numvar_name_&i.=.))

group by p_&&numvar_name_&i.

order by interval_1;

quit;

%end;

%else%do;

proc sql noprint;

select count(*),max(&&numvar_name_&i.),min(&&numvar_name_&i.)into:total,:max ,:min from n_D_&&numvar_name_&i.;

create table total as

select"&&numvar_name_&i."as varname,

min(&&numvar_name_&i.) asninterval_1,

max(&&numvar_name_&i.) as interval_2,

compress(put(min(round(&&numvar_name_&i.,0.0001)),best32.))||'-'||compress(put(max(round(&&numvar_name_&i.,0.0001)),best32.)) as interval,

sum(&DVAR.) as bad_num,

count(*) as total_num,

count(*)/&total.as num_rate,

sum(&DVAR.)/count(*) as bad_rate

from n_D_&&numvar_name_&i.

group by p_&&numvar_name_&i.

order by interval_1;

quit;

%end;

data &&numvar_name_&i.;

set total;

group=_n_;

run;

proc append base=varname_total

data=&&numvar_name_&i.

force;run;

proc datasets lib=work nodetails;

delete total n_: d_:

&&numvar_name_&i.

_namedat;

quit;

%end;

%mend;

解释一下这个代码怎么用,这个宏已经是封装好了的,直接填入参数就可以用了:

zhandapao(data,DVAR,id,dir);

data:填入你的数据集

DVAR:填入你的因变量

id:填入你的数据集的主键

dir:这个你需要填一个路径,是用来放决策树的规则的文件下,决策树的规则文件你看不懂没关系,你填个类似“F/DD”的路径就可以了。

例子:%zhandapao(DD.TEST_DATA,y,CUSTOMER_id,D:test_1);

结果图就是这样子:

0D04CBB8996CB009643B8D6FD844F0C0.jpg

关注“CDA人工智能学院”,回复“录播”获取更多人工智能精选直播视频!


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:人工智能 决策树 CDA CRITERION proc sql

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-9 05:23