【机器学习】——决策树模型

 💻博主现有专栏:

                C51单片机(STC89C516),c语言,c++,离散数学,算法设计与分析,数据结构,Python,Java基础,MySQL,linux,基于HTML5的网页设计及应用,Rust(官方文档重点总结),jQuery,前端vue.js,Javaweb开发,设计模式、Python机器学习等
🥏主页链接:

                Y小夜-CSDN博客

目录

🎯本文目的

🎯成绩预测决策树模型

🎃内容

🎃代码解析

🎯不同参数的决策树算法和随机森林算法

🎃内容

🎃代码解析

🎯心脏病数据集寻找最佳max_features参数。

🎃内容

🎃代码解析

🎯总结


🎯本文目的

  • (一)理解决策树的基本原理
  • (二)能够使用sklearn.datasets制作分类数据集
  • (三)能够使用sklearn库进行决策树模型的训练和预测
  • (四)掌握随机森林的简单原理
  • (五)能够使用sklearn库进行随机森林的训练和预测

🎯成绩预测决策树模型

🎃内容

如下表的所示训练集数据和验证集数据,其中“性别”、“机器学习作业”是属性特征,“成绩高”是标记。

表 1 训练集数据

编号

性别

机器学习作业

成绩高

1

喜欢

优秀

2

喜欢

优秀

3

不喜欢

普通

4

不喜欢

普通

5

不喜欢

优秀

表 2 测试集数据

编号

性别

机器学习作业

成绩高

6

喜欢

优秀

7

喜欢

普通

8

不喜欢

普通

9

不喜欢

普通

要求:

数据集中, “性别”特征,用0表示女,1表示男, “喜欢”机器学习作业特征中,1表示喜欢,0表示不喜欢 , “成绩”列,表示最后分类的标签,1表示成绩“优秀”,0表示成绩普通”)

  1. 创建决策树模型,并使用训练集数据对模型进行训练。
  2. 查看并输出模型在测试集上的准确率?
  3. 使用tree.plot_tree()函数图形化显示训练好的决策树。
  4. 决策树模型的参数criterion默认值为“gini”,表示使用的是CART算法,可以尝试设置criterion = 'entropy',让模型使用ID3算法,观察一下训练的模型是否相同。

🎃代码解析

import pandas as pd
from sklearn import tree
data={'性别':[1,0,1,1,0],'机器学习作业':[1,1,0,0,0],'成绩高':[1,1,0,0,1]
}
df=pd.DataFrame(data)
df.head()

        这段代码创建了一个包含性别、机器学习作业和成绩高三个特征的数据集,并将其存储在一个Pandas DataFrame中。这个DataFrame对象可以用于实现一些机器学习的功能,例如:

  1. 分析性别、机器学习作业和成绩高之间的关系。
  2. 使用决策树算法训练一个模型,以预测成绩高是否与性别和机器学习作业有关。
  3. 可以进行特征工程,如标准化或归一化,然后用于其他机器学习模型的训练和预测。

x=df.drop('成绩高',axis=1)
y=df['成绩高']
clf=tree.DecisionTreeClassifier(max_depth=2)
clf.fit(x,y)

数据分割

  • x = df.drop('成绩高', axis=1): 从 DataFrame 中去掉'成绩高'这一列,将其余的列作为特征。这将得到包含"性别"和"机器学习作业"的特征数据。
  • y = df['成绩高']: 提取'成绩高'这一列,作为目标变量。

创建决策树模型

  • clf = tree.DecisionTreeClassifier(max_depth=2): 创建一个决策树分类器,最大深度为2。这意味着决策树最多可以有两个分支。较小的最大深度可以避免过拟合,但也可能导致模型欠拟合。

训练模型:

  • clf.fit(x, y): 使用特征数据 x 和目标数据 y 来训练决策树分类器。这个步骤完成后,模型将会根据给定的特征来预测目标变量。

在这个例子中,模型被训练来预测“成绩高”是否与“性别”和“机器学习作业”相关。经过训练后,可以使用这个模型来预测新的数据样本中的"成绩高"状态。


