决策树算法实战

news2024/11/20 2:35:49

本实战主要目标是讲解如何使用sklearn库来构造决策树,包括其中的一些参数的使用,以及参数调优对模型精确度的影响。

1. 数据处理

导入Pandas和Matplotlib两个库。

# 导入Pandas和Matplotlib两个库
%matplotlib inline
import matplotlib.pyplot as plt
import pandas as pd

此次实验没有CSV数据文件,我们采用sklearn模块中的内置数据集,直接加载内置的房价数据集,根据房子的价格和一些影响因素,来预测最终的结果。

from sklearn.datasets.california_housing import fetch_california_housing
housing = fetch_california_housing()
print(housing.DESCR)# 内置数据集

可以简单打印一下数据信息,具体代码与结果如图5-33所示。第一条代码中.shape表示数据的维度,输出的信息表示整个文件有8个特征及20640条数据。第二条代码表示打印数据集中的第一行数据信息。

2. 模型的建立

从sklearn中导入tree模块,在tree模块里可以用决策树分类或者回归,预测类别值或连续值都是可以的。使用sklearn分两步,第一步是将树模型实例化出来,传入参数max_depth控制树的最大深度。第二步是用实例出来的变量来进行训练,相当于构造一个树模型。其中,传入两个参数x,y,这里的x取数据集中的第6列和第7列,相当于指定某些特征来建模;y相当于label,即结果值。

# 实例化树模型
from sklearn import tree
print(housing.target)
dtr = tree.DecisionTreeRegressor(max_depth=2) # 控制深度
dtr.fit(housing.data[:,[6,7]],housing.target) # 取第6列和第7列

执行语句输出模型的参数,如图5-34所示,除了设定的参数,有些参数是默认的,一般情况下我们只需要调整部分参数即可。

3. 模型可视化

模型可视化显示需要借助第三方工具。首先要安装graphiviz,其官方网站地址是http://www.graphviz.org/,进入页面后单击Download按钮,根据计算机版本选择安装文件,安装后将bin目录下的路径添加到环境变量即可使用。

接下来要构造可视化树模型,代码结构差不多,唯一需要调整的是构造对象的变量名字,以及图中的特征名字,就是dataframe中用什么名字就指定那个名字,代码如下:

# 可视化构造树模型
dot_data = \
tree.export_graphviz(
    dtr,# 变量名
    out_file=None,
    feature_names=housing.feature_names[6:8],# 名字
    filled=True,
    impurity=False,
    rounded=True
)

另外,还需要安装一个pydotplus库,使用pip install pydotplus命令即可安装。把数据参数传进去并指定画图的颜色,代码如下:

import pydotplus
graph = pydotplus.graph_from_dot_data(dot_data)
graph.get_nodes()[7].set_fillcolor("#FFF2DD")
from IPython.display import Image
Image(graph.create_png())

结果如图5-35所示。如此就完成了决策树的可视化的过程。

所以说,调用Python的内置模块还是很方便的,不需要在cmd命令窗口上去进行一些操作,构造好的决策树图还可以保存到本地,方便查看,操作也很简单。

graph.write_png("dtr_white_backgroud.png")

本文节选自《机器学习实战(视频教学版)》,获出版社和作者授权发布。

《图神经网络基础、模型与应用实战(人工智能技术丛书)》(兰伟,叶进,朱晓姝)【摘要 书评 试读】- 京东图书 (jd.com)

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

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

相关文章

svg画简单的立方体

开发背景 要开发一个拖拽的大屏项目,其中涉及到一个装饰组件,是一个立方体cube,要求颜色可以修改,大小可以拖拽改变。 效果如下 分析 经过我一番奇思妙想,决定用svg实现,因为对svg比较熟悉。那就先来在草…

数据大屏vue3+ts+axios+MockJS+dataV+echarts

一、官网/文档 vue3:https://cn.vuejs.org/api/TypeScript:https://www.tslang.cn/docs/handbook/basic-types.htmlaxios:http://www.axios-js.com/zh-cn/docs/MockJS:http://mockjs.com/dataV:http://datav.jiamingh…

利用预测大模型完成办公室饮水机剩余热水量

背景 在每天上班的时候,很多同事都有喝热水的习惯,但是饮水机内的热水量总是比较少的,如何避免等待,高效的接到热水是我接下来要做的事情的动机。 理论基础 在大量真实数据的情况下,可以分析出用水紧张的时间段和用水…

YOLOv8猫狗检测:从SwanLab可视化训练到Gradio Demo网站

基于YOLO模型在自定义数据上做训练,实现对特定目标的识别和检测,是CV领域非常经典的任务,也是AI项目落地最热门的方向之一。 这篇文章我将带大家使用Ultralytics、SwanLab、Gradio这两个开源工具,完成从数据集准备、代码编写、可…

打工人都在偷偷做的副业项目—steam搬砖

steam搬砖其实是一个非常老牌的项目了,之前只有玩游戏玩市场的人知道,其他普通人都不知道。 我们陪跑这个项目不是说这个项目不行了,再拿出来割韭菜,现在依然可以做,我们本身就是项目和培训一比一在做,这一…

