@jocker---
2017-06-14T11:33:04.000000Z
字数 3820
阅读 1815
算法
1. 容易理解和解释,并且生成的决策树可被可视化。
2. 不需要特别的数据预处理(必须处理缺失值)。通常其余模型需要将数据进行标准化,哑变量,变量筛选,等等的数据预处理过程。
3. 算法的复杂度是对数级别。
4. 能够处理连续性以及离散型变量。
5. 可以处理多分类问题。
6. 可以使用统计方法对模型进行评估。
1. 决策树很容易产生严重的过拟合问题
2. 对数据变化敏感,小量的数据变化可能导致完全不同的决策树生成
3. 选择最优决策树是一个NP完全问题。只能找到局部最优解。
4. 不可以处理异或问题。
5. 数据样本的不平衡,可能会导致错误的决策树被建立。
信息增益基于香浓的信息论,它基于分裂前后的信息差异选择分裂属性,找出信息增益值最大的属性,作为分裂节点。节点所包含的信息计量(熵)的定义如下:
信息增益所表示的是当我们引入一个新的变量时,元数据在新的概率分布下不确定性的变化。可以看出随着概率分布更加均衡,以及数据集中分类可能性的增多,熵的值越大,不确定性也更高
信息增益表示,数据集在某个属性节点分裂前后分布不确定性的变化。
基于信息增益进行属性选择有一个很大的缺陷,它会倾向于选择属性值多的属性。一个较为极端的例子是某种属性将预测属性完全分割,也就是在该属性分割后预测属性在每个分割集中,只有一种可能,分割后的预测属性的不确定性很小。但这样的分割方式往往没有任何意义,缺乏泛化能力。
信息增益比率对上面的情况进行了改进,它引入了一个分裂信息:
通过对属性较多的节点进行惩罚,如果一个节点的属性取值很多,那么会增大,使变小,不过当一个节点属性很少也可能会导致取值为0或者趋于0,使的值变得不可信,可以通过引入平滑系数对信息增益比率进行改进。
基尼指数是另外一种数据的不纯度的度量方法,定义如下:
在决策树学习中将已经生成的树进行简化的过程称为剪枝。具体的说就是从已生成的树上裁剪掉一些子树或叶结点,并将其根节点或父结点作为新的叶结点,从而简化分类树模型,减轻过拟合问题。
决策树的剪枝往往通过极小化决策树整体的代价函数(cost function)来实现,代价函数如下:
ID3算法使用信息增益选择决策树分裂属性,C4.5算法使用信息增益率选择决策树分裂属性,CART算法使用基尼指数选择决策树的分裂属性。下面以CART算法介绍整个树生成以及剪枝流程:
CART是一种分类回归模型,由Breiman等人在1984年提出。可以用作分类以及回归。CART假设决策树为二叉树。
from sklearn import tree
from sklearn.datasets import load_iris
iris = load_iris()
clf = tree.DecisionTreeClassifier()
clf = clf.fit(iris.data, iris.target)
from IPython.display import Image
import pydotplus
dot_data = tree.export_graphviz(clf ,
out_file=None,feature_names=iris.feature_names,
class_names=iris.target_names, filled = True,
rounded = True, special_characters = True)
graph = pydotplus.graph_from_dot_data(dot_data)
Image(graph.create_jpg())