Scikit-Learn决策树




1、决策树分类


决策树是一种简单但广泛使用的分类器,它通过训练数据构建决策树,对未知的数据进行分类。决策树在机器学习知识结构中的位置如下:

在这里插入图片描述
决策树(Decision tree)是基于已知各种情况(特征取值)的基础上,通过构建树型决策结构来进行分析的一种方式,是常用的有监督的分类算法

决策树模型呈树形结构,在分类问题中,一颗决策树可以视作if-then规则的集合。模型具有可读性,分类速度快的特点,在各种实际业务建模过程中广泛使用

决策树模型模拟人类决策过程。决策树是一种预测模型,代表的是对象属性与对象值之间的映射关系

决策树模型的核心由以下几部分组成:

  • 节点和有向边组成
  • 节点有内部节点和叶结点两种类型
  • 内部节点表示一个特征,叶节点表示一个类

在这里插入图片描述
其中,根节点是第一个内部节点;每个内部结点表示一个属性的测试,每个分支表示一个测试输出(A属性取某类值的可能结果),每个叶结点代表一种类别。当属性A取值为0时,则对下一个属性B进行测试;若属性A取值为1时,则对应于叶结点(决策结果)

决策树的学习过程是,通过对训练样本的分析来确定划分属性,即内部节点所对应的属性;决策树的预测过程是,将测试示例从根节点开始,沿着划分属性所构成的判定测试序列下行,直到叶节点

更多关于决策树和决策树算法的介绍详见文章:传送门

2、Scikit-Learn决策树分类

2.1、Scikit-Learn决策树API


sklearn.tree.DecisionTreeClassifier是Scikit-Learn决策树分类的API:

class 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, class_weight=None, ccp_alpha=0.0, monotonic_cst=None)

官方对该API的描述如下:

DecisionTreeClassifier是一个既能够进行二分类,也能够进行多类分类的类。与其他分类器一样,DecisionTreeClassifier使用两个数组作为输入,经拟合后,该模型可用于预测其他样本的类别

官方文档:https://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html#sklearn.tree.DecisionTreeClassifier

中文官方文档:https://scikit-learn.org.cn/view/784.html

API参数及说明如下:

参数 说明
criterion 用于衡量节点(分支)划分质量的指标,默认为gini(基尼系数)。其他取值还有entropy(信息熵),这种指标使用父节点的信息熵与子节点的信息熵之差(信息增益);log_loss(逻辑损失)
splitter 用于在每个节点上选择划分的策略,默认为best(最佳划分)。其他还有random(随机划分)
max_depth 决策树的最大深度,默认为None,表示将节点展开,直到所有叶子都是纯净的,或者直到所有叶子都包含少于min_samples_split个样本,即没有限制。大于最大深度的部分将被剪掉
min_samples_split 拆分内部节点所需的最少样本数,默认为2,表示每个节点至少需要2个样本才能进行划分。中间节点样本数量小于min_samples_split的将被剪掉
min_samples_leaf 在叶节点处需要的最小样本数,默认为1,表示每个叶子节点至少需要1个样本才能停止划分。样本数量小于min_samples_leaf的叶子节点将被剪掉
min_weight_fraction_leaf 在所有叶节点处(所有输入样本)的权重总和中的最小加权分数,默认为0.0。如果未提供sample_weight,则样本的权重相等
max_features 寻找最佳划分时要考虑的特征数量,默认为None或auto,使用全部特征。其他取值还有sqrt(sqrt(n_features));log2(log2(n_features));也可使用int类型直接指定
random_state 用于控制估算器的随机性,设置随机数生成器的种子
max_leaf_nodes 用于控制决策树最多有多少个叶子节点,默认为None,叶子节点的数量不受限制
min_impurity_decrease 用于控制每个节点最少需要减少多少不纯度才能进行划分,默认值为0.0,表示每个节点至少需要减少0个不纯度才能进行划分
class_weight 目标类别的权重,字典类型,默认为None,所有分类的权重为1
ccp_alpha 用于最小代价复杂度修剪的复杂度参数,默认值为0.0,表示不执行修剪
monotonic_cst 要对每个特征强制实施的单调性约束,默认为None(0),不应用任何约束。1表示单调递增;-1表示单调递减

常用属性及说明如下:

属性 说明
feature_importances_ 返回每个特征的重要程度,一维数组类型
max_features_ 拟合期间的特征数
n_classes_ 类别数(单输出问题),或者一个包含所有类别数量的列表(多输出问题)
n_features_in_ 拟合期间的特征数
feature_names_in_ 拟合期间的特征名称

常用方法及说明如下:

方法 说明
fit(X,y) 根据训练集构建决策树分类器
predict(X) 预测X的类或回归值
score(X,y) 返回模型在给定测试数据和标签上的平均准确度
get_depth() 返回决策树的深度
get_n_leaves() 返回决策树的叶子数
apply(X) 返回每个样本被预测为叶子的索引
cost_complexity_pruning_path(X,y) 在最小化成本复杂性修剪期间计算修剪路径
decision_path(X) 返回树中的决策路径

2.2、Scikit-Learn决策树初体验


下面我们使用Scikit-Learn提供的API制作两个交错的半圆形数据集来演示Scikit-Learn决策树的基本使用

1)制作数据集

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets

# 生成两个交错的半圆形状数据集
X, y = datasets.make_moons(noise=0.25, random_state=666)
plt.scatter(X[y == 0, 0], X[y == 0, 1])
plt.scatter(X[y == 1, 0], X[y == 1, 1])
plt.show()

在这里插入图片描述

2)训练决策树分类模型

from sklearn.tree import DecisionTreeClassifier      # 决策树分类器

# 使用CART分类树的默认参数
dt_clf = DecisionTreeClassifier()
# dt_clf = DecisionTreeClassifier(max_depth=2, max_leaf_nodes=4)
# 训练拟合
dt_clf.fit(X, y)

3)绘制决策边界

# 绘制决策边界
decision_boundary_fill(dt_clf, axis=[-1.5, 2.5, -1.0, 1.5])
plt.scatter(X[y == 0, 0], X[y == 0, 1]
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值