es安装错误Exception in thread “main“ java.nio.file.NoSuchFileException解决方案

docker 启动es出现一下错误的解决方案 Exception in thread “main” java.nio.file.NoSuchFileException: /usr/share/elasticsearch/config/jvm.options Exception in thread "main" java.nio.file.NoSuchFileException: /usr/share/elasticsearch/config/jvm.op…

【Linux命令】--- Linux下的分卷压缩与解压

在编程的艺术世界里,代码和灵感需要寻找到最佳的交融点,才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里,我们将共同追寻这种完美结合,为未来的世界留下属于我们的独特印记。 【Linux命令】--- 多核压缩命令大全&…

JavaWeb Servelt原理

Servlet简介: Servlet的主要工作:处理客户端请求,生成动态响应,通常用于扩展基于HTTP协议的Web服务器。 Servlet技术是Java EE规范的组成部分,代表了服务器端的Java程序,主要负责处理来自客户端的Web请求,…

centos7防火墙入站白名单配置

firewall-cmd --set-default-zonedropfirewall-cmd --get-active-zone记录下当前激活网卡firewall-cmd --permanent --change-interfaceens33 --zonedrop firewall-cmd --zonedrop --list-all 添加信任的源IP和开放端口 firewall-cmd --permanent --add-source192.168.254.1 -…

基于springboot+vue+Mysql的逍遥大药房管理系统

开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…

七人拼购新模式:革新购物体验,共创价值

在数字时代,消费者的购物体验正经历着前所未有的变革。七人拼购模式作为一种新兴的购物方式,通过汇集消费者的力量,实现商品价格的最优化,让消费者享受到前所未有的实惠与便利。以下,我们将以一款标价499元的商品为例&…

面试准备-八股【面试准备】

面试准备-八股【面试准备】 Java基础解决hash冲突的方法try catch finallyException与Error的包结构OOM你遇到过哪些情况,SOF你遇到过哪些情况线程有哪些基本状态?Java IO与 NIO的区别堆和栈的区别对象分配规则notify()和notifyAll()有什么区别?sleep()…

在组件外使用pinia的坑

来源 项目包含很多静态的类型,我新建了一个js来专门管理和使用这些类型,如下图这种,有一部分是固定的,千年不变,有一部分是偶尔会变(需要后台获取),还有一部分是要登录后才能拿到的…

广告界的奥斯卡:揭秘成功广告策划的核心要素

在这个品牌林立、竞争激烈的市场大潮中,想要让自己的品牌声音被听见,一个成功的广告策划无疑是你的超级扩音器。 一个成功的广告策划一般来说需要以下十大要素: 1. 明确的目标和受众定位:你的指南针 首先,咱们得有个…

three.js能实现啥效果?看过来,这里都是它的菜(08)

在Three.js中实现旋转动画的原理是通过修改对象的旋转属性来实现的,通常使用渲染循环(render loop)来更新对象的旋转状态,从而实现动画效果。 具体的原理包括以下几个步骤: 创建对象:首先创建一个需要旋转…

网络——多区域OSPF配置(OSPF系列第1篇)

简介 路由协议OSPF全称为Open Shortest Path First,也就开放是的最短路径优先协议,使用链路状态路由算法,isis协议也是使用链路状态路由算法。而RIP协议使用距离矢量路由算法。 区域 为了能够降低OSPF计算的复杂程度,OSPF采用分…

【全开源】班级管家微信小程序(FastAdmin+ThinkPHP)

班级管家微信小程序 班级管家微信小程序,作为一款专注于家校沟通、作业管理、成绩发布等方面的工具,凭借其丰富的特色功能和显著的优势,已经成为广大教师、家长和学生日常学习生活中不可或缺的一部分。 一、特色功能 家校沟通便捷&#xff…

JD3-40/23漏电继电器 AC220V 50-500mA 0.1s 导轨安装

系列型号: JD3-40/13漏电继电器JD3-40/23漏电继电器JD3-40/33漏电继电器JD3-40/43漏电继电器 JD3-70/13漏电继电器JD3-70/23漏电继电器JD3-70/33漏电继电器JD3-70/43漏电继电器 JD3-100/23漏电继电器JD3-100/43漏电继电器JD3-100/33漏电继电器JD3-100/13漏电继电…

CRMEB开源商城系统:全开源、高灵活性的电商解决方案

一、引言 随着电子商务的飞速发展,越来越多的企业和个人开始关注如何快速搭建一个稳定、高效且功能丰富的在线商城系统。在这样的背景下,CRMEB开源商城系统应运而生,凭借其前后端分离的架构、丰富的功能模块以及易用性,成为了众多…

快写猪好用吗 #知识分享#笔记#学习方法

快写猪是一个非常好用的论文写作工具,它提供了强大的查重降重功能,帮助用户轻松完成论文写作任务。无论是在学术研究还是日常写作中,快写猪都能提供高效、准确的检测,确保文本的原创性和质量。 首先,快写猪的查重降重功…