输入
训练集D={(x1,y1),(x2,y2),…(xm,ym)};
属性集A={a1,a2,…ad}.
过程:函数TreeGenerate(D,A)
- 生成结点node;
- if D中样本全属于同一类别C:
将node标记为C类叶结点;
递归返回;
end if - if A=空集 或 D中样本在A上取值相同:
将node标记为D中样本数(当前结点)最多的类(成为叶结点);
递归返回;
end if - 从A中选择最优划分属性a*:
- a*=argmax Gain(D,a)
[最大化信息增益,偏好可取值数目较多的属性 ] - a*=argmax Gain_ratio(D,a)
[ 最大化信息增益率,偏好可取值数目较少的属性] - a*=argmin Gini_index(D,a)
[最小化基尼指数]
- for a* 的每个值 a‘* do
为node生成一个分支;令Dv表示D中在a*上取值为a’*的样本子集
if Dv为空:
将分支结点标记为D中样本数(父结点)最多的类(成为叶结点);
递归返回;
else
以TreeGenerate(Dv,A{a*})为分支结点
end if
end for
输出
以node为根结点的一棵决策树