首页 > 其他分享 >决策树的学习及应用

决策树的学习及应用

时间:2024-03-20 19:58:50浏览次数:23  
标签:剪枝 学习 算法 train 应用 test sklearn 决策树

文章目录

一、决策树是什么

决策树是一种基本的分类与回归方法,它呈树形结构,用于表示基于特征对实例进行分类的过程。决策树可以被看作是if-then规则的集合,也可以认为是定义在特定空间与类空间上的条件概率分布。在机器学习中,决策树是一种预测模型,它代表了对象属性与对象值之间的一种映射关系。决策树的每个内部节点表示一个属性上的测试,每个分支代表一个测试输出,每个叶节点代表一种类别

二、决策树的发展历史

决策树的历史可以追溯到20世纪50年代。最早的决策树算法是由美国统计学家和计算机科学家Arthur L. Samuel于1959年提出的。他的算法被称为“Samuel’s Decision Tree”,用于将棋盘上的棋子移动分类为好的或坏的。

在接下来的几十年里,决策树算法得到了广泛的研究和发展。其中最著名的算法之一是ID3(Iterative Dichotomiser 3),由Ross Quinlan于1986年提出。ID3算法使用信息增益来选择最佳的特征进行节点划分。

随后,C4.5算法在ID3的基础上进行了改进,由Ross Quinlan于1993年提出。C4.5算法引入了对连续特征的处理和缺失值的处理,并且可以处理多分类问题。

在C4.5之后,又出现了一系列的决策树算法,如CART(Classification and Regression Trees)、Random Forests、Gradient Boosting等。这些算法在决策树的基础上进行了改进和扩展,提高了决策树的性能和泛化能力。

总结来说,决策树是一种经典的机器学习算法,它的历史可以追溯到20世纪50年代。从最早的Samuel’s Decision Tree到现在的各种改进算法,决策树在机器学习领域发挥着重要的作用。

三、决策树的相关概念详解

决策树是一种常用的机器学习算法,用于解决分类和回归问题。它通过构建一棵树状结构来进行决策。决策树的每个内部节点表示一个特征或属性,每个分支代表该特征的一个取值,而每个叶子节点表示一个类别或一个数值。

  • 特征选择:决策树的构建过程中,需要选择最佳的特征来进行划分。常用的特征选择方法有信息增益、信息增益比、基尼指数等。
  • 划分准则:决策树的划分准则用于衡量特征划分的好坏程度。常用的划分准则有信息增益、基尼指数等。
  • 剪枝:决策树的剪枝是为了防止过拟合,提高模型的泛化能力。剪枝可以分为预剪枝和后剪枝两种方法。

决策树的优点包括易于理解和解释、能够处理离散和连续特征、能够处理多分类问题等。然而,决策树也存在一些缺点,如容易过拟合、对噪声敏感等。

四、决策树的构建过程

决策树的构建过程可以分为两个阶段:训练和预测。在训练阶段,决策树根据给定的训练数据集学习特征之间的关系,并生成一棵树。在预测阶段,决策树根据输入的特征值,沿着树的路径进行判断,最终得到预测结果。

  • 选择最佳特征:根据特征选择算法,从所有特征中选择一个最佳特征作为当前节点的划分标准。常用的特征选择算法有信息增益、信息增益比、基尼指数等。
  • 划分数据集:根据选择的最佳特征,将数据集划分为多个子集,每个子集对应一个特征值。如果某个子集中的样本属于同一类别,则该子集成为叶节点,否则继续进行下一步。
  • 递归构建子树:对于每个子集,重复步骤1和步骤2,直到满足停止条件。停止条件可以是达到预定的树深度、子集中的样本数小于某个阈值或者子集中的样本属于同一类别。
  • 剪枝处理:在构建完整的决策树后,进行剪枝处理以防止过拟合。剪枝可以通过预剪枝和后剪枝两种方式实现。预剪枝是在构建过程中进行剪枝,而后剪枝是在构建完整的决策树后进行剪枝。

五、决策树的代码示例

  1. 使用sklearn库实现决策树分类器:

from sklearn import datasets
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 加载数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target

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

# 创建决策树分类器
clf = DecisionTreeClassifier()

# 训练模型
clf.fit(X_train, y_train)

# 预测
y_pred = clf.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print("准确率:", accuracy)
  1. 使用sklearn库实现决策树回归器:
python
from sklearn import datasets
from sklearn.tree import DecisionTreeRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

