根据菜菜的课程进行整理,方便记忆理解
代码位置如下:
决策树的优缺点
决策树优点
- 易于理解和解释,因为树木可以画出来被看见
- 需要很少的数据准备。其他很多算法通常都需要数据规范化,需要创建虚拟变量并删除空值等。但请注意,sklearn中的决策树模块不支持对缺失值的处理。
- 使用树的成本(比如说,在预测数据的时候)是用于训练树的数据点的数量的对数,相比于其他算法,这是一个很低的成本。
- 能够同时处理数字和分类数据,既可以做回归又可以做分类。其他技术通常专门用于分析仅具有一种变量类型的数据集。
- 能够处理多输出问题,即含有多个标签的问题,注意与一个标签中含有多种标签分类的问题区别开
- 是一个白盒模型,结果很容易能够被解释。如果在模型中可以观察到给定的情况,则可以通过布尔逻辑轻松解释条件。相反,在黑盒模型中(例如,在人工神经网络中),结果可能更难以解释。
- 可以使用统计测试验证模型,这让我们可以考虑模型的可靠性。
- 即使其假设在某种程度上违反了生成数据的真实模型,也能够表现良好
决策树的缺点
- 决策树学习者可能创建过于复杂的树,这些树不能很好地推广数据。这称为过度拟合。修剪,设置叶节点所需的最小样本数或设置树的最大深度等机制是避免此问题所必需的,而这些参数的整合和调整对初学者来说会比较晦涩
- 决策树可能不稳定,数据中微小的变化可能导致生成完全不同的树,这个问题需要通过集成算法来解决。
- 决策树的学习是基于贪婪算法,它靠优化局部最优(每个节点的最优)来试图达到整体的最优,但这种做法不能保证返回全局最优决策树。这个问题也可以由集成算法来解决,在随机森林中,特征和样本会在分枝过程中被随机采样。
- 有些概念很难学习,因为决策树不容易表达它们,例如XOR,奇偶校验或多路复用器问题。
- 如果标签中的某些类占主导地位,决策树学习者会创建偏向主导类的树。因此,建议在拟合决策树之前平衡数据集。
分类树参数列表
criterion | 字符型,可不填,默认基尼系数('gini") 用来衡量分枝质量的指标.即衡量不纯度的指标,输入'gini'用基尼系数,或输入’entropy' 使用信息增益(Information Gain) |
---|---|
splitter | 字符型,可不填,默认最佳分枝('best') 确定每个节点的分枝策略 输入"best"使用最佳分枝,或输入"random"使用最佳随机分枝 |
max_depth | 整数或None,可不填,默认None 树的最大深度。如果是None,树会持续生长直到所有叶子节点的不纯度为0,或者直到每个叶子节点所含的样本量都小于参数min_ samples_ split中输入的数字 |
min_samples_split | 整数或浮点数,可不填,默认=2 一个中间节点要分枝所需要的最小样本量。如果一个节点包含的样本量小于 min_ samples_ split中填写的数字,这个节点的分枝就不会发生,也就是说,这个节点一定会成为一个叶子节点 1) 如果输入整数,则认为输入的数字是分枝所需的最小样本量 2) 如果输入浮点数则认为输入的浮点数是比例.输入的浮点数 * 输入模型的数据集的样本量(n_samples)是分枝所需的最小样本量 |
min_sample_leaf | 整数或浮点数,可不填,默认=1 一个叶节点要存在所需要的最小样本量。一个节点在分枝后的每了子节点中,必须要包含至 少min_sample_leaf个训练样本,否则分枝就不会发生.这个参数可能会有着使模型更平滑的效果,尤其是在回归中 1) 如果输入整数,则认为输入的数字是叶节点存在所需要的最小的样本量 2) 如果输入浮点数,则认为输入的浮点数是比例 输入的浮点数 * 输入模型的数据集的样本量(n_samples)是叶节点存在所需的最小样本量 |
min_weight_fraction_leaf | 浮点数,可不填,默认0 一个叶节点要存在所需要的权重占输入模型的数据集的总权重的比例。 总权重由fit接口中的sample_weight参数确定当sample_weight是None时,默认到有样本的权重相同 |
max_feature | 整数,浮点数,字符型或None,可不填,默认None 在做最佳分枝的时候,考虑的特征个数 1) 输入整数,则每一次分枝都考虑max_features个持征 2) 输入浮点数,则认为输入的浮点数是比例,每次分枝考虑的特征的数目是max_features 输入模型的数据集的特征个数(n_features) 3)输入auto",采用n_features的平方根作为分枝时考虑的特征数目 4)输入‘'sqrt,采用n_features平方根作为分枝时考虑的特征数目 5)输入‘log2',采用log2 (n_features)作为分枝时考虑的特征数目 6)输入“None,n_features就是分枝时考虑的特征数目 注意:如果在限制的max_features中,决策树无法找到节点样本上至少一个有效的分枝,那对分枝的搜索不会停止决策树将会检查比限制的max_features数目更多的特征 |
random_state | 整数,sklearn中设定好的RandomState实例,或None,可不填,默认None 1) 输入整数,random state是由随机数生成器生成的随机数种子 2) 输入RandomState实例则random_ state是一个随机数生成器 3) 输入None,随机数生成器会是np.random模块中的一个Randomstate实例 |
max_leaf_nodes | 整数或None,可不填默认None 最大叶节点数量。在最佳分枝方式下以max_leaf_nodes为限制来生长树。如果是None, 则没有叶节点数量的限制。 |
min_impurity_decrease | |
min_impurity_split | 浮点数 防止树生长的阈值之一,如果一个节点的不纯度高于min_impurity_split,这个节点就会被分枝否则的话这个节点就只能是叶子节点. |
class_weight | |
presort | 布尔值,可不填,默认是None 是否预先分配数据以加快拟合中最佳分枝的发现‘在大型数框集上使用默认设置决策树时,将这个参数设置为true可能会延长训练过程,减低训练速度.当使用较小的数据集或限制树的深度时,设置这个参数为true可能会加快训练速度。 |
属性列表
classes_ | 输出一个数组(array)或者一个数组的列表(list),结构为标签的数目(n_classes) 输出所有标签 |
---|---|
feature_importances_ | 输出一个数组,结构为特征的数目(n_features) 返回每个持征的重要性.一般是这个特征在多次分枝中产生的信息增益的综合,也被称为基尼重要性“(Gini Importance) |
max_features_ | 输出整数 参数max_features的推断值 |
n_classes_ | 输出整数或列表 标签类别的数据 |
n_features_ | 在训练模型(fit)时使用的特征个数 |
n_outputs_ | 在训练模型(fit)时输出的结果的个数 |
tree_ | 输出一个可以导出建好的树结构的端口,通过这个端口,可以访问树的结构和低级属性,包括但不仅限于查看: 1) 二叉树的结构 2) 每个节点的深度以及它是否是叶子 3) 使用decision_path方法的示例到达的节点 4) 用apply这个接口取样出的叶子 5) 用于预测样本的规则 6) 一组样本共享的决策路径 |
接口列表
apply(X[,check_input]) | 输入测试集或样本点,返回每个样本被分到的叶节点的索引 check_input是接口apply的参数,输入布尔值,默认True,通常不使用 |
---|---|
decision_path(X[,check_input]) | 输入测试集或样本点,返回树中的决策树结构 Check_input同样是参数 |
fit(X,y[,sample_weight,check_input,...]) | 训练模型的接口,其中x代表训练样本的特征,y代表目标数据即标签,X和y都必须是类数组结构,一般我们都使用ndarray来导入 sample_weight是fit的参数,用来为样本标签设置权重,输入的格式是一个和测试集样本量一致长度的数字数组,数组中所带有的数字表示每个样本量所占的权重,数组中数字的综合代表整个测试集的权重总数 返回训练完毕的模型 |
get_params([deep]) | 布尔值,获取这个模型评估对象的参数。接口本身的参数deep,默认为True,表示返回此估计器的参数并包含作为估算器的子对象。 返回模型评估对象在实例化时的参数设置 |
predict(X[,check_input]) | 预测所提供的测试集x中样本点的标签,这里的测试集K必须和fit中提供的训练集结构一致 返回模型预测的测试样本的标签或回归值 |
predict_log_proba(X) | 预测所提供的测试集X中样本点归属于各个标签的对数概率 |
predict_proba(X[,check_input]) | 预测所提供的测试集x中样本点归属于各个标签的概率 返回测试集中每个样本点对应的每个标签的概率,各个标签按词典顺序排序。 概率是叶中相同类的样本的分数 |
score(X,y[,sample_weight]) | 用给定测试数据和标签的平均准确度作为模型的评分标准,分数越高模型越好。其中x是测试集,y是测试集的真实标签。sample_weight是score的参数,用法与fit的参数一致 返回给定决策树数据和标签的平均准确度在多标签分类中,这个指标是子集精度. |
set_params(**params) | 可以为已经建立的评估器重设参数 返回重新设置的评估器本身 |