data1={'性别':[1,0,1,0],'机器学习作业':[1,1,0,0],'成绩高':[1,0,0,0]
}
df1=pd.DataFrame(data1)
x1=df1.drop('成绩高',axis=1)
y1=df1['成绩高']
clf.score(x1,y1)

  1. 创建了一个新的 DataFrame df1,包含了与之前相同的特征:'性别'和'机器学习作业',以及新的目标变量 '成绩高'。
  2. 提取了特征和目标变量,分别存储在 x1 和 y1 中。
  3. 使用 clf.score(x1, y1) 方法计算了模型在新数据集上的准确率。

tree.plot_tree(clf)

    clf 是你的决策树模型,x 是特征数据。这段代码将绘制出决策树的结构,并使用特征名和类别名进行标注。你可以运行这段代码来查看决策树的结构。


clf2=tree.DecisionTreeClassifier(max_depth=2,criterion = 'entropy')
clf2.fit(x,y)
tree.plot_tree(clf2)

        

        创建了一个新的决策树分类器 clf2,并指定了最大深度为2以及使用信息熵(entropy)作为分裂标准。现在,你可以使用 tree.plot_tree() 函数来可视化这个新的决策树模型。

🎯不同参数的决策树算法和随机森林算法

🎃内容

(1)生成一个简单的数据集。

(2)尝试用不同参数的决策树算法进行试验。

(3)尝试用不同参数的随机森林进行试验,查看随机森林的预测准确率是否更高

🎃代码解析

from sklearn.datasets import make_blobs
x,y=make_blobs(n_samples=100,centers=3,n_features=2)
x.shape
import matplotlib.pyplot as plt
plt.figure(figsize=(9,6))
plt.scatter(x[:,0],x[:,1],c=y,cmap='autumn',edgecolors='k')

        使用了 make_blobs 函数生成了一个包含100个样本,2个特征和3个聚类中心的数据集。接下来,你绘制了这个数据集的散点图,其中不同颜色的点表示不同的聚类。这样的可视化有助于直观地理解数据的分布和聚类情况。


max_depth=1时:

from sklearn import tree 
import numpy as np
clf1=tree.DecisionTreeClassifier(max_depth=1)
clf1.fit(x,y)
x_min,x_max=x[:,0].min()-1,x[:,0].max()+1
y_min,y_max=x[:,1].min()-1,x[:,1].max()+1
xx,yy=np.meshgrid(np.arange(x_min,x_max,0.02),np.arange(y_min,y_max,0.02))
z=clf1.predict(np.c_[xx.ravel(),yy.ravel()])
z=z.reshape(xx.shape)
plt.pcolormesh(xx,yy,z,cmap='spring')
plt.scatter(x[:,0],x[:,1],c=y,cmap='autumn',edgecolors='k',s=80)
plt.xlim(xx.min(),xx.max())
plt.ylim(yy.min(),yy.max())
plt.title("Tree:(max_depth=1)")

        使用决策树模型 clf1 对数据进行了分类,并绘制了分类结果的决策边界。决策边界被绘制成了色块,不同的颜色表示不同的分类区域。另外,你还绘制了原始数据的散点图,不同颜色的点表示不同的类别。

这个图表清晰地展示了决策树模型在最大深度为1时学到的决策边界。由于最大深度限制,决策树只能进行一次分裂,因此决策边界是一条直线。这种可视化方式有助于理解模型的学习情况和对数据的分类效果。


max_depth=2时

from sklearn import tree 
import numpy as np
clf1=tree.DecisionTreeClassifier(max_depth=2)
clf1.fit(x,y)
x_min,x_max=x[:,0].min()-1,x[:,0].max()+1
y_min,y_max=x[:,1].min()-1,x[:,1].max()+1
xx,yy=np.meshgrid(np.arange(x_min,x_max,0.02),np.arange(y_min,y_max,0.02))
z=clf1.predict(np.c_[xx.ravel(),yy.ravel()])
z=z.reshape(xx.shape)
plt.pcolormesh(xx,yy,z,cmap='spring')
plt.scatter(x[:,0],x[:,1],c=y,cmap='autumn',edgecolors='k',s=80)
plt.xlim(xx.min(),xx.max())
plt.ylim(yy.min(),yy.max())
plt.title("Tree:(max_depth=2)")


