决策树模型
1)原始数据表
我们来看一个数据表(如表11-1所示),假定根据历史数据,经过处理后生成了这样的数据表。其中市盈率的高中低的标准为:低(<10),中(10~30),高(>30);股价的高中低标准为:低(<20元),中(20~50元),高(>50元);是否小盘股的判断标准为:小盘股(流通市值<10亿),数据的计算基准日假定为T日,归类的计算日为(T+30)日。
表11-1 决策树数据表
下面来看第一条记录(低,高,否,中性,不涨),其意思是:有某个股票,在T日时的数据是:市盈率为低,股价为高,非小盘股,分析师评级为中性,该股票在30天后没有出现上涨。
我们的问题是:根据该表中的数据,能够构建一个模型,将那些“上涨”股票的特征提取出来,并且对于一个新的股票记录,能否判断该股票在未来30天是否上涨?
2)决策树
如图11-2所示为通过某种算法得出的决策树。决策树的基本组成部分有:决策节点、分支和叶子。
图11-2 决策树示例
决策树中最上面的节点称为根节点,是整个决策树的开始。每个分支是一个新的决策节点,或者是树的叶子。每个决策节点代表一个问题或者决策,通常对应待分类对象的属性。每个叶节点代表一种可能的分类结果。
在沿着决策树从上到下的遍历过程中,在每个节点都有一个测试。对每个节点上问题的不同测试输出导致不同的分支,最后会达到一个叶子节点。这一过程就是利用决策树进行分类的过程,利用若干个变量来判断属性的类别。
例如,在该决策树中,最左边的路径为市盈率:低;小盘股:是;涨。这么一条路径表达的意思是:如果有一个股票,它的市盈率为低,并且是小盘股,则该股票在未来30天后会出现上涨。
生成这样的一棵决策树的算法很多,如最著名的ID3算法、CLS算法等。出于篇幅的原因,本书不进行算法的深入研究,这里只是简单介绍一下算法过程,感兴趣的读者可以去查阅相关的数据挖掘的算法书。
3)生成算法
CLS算法是早期的决策树学习算法,它是许多决策树学习算法的基础。
CLS基本思想:从一棵空决策树开始,选择某一属性(分类属性)作为测试属性。该测试属性对应决策树中的决策节点,根据该属性的值的不同,可将训练样本分成相应的子集,如果该子集为空,或该子集中的样本属于同一个类,则该子集为叶节点,否则该子集对应于决策树的内部节点,即测试节点,需要选择一个新的分类属性对该子集进行划分,直到所有的子集都为空或者属于同一类。
算法过程如下:
(1)生成一棵空决策树和一张训练样本属性集。
(2)若训练样本集T中所有的样本都属于同一类,跳转到步骤(3)则生成节点T,并终止学习算法;否则跳转到步骤(3)。
(3)根据某种策略从训练样本属性表中选择属性A作为测试属性,生成测试节点A。
(4)若A的取值为V1,V2,…,Vm,则根据A的取值的不同,将T划分成m个子集Tl,T2,…,Tm。
(5)从训练样本属性表中删除属性A。
(6)跳转到步骤(2),对每个子集递归调用CLS。
在步骤(3)中,根据某种策略从训练样本属性表中选择属性A作为测试属性,并没有规定采用何种测试属性。实践表明,测试属性集的组成及测试属性的先后对决策树的学习有着举足轻重的影响。