sklearn基础--『监督学习』之决策树分类

决策树分类 算法是一种监督学习算法,它的基本原理是将数据集通过一系列的问题进行拆分,这些问题被视为决策树的叶子节点和内部节点。

决策树的每个分支代表一个可能的决策结果,而每个叶子节点代表一个最终的分类结果。

决策树分类 算法的历史可以追溯到1980年代初,当时研究者开始探索用机器学习来解决分类问题。

在1981年,J.Ross Quinlan开发了ID3算法 ,该算法使用信息增益来选择决策树的最佳划分属性。

后来,在1986年,J.Ross Quinlan提出了C4.5算法 ,该算法引入了剪枝技术,以防止过拟合,该算法还引入了处理连续属性、缺失数据和多值属性等新特性。

在1998年,Jerome Friedman等人提出了CART算法Classification and Regression Trees),该算法采用了二叉树,使得决策树更加简洁和易于解释。

1. 算法概述

决策树 不仅可以用在分类问题 上,也可以用在回归问题 上。

关于决策树回归问题 上的应用,可以参考:sklearn基础--『监督学习』之决策树回归

回到决策树分类 算法上来,构建决策树的有三种算法:

1.1. ID3

ID3算法 的完整名称是Iterative Dichotomiser 3,即迭代二叉树3代。
ID3算法 的核心思想是以信息增益来度量属性的选择,选择分裂后信息增益最大的属性进行分裂。

对于任意样本数据 x ( x 1 , x 2 , . . . , x n ) x(x_1,x_2,...,x_n) x(x1,x2,...,xn),它的信息熵 定义为:
e n t r o p y ( x ) = − ∑ i = 1 n p i log ⁡ 2 ( p i ) entropy(x) = -\sum_{i=1}^n p_i\log_2(p_i) entropy(x)=−∑i=1npilog2(pi)

基于信息熵,信息增益 的公式为:
I G ( T ) = e n t r o p y ( S ) − ∑ v a l u e ( T ) ∣ S x ∣ ∣ S ∣ e n t r o p y ( S x ) IG(T) = entropy(S) - \sum_{value(T)}\frac{|S_x|}{|S|}entropy(S_x) IG(T)=entropy(S)−∑value(T)∣S∣∣Sx∣entropy(Sx)

其中:

  • S S S 表示全部样本的集合
  • ∣ S ∣ |S| ∣S∣ 表示 S S S中样本数量
  • T T T 表示样本的某个特征
  • v a l u e ( T ) value(T) value(T) 表示特征 T T T所有的取值集合
  • S x S_x Sx 是 S S S中特征 T T T的值为 x x x的样本的集合
  • ∣ S x ∣ |S_x| ∣Sx∣ 表示 S x S_x Sx中样本数量

1.2. C4.5

C4.5算法 是以ID3算法 为基础的,它改为使用信息增益率 来作为决策树分裂的依据。

这样,就克服了ID3算法 中信息增益选择属性时偏向选择取值多的属性的不足。

C4.5算法 中引入了一个分裂信息(split information)的项来惩罚取值较多的特征:
S I ( T ) = − ∑ v a l u e ( T ) ∣ S x ∣ ∣ S ∣ log ⁡ ∣ S x ∣ ∣ S ∣ SI(T) = - \sum_{value(T)}\frac{|S_x|}{|S|}\log\frac{|S_x|}{|S|} SI(T)=−∑value(T)∣S∣∣Sx∣log∣S∣∣Sx∣

基于此,信息增益率 的公式为:
g a i n R a t i o ( T ) = I G ( T ) S I ( T ) gainRatio(T)=\frac{IG(T)}{SI(T)} gainRatio(T)=SI(T)IG(T)
I G ( T ) IG(T) IG(T)就是上一节ID3算法 中的信息增益公式。

1.3. CART

CART算法 全称是 classification and regression tree(分类与回归树)。

这个算法既可以用来分类,也可以用来回归,在回归问题上的介绍可以参考。

CART算法 是根据基尼系数(Gini)来划分特征的,每次选择基尼系数最小的特征作为最优切分点。

其中基尼系数的计算方法: g i n i ( p ) = ∑ i = 1 n p i ( 1 − p i ) = 1 − ∑ i = 1 n p i 2 gini(p) = \sum_{i=1}^n p_i(1-p_i)=1-\sum_{i=1}^n p_i^2 gini(p)=∑i=1npi(1−pi)=1−∑i=1npi2

