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

 💻博主现有专栏:

                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.mfbz.cn/a/783557.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PHP宝藏神器多功能投票系统源码小程序

🎉发现宝藏神器!一键解锁“多功能投票小程序”的无限可能✨ 🌈 开篇安利:告别繁琐,拥抱高效! Hey小伙伴们,是不是经常为组织活动、收集意见而头疼不已?🤯 今天就要给大…

迭代器模式(大话设计模式)C/C++版本

迭代器模式 C #include <iostream> #include <string> #include <vector>using namespace std;// 迭代抽象类,用于定义得到开始对象、得到下一个对象、判断是否到结尾、当前对象等抽象方法&#xff0c;统一接口 class Iterator { public:Iterator(){};virtu…

Android约束布局的概念与属性(2)

目录 3&#xff0e;链式约束4&#xff0e;辅助线 3&#xff0e;链式约束 如果两个或以上控件通过下图的方式约束在一起&#xff0c;就可以认为是他们是一条链&#xff08;如图5为横向的链&#xff0c;纵向同理&#xff09;。 图5 链示意图 如图5所示&#xff0c;在预览图中选…

面向计算机类岗位人才需求分析研究 --基于前程无忧招聘网站的数据经验证据

1 引言 随着智能互联网的快速发展和一系列的技术变革&#xff0c;从而推动全国各行业进行政策的调整、资源的共享、产业的升级和信息的创新。结合国家的战略&#xff0c;政府明确的指出&#xff0c;建设国家大数据池意义重大。通过海量数据的支持与算法优化后的计算能力&#…

水果商城系统 SpringBoot+Vue

1、技术栈 技术栈&#xff1a;SpringBootVueMybatis等使用环境&#xff1a;Windows10 谷歌浏览器开发环境&#xff1a;jdk1.8 Maven mysql Idea 数据库仅供学习参考 【已经答辩过的毕业设计】 项目源码地址 2、功能划分 3、效果演示

Perforce发布白皮书,解读电动汽车初创公司如何加速进入市场并降低软件开发中的风险和成本

电动汽车&#xff08;EV&#xff09;领域的初创企业正迅速崛起&#xff0c;创新速度显著加快。然而&#xff0c;随着消费者对电动汽车需求的激增&#xff0c;老牌汽车制造商正加速进军这一市场&#xff0c;加剧了行业竞争。为在竞争中生存并发展&#xff0c;电动汽车初创企业必…

机器学习与模式识别_清华大学出版社

contents 前言第1章 绪论1.1 引言1.2 基本术语1.3 假设空间1.4 归纳偏好1.5 发展历程1.6 应用现状 第2章 模型评估与选择2.1 经验误差与过拟合2.2 评估方法2.3 性能度量2.3.1 回归任务2.3.2 分类任务 2.4 比较检验2.5 偏差与方差2.5.1 偏差-方差分解2.5.2 偏差-方差窘境 第3章 …

新技术引领商业智能新时代:从 AI 到自助分析的演变

最新技术资源&#xff1a; https://www.grapecity.com.cn/resources/ 引言&#xff1a;商业智能的新技术浪潮 在当今数据驱动的世界中&#xff0c;技术进步不断改变着商业智能&#xff08;BI&#xff09;领域。特别是人工智能&#xff08;AI&#xff09;和自助分析工具的发展&…

python 10个自动化脚本

目录 &#x1f31f; 引言 &#x1f4da; 理论基础 &#x1f6e0;️ 使用场景与代码示例 场景一&#xff1a;批量重命名文件 场景二&#xff1a;自动下载网页内容 场景三&#xff1a;数据清洗 场景四&#xff1a;定时执行任务 场景五&#xff1a;自动化邮件发送 场景六…

10分钟使用网站构建框架hugo本地搭建个人网站并快速上线详细教程