# 加载数据集
boston = datasets.load_boston()
X = boston.data
y = boston.target

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

# 创建决策树回归器
regressor = DecisionTreeRegressor()

# 训练模型
regressor.fit(X_train, y_train)

# 预测
y_pred = regressor.predict(X_test)

# 计算均方误差
mse = mean_squared_error(y_test, y_pred)
print("均方误差:", mse)
  1. 使用自定义的决策树算法实现决策树:
# 决策树算法的实现代码
def decision_tree(data):
    # 实现决策树算法的代码
    pass

# 调用决策树算法
data = load_data()
tree = decision_tree(data)

标签:剪枝,学习,算法,train,应用,test,sklearn,决策树
From: https://blog.csdn.net/FXSuperLee/article/details/136838866

相关文章

  • 学习selenium
    importrequestsimportbs4fromselenium.webdriver.common.byimportByimportpandasaspddriverPath="C:\ProgramFiles(x86)\Microsoft\Edge\Application\msedgedriver.exe"url='https://so.gushiwen.cn/'url2='gushi/tangsh......
  • 芒果YOLOv5改进86:上采样Dysample:顶会ICCV2023,轻量级图像增采样器,通过学习采样来学习上
    ......
  • (day 13)JavaScript学习笔记(对象1)
    概述        这是我的学习笔记,记录了JavaScript的学习过程。在写博客的时候我会尽量详尽的记录每个知识点。如果你完全没接触过JavaScript,那么这一系列的学习笔记可能会对你有所帮助。    今天学习对象,主要是创建对象、对象属性、省略key、遍历对象属性、删......
  • 订单号规则,不能重复。redis去重 redis集合set应用
    订单号规则,不能重复。redis去重redis集合set应用redis锁定商品解决并发售卖问题RedisUtil工具类https://www.cnblogs.com/oktokeep/p/17917833.html需求背景:订单号根据日期反转加上随机数,订单号是否重复,前提是确保当天的订单号不重复,可以确保全局系统中的订单号不重复。//......
  • Blazor学习记录三
    11.自定义组件与消费端变量之间实现双向绑定这也实现了从子组件到父组件的状态传递。1.定义一个数据类型为T的参数。2.再定义一个参数名+[Changed]为名称,EventCallback结构类型的参数。注意T类型要和第一步中的参数数据类型T相同。3.定义一个被用于元素中的C#事件触发的事件......
  • CCS5.5帮助文档Help学习
    技巧:纯英文文档,用微信扫一扫翻译。主要看以下三个,按下面顺序:C/C++DevelopmentUserGuide:新建一个项目并运行的demo界面流程,依据操作一遍。【建个小demo,从头到尾操作一遍。3h。】CodeComposerStudioHelp:界面图标认识,用到再查也行。【5分钟大概瞄一眼】C6000CompilerVers......
  • 【机器学习】科学库使用第2篇:机器学习概述,学习目标【附代码文档】
    机器学习(科学计算库)完整教程(附代码资料)主要内容讲述:机器学习(常用科学计算库的使用)基础定位、目标,机器学习概述定位,目标,学习目标,学习目标。机器学习概述,1.3人工智能主要分支学习目标,学习目标,1主要分支介绍,2小结。机器学习概述,1.5机器学习算法分类学习目标,学习目标,1监......
  • Vue学习笔记54--动画效果+过度效果
    动画效果示例一:Test.vue——主要代码文件<template><div><button@click="isShow=!isShow">显示.隐藏</button><!--方式一class=comeorgo--><!--<h2v-show="isShow"class="come">你......
  • 1、【AI技术新纪元:Spring AI解码】Spring AI 应用框架
    SpringAI应用框架SpringAI是面向人工智能工程的应用框架。其目标是将Spring生态系统的设计原则如可移植性和模块化设计应用于AI领域,并推广使用POJOs(PlainOldJavaObjects,简单旧式Java对象)作为应用程序的构建块。特点跨AI提供商的可移植API支持,涵盖聊天、文本到图像......
  • 如何理解UDP 和 TCP? 区别? 应用场景?
    一、UDPUDP(UserDatagramProtocol),用户数据包协议,是一个简单的面向数据报的通信协议,即对应用层交下来的报文,不合并,不拆分,只是在其上面加上首部后就交给了下面的网络层也就是说无论应用层交给UDP多长的报文,它统统发送,一次发送一个报文而对接收方,接到后直接去除首部,交给上面的应......