SAS- использовать proc arbor для переменных bin
Я пытаюсь использовать PROC ARBOR, чтобы определить ячейки для непрерывной переменной. Сгенерированное дерево работает хорошо, и я могу найти пределы ячеек с помощью визуального исследования, но я хотел бы извлечь эти ящики и использовать их для автоматической дискретизации исходной переменной. Это возможно?
Мой код:
%macro INTINPUTS;
l_G_MERGE6_t1_monto6
%mend INTINPUTS;
proc arbor data=labo2.J_TABLA_MODELO_LOGS
Leafsize=5 Mincatsize = 5 Maxbranch=2 Maxdepth=6 alpha = 0.2
Padjust= CHAIDBEFORE DEPTH MAXRULES=1 MAXSURRS=0 Missing=USEINSEARCH Exhaustive=5000 ;
input %INTINPUTS
/ level = interval;
target A_C_0804_flag_compro / level=INTERVAL
Criterion=PROBF;;
Performance DISK
NodeSize=20000;
Assess NoValidata measure=ASE;
SUBTREE BEST ;
MAKEMACRO NLEAVES=nleaves;
save
NODESTAT=work.Tree_OUTNODES
SUMMARY=work.Tree_OUTSUMMARY
code file="C:\labo2\EMPUBLISHSCORE.sas"
group=Tree;
code file="C:\labo2\EMFLOWSCORE.sas"
group=Tree
residual;
run;
quit;
Спасибо!
1 ответ
В обсуждении ниже я не смог проверить какой-либо код, поскольку у меня нет доступа к Enterprise Miner.
Есть несколько способов получить нужную информацию. Хотя, поскольку они предназначены для использования EM, а не людьми, они могут показаться немного запутанными.
Вы можете попросить процедуру вывести ее набор правил, используя save rules = <dataset>;
заявление. Это создаст набор данных со всеми правилами разделения. Формат немного странный, но документация объясняет, как его следует интерпретировать.
Вы можете использовать код, сгенерированный для хранения ваших данных. Файл кода, написанный code file = <fileref>;
может быть сброшен на шаг данных, где считываются данные правильной структуры. Примерно так:
data out;
set in;
%include <fileref>;
run;
Пример той же концепции (хотя и для proc split
скорее, чем proc arboretum
) можно увидеть здесь.
Вы можете использовать score data = <inDataset> out = <outDataset>;
заявление, чтобы процедура применила дерево к вашему набору данных. Это можно сочетать с save model = <dataset>;
заявление для последующего использования той же модели через inmodel = <dataset>
вариант. Это будет выглядеть примерно так:
/* Training */
proc arboretum data = histDS;
/*...*/
save model = modelDef;
score data = histDS out = histTree;
run;
/* Scoring */
proc arboretum inmodel = modelDef;
score data = newDS out = newTree;
run;
Пример того, как некоторые из save
Наборы выходных данных могут быть использованы здесь.