简介
决策树(DT)是用于分类和回归的非参数监督学习方法。目标是创建一个模型,通过学习从数据特征推断出的简单决策规则来预测目标变量的值。
adboost:集成算法,基本算法的优化算法
gbdboost
决策树的一些优点是:
- 易于理解和解释。树木可以看到。
- 需要很少的数据准备。其他技术通常需要数据规范化,需要创建虚拟变量并删除空值。但请注意,此模块不支持缺失值。
- 使用树的成本(即,预测数据)是用于训练树的数据点的数量的对数。
- 能够处理数字和分类数据。其他技术通常专门用于分析仅具有一种变量类型的数据集。有关更多信息,请参阅算法
- 能够处理多输出问题。
- 使用白盒模型。如果在模型中可以观察到给定的情况,则可以通过布尔逻辑轻松解释条件。相反,在黑盒模型中(例如,在人工神经网络中),结果可能更难以解释。
- 可以使用统计测试验证模型。这使得可以考虑模型的可靠性。
- 即使其假设在某种程度上违反了生成数据的真实模型,也表现良好。
决策树的缺点包括:
- 决策树学习者可以创建过于复杂的树,这些树不能很好地推广数据。这称为过度拟合。修剪(当前不支持),设置叶节点所需的最小样本数或设置树的最大深度等机制是避免此问题所必需的。
- 决策树可能不稳定,因为数据中的小变化可能导致生成完全不同的树。通过在集合内使用决策树来减轻此问题。
- 已知在最优性的几个方面甚至对于简单的概念,学习最优决策树的问题是NP完全的。因此,实际的决策树学习算法基于启发式算法,例如贪婪算法,其中在每个节点处进行局部最优决策。这种算法不能保证返回全局最优决策树。这可以通过在集合学习器中训练多个树来减轻,其中特征和样本随替换而随机采样。
- 有些概念很难学习,因为决策树不容易表达它们,例如XOR,奇偶校验或多路复用器问题。
- 如果某些类占主导地位,决策树学习者会创建偏向的树。因此,建议在拟合决策树之前平衡数据集。
不纯度:所有事件概率相同时,不纯度越高,越不纯,越难做决策
熵:信息熵,Ent(D)
基尼系数:
信息增益:第n个分支的权重,样本越多权重越大,ID3
划分决策树时以信息增益为依据,叫做ID3决策树
信息增益率:信息增益/信息价值
CART:
三种不同的决策树:
ID3、C4.5、CART
剪枝:先剪枝,后剪枝--工业上先剪枝用的多,因为计算量少
决策树的最大优点是可以解释,缺点是准确率低--金融用的比较多,包括分类树和回归树
分类树,回归树--高方差,误差大
随机森林--多次测试,减少误差,---随机测试出的特征都是代表原始测试集的特征
bagging--分类树投票决定预测结果,回归树平均数
onehotencoder 独热编码,一列变三列
计算过程
scikit-learn实现
分类
sklearn.tree.DecisionTreeClassifier(criterion=’gini’, splitter=’best’,
max_depth=None, min_samples_split=2, min_samples_leaf=1,
min_weight_fraction_leaf=0.0, max_features=None, random_state=None,
max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None,
class_weight=None, presort=False)
#决策树分类器
#案例:
from sklearn.datasets import load_iris
from sklearn import tree
clf = tree.DecisionTreeClassifier(random_state=0)
iris = load_iris()
clf = clf.fit(iris.data, iris.target)
criterion : string,optional(default =“gini”)
衡量分裂质量的功能。支持的标准是基尼杂质的“gini”和信息增益的“熵”。
splitter : string,optional(default =“best”)
用于在每个节点处选择拆分的策略。支持的策略是“最佳”选择最佳分割和“随机”选择最佳随机分割。
max_depth : int或None,可选(默认=无)树的最大深度。
min_samples_split : int,float,optional(default = 2)中间节点所需的最小样本数
min_samples_leaf : int,float,optional(default = 1)所有叶子节点所需的最小样本数。
min_weight_fraction_leaf : float,optional(默认= 0。)需要在叶节点处的权重总和(所有输入样本)的最小加权分数。当未提供sample_weight时,样本具有相同的权重。
max_features : int,float,string或None,可选(默认=无)寻找最佳分割时要考虑的功能数量
max_leaf_nodes : int或None,可选(默认=无)max_leaf_nodes以最好的方式种树。最佳节点定义为杂质的相对减少。如果None则无限数量的叶节点。
class_weight : dict,dicts 列表,“balanced”或None,默认= None 每个类别的权重对于多输出问题,可以按与y列相同的顺序提供dicts列表。{class_label: weight}
random_state : int,RandomState实例或None,可选(默认=无) 随机种子
presort : bool,optional(默认值= False)是否对数据集使用排序,大数据不排序,小数据可排序