数据挖掘——决策树
OPEN candidates FOR 'SELECT * FROM BTCandidate'; LOOP
FETCH candidates INTO cvar, egain, elist;
EXIT WHEN candidates%NOTFOUND; -- Exit loop when last row is fetched IF (cvar <> max_var) OR (egain <= min_gain) THEN -- Destroy
FOR i IN 1..elist.COUNT LOOP
-- Debug DBMS_OUTPUT.PUT_LINE('destroying node '||elist(i).nview); EXECUTE IMMEDIATE 'DROP VIEW ' || elist(i).nview; END LOOP; ELSE
FOR i IN 1..elist.COUNT LOOP
-- Debug DBMS_OUTPUT.PUT_LINE('stacking node '||elist(i).nview); -- Push
stack.EXTEND;
stack(stack.COUNT).num := nodenum;
stack(stack.COUNT).nview := elist(i).nview; stack(stack.COUNT).entrop := elist(i).entrop; stack(stack.COUNT).pop := elist(i).pop;
DBMS_OUTPUT.PUT_LINE('Creating node view ' || elist(i).nview);
Result(nodenum, TO_CHAR(cnode.num), elist(i).rule, elist(i).nview); -- Output result nodenum := nodenum + 1; -- Next node END LOOP; END IF; -- max elist.DELETE; END LOOP;
CLOSE candidates;
elist.TRIM(elist.COUNT); -- Empty
-- Put current view in \
delist.EXTEND;
delist(delist.COUNT) := cnode.nview;
/* Debug
FOR i IN 1..stack.COUNT LOOP
DBMS_OUTPUT.PUT_LINE('stack('||TO_CHAR(i)||').nview=' || stack(i).nview);
DBMS_OUTPUT.PUT_LINE('stack('||TO_CHAR(i)||').entrop=' || TO_CHAR(stack(i).entrop)); END LOOP; */
END LOOP; -- WHILE stack.COUNT > 0
19
数据挖掘——决策树
-- Cleaning...
IF del THEN -- Suppress tree views FOR i IN 1..delist.COUNT LOOP
-- DBMS_OUTPUT.PUT_LINE('Dropping node view ' || delist(i)); EXECUTE IMMEDIATE 'DROP VIEW ' || delist(i); END LOOP; END IF;
DBMS_OUTPUT.PUT_LINE('Dropping node views'); delist.TRIM(delist.COUNT); classval.TRIM(classval.COUNT); END; /
训练数据:
create table students_study( evaluate varchar2(10) not null, grade varchar2(10), contrast varchar2(10), hard varchar2(10), press varchar2(10) );
insert into students_study values(' Excellent ', '90-100' ,' Advance ', 'true' ,'no'); insert into students_study values(' good', '76-89' ,' Advance ', 'true' ,'no'); insert into students_study values('good', '76-89' ,'retreat', 'FALSE' ,'yes'); insert into students_study values('pass', '60-75' ,' Advance', 'true' ,'no'); insert into students_study values('pass', '60-75' ,'retreat', 'FALSE' ,'yes'); insert into students_study values('good', '76-89' ,'unchange', 'true' ,'no'); insert into students_study values('pass', '60-75' ,'unchange', ' FALSE ' ,'yes'); insert into students_study values(' failure ', '<60' ,' ', ' ' ,'yes'); 执行建树过程: Set serveroutput on
EXECUTE BuildTree('students_study','press','co',0,'bt4',true)查询获得结果: SELECT LEVEL *FROM &result_table_name CONNECT BY PRIOR node=parent START WITH node=0;
20