文章目录 前言1. 安装环境2. 配置环境变量与hugo安装2.1 创建程序目录2.2 配置环境变量2.3 查看程序版本 3. 创建博客网站3.1 创建站点3.2 在站点中创建一篇文章3.3 为网站添加主题 4. 本地访问测试5. 安装内网穿透工具6. 配置公网地址7. 配置固定公网地址 前言 今天和大家分享…

压测引擎数据库设计(上)

压测引擎数据库设计&#xff08;上&#xff09; 引言 在当今快速发展的互联网时代&#xff0c;软件质量保证和性能测试变得尤为重要。自动化测试平台&#xff0c;提供了一套完整的解决方案&#xff0c;以确保软件产品在发布前能够满足性能和稳定性的要求。本文将深入探讨滴云自…

启发式防御大模型越狱攻击

前言 在本文中&#xff0c;我们来分析、复现几个典型的启发式的防御工作&#xff0c;用于防御面向大语言模型的越狱攻击。 Self Examination 首先来看Self Examination方法。 这是一种简单的零样本防御LLM攻击的方法&#xff0c;旨在防止用户接触到由LLMs诱导产生的有害或恶…

ROS编译错误: fatal error: test_pkg/test_pkg.h: 没有那个文件

在ROS安装完毕后编译ros工作空间&#xff0c;出现了以下错误: 解决方法: 删除工作空间&#xff0c;重建再重新编译

【数据结构】单链表:数据结构中的舞者,穿梭于理论与实践的舞池

欢迎来到白刘的领域 Miracle_86.-CSDN博客 系列专栏 数据结构与算法 先赞后看&#xff0c;已成习惯 创作不易&#xff0c;多多支持&#xff01; 一、链表的概念和结构 1.1 链表的概念 在上一篇文章中&#xff0c;我们了解了线性表(linear list)&#xff0c;并且学习了其…

你认为最优美的数据结构是什么?

并查集算是&#xff0c;巧妙的不行&#xff0c;让人为之一惊。 在学习数据结构Q的时候&#xff0c;老师多少会提到并查集&#xff0c;他的应用也是超级广泛。本文首先会通过案例来对并查集有一个介绍。然后给出并查集的java实现。 刚好我有一些资料&#xff0c;是我根据网友给…

【Altium】AD-网络版一个用户非人为异常占用多个License的解决方法

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 当出现一个用户同时占用多个授权&#xff0c;又无法单独释放一个授权的情况下&#xff0c;该如何解决。 2、 问题场景 一个用户获取网络版授权后&#xff0c;AD会自动重复获取授权&#xff0c;直到该license下所有授…

怎么给电子文档批量盖骑缝章或公章?

怎么给电子文档批量盖骑缝章或公章?假如你有100个PDF电子文档要同时盖缝章&#xff0c;如果不借助专业的盖电子骑缝章软件&#xff0c;还真不好干。下面讲述如何利用e-章宝批量盖电子骑缝章。 1.在软件中导入待批量盖章的PDF文件 如下图&#xff0c;在“待盖章PDF文件”区域…

后端之路——登录校验

前言&#xff1a;Servlet 【登录校验】这个功能技术的基础是【会话技术】&#xff0c;那么在讲【会话技术】的时候必然要谈到【Cookie】和【Session】这两个东西&#xff0c;那么在这之前必须要先讲一下一个很重要但是很多人都会忽略的一个知识点&#xff1a;【Servlet】 什么是…

redis-cli 连接Redis

Redis-cli介绍 redis-cli 是原生 Redis 自带的命令行工具&#xff0c;您可以在云主机或本地设备上通过 redis-cli 连接 Redis 数据库&#xff0c;进行数据管理。 redis-cli 客户端的使用方法&#xff0c;请参考官方文档。 连接命令 redis-cli -h <redis_instance_address…

【算法笔记自学】第 7 章 提高篇(1)——数据结构专题(1)

7.1栈的应用 #include <iostream> #include <string> #include <stack> using namespace std;int main() {int n, x;string action;cin >> n;stack<int> s;for (int i 0; i < n; i) {cin >> action;if (action "push") {ci…