数据挖掘中 决策树算法实现――Bash(三)

2014-11-24 08:51:39 · 作者: · 浏览: 2
_update// /:};
else ## current node is a leaf node
current_node_struct[5]=1;
current_node_struct[6]=`cut -d , -f $length current_node_data | sort | uniq -c | sort -n -r | head -1 | sed 's/^ \+[^ ]* //g'`;
current_node_update=${current_node_struct[*]};
descision_tree[$current_node_index]=${current_node_update// /:};
fi

## output the descision tree after every step for split or leaf node generater
echo ${descision_tree[@]};
done

执行代码:

Bash代码
./descision.sh descision.dat
执行结果为:

Java代码
1:0:0:N:N:0:0 0:2:0:house:0:0:0 0:0:0:house:1:0:0
1:0:0:N:N:0:0 0:2:0:house:0:0:0 0:0:0:house:1:1:1
1:0:0:N:N:0:0 3:2:0:house:0:0:0 0:0:0:house:1:1:1 0:4:1:house,job:0,0:0:0 0:0:1:house,job:0,1:0:0
1:0:0:N:N:0:0 3:2:0:house:0:0:0 0:0:0:house:1:1:1 0:4:1:house,job:0,0:0:0 0:0:1:house,job:0,1:1:1
1:0:0:N:N:0:0 3:2:0:house:0:0:0 0:0:0:house:1:1:1 0:4:1:house,job:0,0:1:0 0:0:1:house,job:0,1:1:1
输出结果中展示了决策树结构生成过程的细节,以及生成过程中树的变化过程

本代码中使用了一维数组结构来存储整棵决策树,输出的先后顺序按照数组下标输出。

输出结果中最后一行表示最终的决策树。它表示的树形结构其实是:

这样看着是不是就爽多了。

说明:
关于上述决策树结果中其实有部分存在误导:
默认根节点是放在数组的第一个位置的,即索引值为0,而子节点中的child与sibling为0时并不表示指向跟节点,而是表示无意义,即没有子节点或兄弟节点。

该决策树所代表的分类规则:
根据该决策树输出,我们挖掘的规则是这样的:
首先根据house属性判断,当house属性为1时,走到索引为2的节点,此时该节点是叶子节点,预测值class为1.
当house属性为0时,接着按照job属性来判断,当job属性为0时走到索引为3的节点,预测值class为0。如果job属性为1时走到索引值为4的节点,此时预测值class为1.


作者:pingpang