2. 创建样本数据

scikit-learn中的样本生成器make_classification来生成分类用的样本数据。

python 复制代码
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification

# 分类数据的样本生成器
X, y= make_classification(n_samples=1000, n_classes=4, n_clusters_per_class=1, n_informative=6)
plt.scatter(X[:, 0], X[:, 1], marker="o", c=y, s=25)

plt.show()

关于样本生成器 的详细内容,请参考:sklearn基础--『数据加载』之样本生成器

3. 模型训练

首先,分割训练集测试集

python 复制代码
from sklearn.model_selection import train_test_split

# 分割训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

这次按照8:2的比例来划分训练集和测试集。

然后用不同的算法来训练决策树模型:

python 复制代码
from sklearn.tree import DecisionTreeClassifier

reg_names = [
    "ID3算法",
    "C4.5算法",
    "CART算法",
]

# 定义
regs = [
    DecisionTreeClassifier(criterion="entropy"),
    DecisionTreeClassifier(criterion="log_loss"),
    DecisionTreeClassifier(criterion="gini"),
]

# 训练模型
for reg in regs:
    reg.fit(X_train, y_train)

# 在测试集上进行预测
y_preds = []
for reg in regs:
    y_pred = reg.predict(X_test)
    y_preds.append(y_pred)

for i in range(len(y_preds)):
    correct_pred = np.sum(y_preds[i] == y_test)
    print("【{}】 预测正确率:{:.2f}%".format(reg_names[i], correct_pred / len(y_pred) * 100))

# 运行结果
【ID3算法】 预测正确率:71.50%
【C4.5算法】 预测正确率:72.50%
【CART算法】 预测正确率:75.00%

算法的正确率 差别不是特别大。

感兴趣的朋友,可以尝试调整样本生成器部分,生成一些特征较多的数据来看看算法之间的性能差别。

4. 总结

决策树分类 算法广泛应用于图像识别、文本分类、语音识别、信用评分、疾病诊断等众多领域。

例如,在电商平台上,可以通过决策树分类算法对用户的行为数据进行挖掘和分析,实现对用户的精准推荐;

在医疗领域,可以通过对医学数据的分析,辅助医生进行疾病诊断和治疗方案制定。

决策树分类 算法的优势有:

  1. 易于理解和解释,直观地展示出分类的过程
  2. 对于数据集可以进行并行处理,提高了算法的效率
  3. 对于缺失数据和非数值属性有很好的处理能力
  4. 可以处理多分类问题

决策树分类 算法也存在一些劣势

  1. 可能存在过拟合,需要使用剪枝技术来控制
  2. 可能存在偏向性,需要使用加权投票来处理
  3. 对于连续属性和多值属性处理起来比较复杂,需要额外的处理方法
  4. 大规模数据集处理起来比较耗时,需要优化算法或者使用分布式计算等方法
相关推荐
好评笔记9 小时前
机器学习面试八股——常用损失函数
人工智能·深度学习·算法·机器学习·校招
Omics Pro10 小时前
首个!外源天然产物综合性代谢图谱
数据库·人工智能·算法·机器学习·r语言
明志数科13 小时前
工业场景数据标注跟实验室标注有什么不同
人工智能·机器学习
xiaoxiaoxiaolll13 小时前
《Light: Science & Applications》合并BIC实现80倍阈值单模运行:超紧凑光子晶体激光器新突破
人工智能·算法·机器学习
悟乙己13 小时前
因果机器学习DML效果与应用场景探索
人工智能·机器学习
z小猫不吃鱼13 小时前
13 Scaling Law 入门:模型规模、数据规模和计算量是什么关系?
人工智能·深度学习·机器学习
春日见14 小时前
5分钟入门强化学习之动态规划算法与实现
大数据·人工智能·python·算法·机器学习·计算机视觉
scx_link14 小时前
线性回归的总结:
算法·机器学习·线性回归
人工智能培训15 小时前
设备故障?数字孪生提前预警
人工智能·深度学习·神经网络·机器学习·生成对抗网络
风落无尘15 小时前
第十一章《对齐与安全》 完整学习资料
python·安全·机器学习