from sklearn.ensemble import RandomForestClassifier
from sklearn import set_config
set_config(print_changed_only=False)
x,t=make_blobs(n_samples=100,centers=3,n_features=2,random_state=42)
forest= RandomForestClassifier().fit(x,y)
Forest

   RandomForestClassifier() 创建了一个随机森林分类器对象,并使用 fit() 方法将其拟合到数据集 (x, y) 上。然后,你将这个分类器赋值给了变量 forest

🎯心脏病数据集寻找最佳max_features参数。

🎃内容

(1)使用本章的心脏病数据集,找到最佳的max_features参数,以及该参数下模型在验证集上的准确率。

🎃代码解析

import pandas as pd
heart=pd.read_csv('bank/heart.csv')
heart.head()

        导入了 pandas 库并使用 read_csv() 函数读取了名为 "heart.csv" 的文件,并将其存储在名为 heart 的 DataFrame 中。然后,你使用 head() 方法查看了 DataFrame 的前几行数据。


from sklearn import tree 
clf_tree=tree.DecisionTreeClassifier()
from sklearn.model_selection import train_test_split
x=heart.drop('target',axis=1)
y=heart['target']
x_train,x_test,y_train,y_test=train_test_split(x,y,random_state=0)
clf_tree.fit(x_train,y_train)
print(clf_tree.score(x_test,y_test))

使用了 scikit-learn 库中的决策树分类器来建立一个模型,并对心脏病数据集进行了训练和评估。

  1. 首先,你使用 tree.DecisionTreeClassifier() 创建了一个决策树分类器对象,并将其赋值给 clf_tree 变量。
  2. 然后,你从 sklearn.model_selection 中导入了 train_test_split 函数,用于将数据集划分为训练集和测试集。
  3. 接着,你准备了特征和标签数据。特征数据 x 是除了目标列之外的所有列,而标签数据 y 是目标列。
  4. 使用 train_test_split 函数将数据集划分为训练集和测试集,并指定了 random_state 参数以确保结果的可重复性。
  5. 最后,使用训练集训练了决策树分类器,并使用测试集评估了模型的性能,打印了分类器在测试集上的准确率。

from sklearn.ensemble import RandomForestClassifier
import matplotlib.pyplot as plt
score_list=[] 
for i in range(10,100,10):clf_forest=RandomForestClassifier(n_estimators=i,random_state=0)clf_forest.fit(x_train,y_train)score_list.append(clf_forest.score(x_test,y_test))
plt.plot(range(10,100,10),score_list)

使用了随机森林分类器来建立模型,并对不同数量的决策树数量进行了评估,以确定最佳数量的决策树。具体来说,你进行了以下操作:

  1. 导入了 RandomForestClassifier 类和 matplotlib.pyplot 模块。
  2. 创建了一个空列表 score_list 用于存储不同数量决策树的性能评分。
  3. 使用 for 循环迭代不同的决策树数量(从 10 到 90,步长为 10)。
  4. 对于每个迭代,使用当前数量的决策树创建随机森林分类器对象,并将其拟合到训练数据集上。
  5. 计算并存储该模型在测试集上的准确率。
  6. 最后,使用 plt.plot() 函数绘制决策树数量与模型准确率之间的关系。

🎯总结

决策树模型是一种基本且常用的机器学习算法,它通过树状结构来进行分类和回归任务。以下是关于决策树模型的知识点总结:

  1. 基本概念

    • 决策树是一种树状结构,其中每个内部节点表示一个特征或属性测试,每个分支代表一个测试结果,每个叶节点代表一个类别标签或回归值。
    • 决策树的目标是通过将数据集划分为不同的区域来构建一个可以对新实例进行预测的模型。
  2. 构建过程

    • 决策树的构建过程通常采用递归地将数据集划分为子集的方式,直到满足某个停止条件。
    • 划分过程通常基于某种度量指标(如信息增益、基尼不纯度等),选择最佳的划分特征。
  3. 特征选择

    • 特征选择是决策树算法中的关键步骤,常用的特征选择指标包括信息增益、基尼不纯度、方差等。
  4. 剪枝

    • 决策树容易过拟合训练数据,因此需要进行剪枝操作来防止过拟合。剪枝分为预剪枝和后剪枝两种方式。
  5. 优缺点

    • 优点包括易于理解和解释、对缺失值不敏感、能够处理不相关特征等。
    • 缺点包括容易过拟合、对噪声敏感、不稳定性等。
  6. 应用领域

    • 决策树模型广泛应用于分类和回归任务,包括金融、医疗、工业等各个领域。
  7. 算法变体

    • 基于决策树模型衍生出了许多变体算法,如随机森林、梯度提升树等,用于进一步提升模型性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/42865.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

