来自http://blog.sina.com.cn/s/blog_8db50cf70101hu2l.html
一、使用SAS/EM界面生成CHAID决策树
这部分内容摘自:http://www.sasresource.com/artical72.html
CHAID (Chi-Square Automatic Interaction Detector)演算法為利用卡方分析(Chi-Square Test)預測二個變數是否需要合併,如能夠產生最大的類別差異的預測變數,將成為節點的分隔變數。透過計算節點中類別的 P值 (P-Value),以P值大小來決定決策樹是否繼續生長,所以不需像C4.5或CART要再做決策樹修剪的動作。CHAID 與CART、C4.5 之差異在於,CHAID只限於處理類別變數,如連續變數必須採用區段的方式,轉換成類別變數。另一差異部分在於修剪的部分,CART、C4.5 是先過度套用資料訓練,之後再修剪。但CHAID 則是在過度套用之前即停止支點蔓生擴大。
二、通过R和SAS代码实现
样例数据来自 R 包,主要是想比较 R 和 SAS 生成的决策树是否相同。运行的结果确实不同,估计是运行参数的不同导致,仍有待研究。
1) Build CHAID tree using R
# Train data:
library(partykit)
library(“CHAID”)
data(“BreastCancer”, package = “mlbench”)
# Build model:
plot(b_chaid)
2) Build CHAID tree using SAS/EM
SAS/EM Chaid Tree:
SAS Code:
proc iml;
run;quit;
filename rulecode “c:\temp\em_chaid_rules.sas”;
*————————————————————*;
* Tree: Run ARBOR procedure;
*————————————————————*;
proc arbor data=work.BreastCancer
run;
quit;
3) Build CHAID tree using TreeDisc.sas
NOTE: Treedisc.sas does not work in 9.4.
Treedisc.sas and xmacro.sas can be downloaded fromhttp://www.public.iastate.edu/~kkoehler/stat557/sas/.
%inc ‘c:\temp\chaid\xmacro.sas’;
%inc ‘c:\temp\chaid\treedisc.sas’;
data set2;
run;
%treedisc(data=set2, depvar=class, freq=, ordinal=,
nominal=Cl_thickness Cell_size Cell_shape Marg_adhesion Epith_c_size Bare_nuclei Bl_cromatin Normal_nucleoli Mitoses,
alpha=0.05,
outtree=trd,
options=noformat,
trace=long);
%treedisc(intree=trd, draw=graphics);
NOTE: Trees built by the above 3 methods are different.
http://www.public.iastate.edu/~kkoehler/stat557/tree14p.pdf
http://www.public.iastate.edu/~kkoehler/stat557/tree24p.pdf
http://www.public.iastate.edu/~kkoehler/stat557/tree2.4page.pdf
http://www.public.iastate.edu/~kkoehler/stat557/sas/treedisc.sas
Reference:
R做Chaid还是挺麻烦的,必须设置所有的变量为factor,要是有比较好的连续变量离散化的包就好了。