机器学习-----决策树


文章目录

    • 1、概念
    • [2. 决策树的构建过程](#2. 决策树的构建过程)
      • [2.1 特征选择](#2.1 特征选择)
      • [2.2 树的生成](#2.2 树的生成)
      • [2.3 树的剪枝](#2.3 树的剪枝)
    • [3. 决策树的优缺点](#3. 决策树的优缺点)
    • [4. 决策树的应用](#4. 决策树的应用)
      • [4.1 分类任务](#4.1 分类任务)
      • [4.2 回归任务](#4.2 回归任务)
      • [4.3 集成学习](#4.3 集成学习)
    • 代码示例
  • 总结

1、概念

1.1决策树是什么

决策树是通过对样本的训练,建立出分类规则,并对新样本进行预测,属于有监督学习。

根节点:最上面的节点。

叶子节点:能直接看到结果的节点。

非叶子节点:位于中间的节点。

1.2决策树的类型

分类树:用于分类任务,叶节点代表类别标签

回归树:用于回归任务,叶节点代表连续值。

2. 决策树的构建过程

2.1 特征选择

特征选择是决策树构建过程中的关键步骤。常用的特征选择方法有:

  • 信息增益:基于信息熵的减少量来选择特征。
  • 信息增益比:信息增益的归一化版本,用于解决信息增益偏向于取值较多的特征的问题。
  • 基尼指数:用于CART算法,表示数据的不纯度。

2.2 树的生成

决策树的生成过程是一个递归的过程,具体步骤如下:

1.选择最佳特征:根据特征选择方法,选择当前数据集的最佳特征。

  1. 划分数据集:根据最佳特征的取值,将数据集划分为若干子集。

3.递归生成子树:对每个子集递归地应用上述步骤,直到满足停止条件(如所有样本属于同一类别,或没有更多特征可供选择)。

2.3 树的剪枝

为了防止过拟合,决策树通常需要进行剪枝。剪枝分为预剪枝和后剪枝:

  • 预剪枝:在树的生成过程中,提前停止树的生长。
  • 后剪枝:先生成完整的树,然后自底向上地剪去一些子树。

3. 决策树的优缺点

优点

  • 易于理解和解释:决策树的结构直观,易于理解和解释。
  • 处理多种数据类型:可以处理数值型和类别型数据。
  • 不需要数据标准化:决策树不需要对数据进行标准化或归一化处理。

缺点

  • 容易过拟合:决策树容易生成过于复杂的树,导致过拟合。
  • 对噪声敏感:决策树对噪声数据较为敏感,可能导致错误的决策路径。
  • 不稳定性:数据的微小变化可能导致生成完全不同的树。

4. 决策树的应用

4.1 分类任务

决策树广泛应用于分类任务,如垃圾邮件过滤、疾病诊断等。

4.2 回归任务

决策树也可以用于回归任务,如房价预测、股票价格预测等。

4.3 集成学习

决策树是许多集成学习方法的基础,如随机森林、梯度提升树(GBDT)等。

代码示例

需要用到sk-learn库

python 复制代码
import pandas as pd
from sklearn.metrics import confusion_matrix
import matplotlib.pyplot as plt
def cm_plot(y, yp):
    cm = confusion_matrix(y, yp)
    plt.matshow(cm, cmap=plt.cm.Blues)
    plt.colorbar()
    for x in range(len(cm)):
        for y in range(len(cm)):
            plt.annotate(cm[x, y], xy=(x, y), horizontalalignment='center', verticalalignment='center')
    plt.ylabel('True label')
    plt.xlabel('Predicted label')
    return plt

#导入数据
data = pd.read_excel('电信客户流失数据.xlsx')

#将变量与结果划分开
datas = data.iloc[ : , :-1]
target = data.iloc[ : ,-1]


from sklearn.model_selection import train_test_split

datas_train, datas_test, target_train, target_test = \
        train_test_split(datas,target,test_size=0.25,random_state=45)

#定义决策树
from sklearn import tree
tr = tree.DecisionTreeClassifier(criterion='gini', max_depth=7,min_samples_split=7,min_samples_leaf=10,random_state=45)
tr.fit(datas_train,target_train)

'''
训练集混淆矩阵
'''
#训练集预测值
train_predicted = tr.predict(datas_train)

from sklearn import metrics
print(metrics.classification_report(target_train,train_predicted))

cm_plot(target_train, train_predicted).show()


'''
测试集混淆矩阵
'''

test_predicted = tr.predict(datas_test)
print(metrics.classification_report(target_test,test_predicted))
cm_plot(target_test, test_predicted).show()
tr.score(datas_test,target_test)


from sklearn.tree import plot_tree
fig, ax = plt.subplots(figsize= (32,32))
plot_tree(tr,filled=True,ax=ax)
plt.show()

总结

决策树通过递归地选择最优特征对数据集进行分割,最终生成一棵树状模型。每个节点代表一个特征的分裂规则,每个分支代表一个可能的特征值,叶节点则代表最终的预测结果(分类或回归值)。

相关推荐
江畔柳前堤2 小时前
roLabelImg 详细安装教程
开发语言·人工智能·后端·云原生
阿里云大数据AI技术2 小时前
分链路差异化设计的DSP准实时数仓|钛动科技基于阿里云实时计算 Flink 版 + DLF Paimon + EMR Serverless StarRocks 的实践
人工智能·flink
陕西企来客2 小时前
2026年7月AI智能搜索曝光趋势研判
大数据·人工智能·机器学习·ai智能搜索曝光
阿里云大数据AI技术3 小时前
从算力到智能体,面向 Agentic AI 的基础设施演进
人工智能·agent
hangyuekejiGEO4 小时前
GEO技术服务选型指南
大数据·人工智能·python
阿里云大数据AI技术4 小时前
EMR Serverless Spark AI Function 的双维降本实践
人工智能·sql·spark
维基框架4 小时前
GitHub源码处理提速 一趟扫描反而更慢
人工智能·github
冬奇Lab4 小时前
代码库知识库系列(05):向量检索 vs 知识图谱——加了调用图并没有变更好
人工智能
AKAMAI4 小时前
你的源服务器可能是你做出的最昂贵决定
运维·人工智能·云计算
冬奇Lab4 小时前
【无标题】
人工智能·开源