材料科学SCI期刊,IF=6+,2个月录用,审稿速度非常快

一、期刊名称 Journal of Materials Research and Technology 二、期刊简介概况 期刊类型:SCI 学科领域:材料科学 影响因子:6.2 中科院分区:2区 三、期刊简介 《材料研究与技术杂志》为发表与材料加工、性能和性能相关的理论…

el-tree 获取当前勾选节点的选中状态以及选中值对象 触发check-change多次事件问题原因

1.需求 现在需要一个树状结构的资产树 但是现在需求是 获取当前选中的值的状态是选中还是取消选中 然后再用当前选中 or 取消选中的值 进行 选中 or 取消选中的操作 一开始使用的是 check-change 方法 接收参数如图 但是我勾选父节点 或者 子节点后 他会打印一堆数据 是因…

园区智慧能源可视化:智能监控与优化能源管理

通过图扑可视化技术,搭建智慧光伏园区,实时监控园区光伏系统的运行状态,分析数据并优化能源管理,提高发电效率和维护效率,助力园区实现绿色可持续发展。

Java-01-源码篇-04集合-04-Properties

目录 一,简介 二,源码讲解 2.1 Properties 继承结构 2.2 Properties 属性分析 2.3 Properties 构造器 2.4 Properties 加载配置资源文件 2.4.1 load(inputStream) 2.4.2 load(Reader) 2.4.3 load0(LineReader lr) 2.4.4 load测试 2.5 Properti…

电子产品分销商 DigiKey 在新视频系列中探索智能城市中的AI

电子产品分销商DigiKey推出了一系列新视频,深入探讨了AI在智能城市中的集成应用。这个名为“智能世界中的AI”的系列是其“城市数字”视频系列的第四季,它审视了城市环境中从基础设施到公共服务的多种AI硬件和软件的部署情况。 该系列由电子制造商莫仕&…

VMware取消中文支持,替换vSAN解决方案提上日程!

What is vSAN ? 是一款软件定义的企业存储解决方案,支持超融合基础架构系统。vSAN与VMware vSphere 完全集成在一起,作为ESXi Hypervisor内的分布式软件层,通过整合、池化ESXi各个主机上的存储资源,为vSphere虚拟化平…

Python静态类型检查工具库之mypy使用详解

概要 在 Python 开发中,类型错误是常见的问题,尤其在大型项目中,类型错误可能导致代码难以调试和维护。为了提高代码的可靠性和可维护性,静态类型检查工具如 mypy 应运而生。mypy 是一个静态类型检查工具,它通过在 Python 代码中添加类型注释,实现编译时的类型检查,帮助…

【数据库】MySQL基本操作语句

目录 一、SQL语句 1.1 SQL分类 1.2 SQL语言规范 1.3 数据库对象与命名 1.3.1 数据库的组件(对象): 1.3.2 命名规则: 1.4 SQL语句分类 二、基本命令 2.1 查看帮助信息 2.2 查看支持的字符集 2.3 查看默认使用的字符集 2.4 修改默认字符集 2.5…

【Python画图-seaborn驯化】一文学会seaborn画因子变量图catplot函数使用技巧

【Python画图-seaborn驯化】一文学会seaborn画因子变量图catplot函数使用技巧 本次修炼方法请往下查看 🌈 欢迎莅临我的个人主页 👈这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合,智慧小天地! 🎇 免费获取相关内…

人工智能项目论文复现

文章目录 (一)技术学习任务Ⅰ、机器学习之聚类1、基本介绍概念2、聚类分析基本介绍3、K均值聚类4、K近邻分类模型(KNN)5、均值漂移聚类6、代码实现7、上述三种算法总结 Ⅱ、机器学习其他常用技术1、决策树基本知识2、异常检测概念3、主成分分析4、决策树…

JVM:介绍

文章目录 一、什么是JVM二、JVM的功能1、解释和运行2、内存管理3、即时编译 三、常见的JVM四、Java虚拟机规范五、HotSpot发展历程 一、什么是JVM JVM的全称为Java Virtual Machine,Java虚拟机。本质上是一个运行在计算机上的程序,职责是运行Java字节码…

python办公自动化之分析日志文件

实现效果:根据关键字xx搜索关键字在日志的占比 前提:把日志保存到txt文件里 代码: # 读取准备好的日志文件log_file log_filelog_file.txt with open(log_file,r) as logfile:textlogfile.readlines() # 设置搜索的关键字&#xf…

相机,手机,行车记录仪及监控视频修复软件: Stellar Repair for Video

天津鸿萌科贸发展有限公司是 Stellar 系列数据恢复软件的授权代理商。 Stellar Repair for Video 是一款强大的工具,用于修复从主流相机品牌(如佳能、尼康、索尼)、行车记录仪、监控录像机、手机和其他视频设备拍摄的无法访问和损坏的视频。…

下载linux的吐槽

本来这几天放假了,想下一个linux玩一玩 教程(我就是根据这个教程进行下载的,但是呢在进行修改BIOS 模式的 地方遇见了困难,也许是电脑修过的原因,我狂按F12 以及 FnF12都没有BIOS设置,只有一个让我选择用w…

面向过程编程详解

目录 前言1. 面向过程编程的定义2. 面向过程编程的特点2.1 过程和函数2.2 顺序执行2.3 全局变量2.4 控制结构 3. 面向过程编程的应用场景3.1 系统级编程3.2 科学计算3.3 小型项目 4. 面向过程编程的优缺点4.1 优点4.2 缺点 5. 代表性的编程语言5.1 C语言5.2 Pascal5.3 Fortran …

PMP 认证权威吗?对项目…业生涯的发展有帮助?

PMP认证到底权威吗? 首先在我看来,PMP认证是否权威要从各个角度进行综合考虑。入行这么多年个人也有不少的体会,那么我们就从多个角度进行分析一下,PMP认证的权威性与促进方面。 在深入探讨这个话题前,我分享一下近期…

DDR3 (四)

1 DDR3 8倍预取 DDR3相比DDR2外部IO时钟又提高了一倍,因此DDR3外部IO时钟是内核时钟的4倍,再加上双沿采样,因此DDR3可以实现8倍预取 2 DDR3 芯片位宽 DDR3使用8倍预取技术,指的是芯片位宽(DQ数据线位宽&#xff09…

智慧产业应用实训实践基地-信息类专业实践实验室-嵌入式、物联网、移动互联网、云计算、大数据、人工智能、区块链实训室

智慧产业实践基地面向信息类专业群,以智慧灯杆、智慧交通、智慧设施在智慧产业中的实际实践为项目原型,软硬件开源、开放,海量的技术资料和实训课程。整个系统运用了嵌入式、物联网、移动互联网、云计算、大数据、人工智能、区块链等综合交叉…

收藏!2024年程序员的实用神器_new relic idea

前言 Chat GPT的升级节奏让人们越来越惊讶的同时,也让大家感觉到了压力,在如此快节奏的互联网世界中,开发人员需要不断学习与更新知识,保持领先地位并高效地交付高质量软件。 无论是集成开发环境 (IDE)、版本控制系统、测试工具…

开源网安入选全景图,成为唯一覆盖“开发安全”全领域厂商

​7月4日,知名网络安全媒体数说安全正式发布了《2024年中国网络安全市场全景图》,本次全景图共收录了408家国内优秀的网络安全企业,旨在为网络安全行业主管部门、从业者、产品及服务的使用者和购买单位以及资本机构提供全面、精准且具参考价值…