机器学习实战2决策树算法

文章目录

    • 决策树算法核心是要解决两个的关键问题
    • sklearn中的决策树模型
    • sklearn建模步骤
    • 分类树
      • Criterion
      • random_state && splitter
      • 剪枝参数
      • max_depth
      • min_samples_leaf&&min_samples_split
      • max_features&&min_impurity_decrease
      • 确认最优剪枝参数
      • 目标权重参数
      • 重要属性和接口
    • 回归树
      • 参数、属性、接口
        • Criterion
      • 交叉验证

决策树算法核心是要解决两个的关键问题

1、如何从数据表中照出最佳节点和最佳分支
2、如何让决策树停止生长防止过拟合

就是说假如我有一张数据表,数据表中有成千上万个特征,我要把他们都提问完吗?

sklearn中的决策树模型

6.png
本文主要是学习分类树和回归树

sklearn建模步骤

7.png

from sklearn import tree
clf = tree.DecisionTreeClassifier()
clf = clf.fit(x_train, y_train)
result = clf.score(x_test, y_test)

分类树

Criterion

为了将表格转化为一棵树,决策树需要找到最佳节点和最佳分支方法,对于分类数来说衡量最佳的方法是叫做不纯度,通常来说不纯度越低,决策树对训练集的拟合效果越好,所有的决策树算法都是将和不纯度相关的某个属性最优化,不管我们用那个算法,都是追求的与不纯度相关的指标最优化
不纯度基于节点来计算,树中的每个节点都会有一个不纯度,并且子节点的不纯度一定低于父节点的不纯度,在一棵决策树上叶子节点的不纯度一定是最低的

Criterion这个参数就是用来决定不纯度计算方法的,sklearn中提供了两种方法
一种是输入“entropy”,使用信息熵
一种是输入"gini",使用基尼系数

8.png
我们无法干扰信息熵和基尼系数的计算,所以这里我们知道怎么算的即可,sklearn中的方法我们是无法干扰的
相比于基尼系数来说,信息熵对于不纯度更加敏感,对不纯度的更强,但在实际使用中两者的效果差不多,信息熵的计算相比于基尼系数会慢一点,因为基尼系数没有对数运算,因为信息熵对于不纯度更加敏感,所以信息熵在计算决策树时候会更加仔细,所以对于高维数据或者噪音很多的数据来说很容易过拟合
关于参数如何选择
9.png
10.png
我们可以看到我们的决策树中并没有用到我们所给的所有属性
11.png

clf = tree.DecisionTreeClassifier(criterion = "entropy", random_state=30)
clf = clf.fit(Xtrain, Ytrain)
score = clf.score(Xtest, Ytest) # 返回预测的准确度accuracy
score

random_state && splitter

用来设置分支中的随机模式的参数,默认为None,在高维度时随机性会表现更明显,低维度数据几乎不会显现,我们任意给random_state一个数值可以让模型稳定下来
决策树是随机的
splitter也是用来控制决策树中随机选项的可以输入best,决策树虽然分支时会随机但会有限选择更重要的特征进行分支,输入random分支时会更加随机,树会更深,拟合将会降低,这也是防止过拟合的一种方法

clf = tree.DecisionTreeClassifier(criterion = "entropy", splitter="best")
clf = clf.fit(Xtrain, Ytrain)
score = clf.score(Xtest, Ytest) # 返回预测的准确度accurac
score

剪枝参数

在不加限制的情况下,一颗决策树会生长到衡量不纯度的指标最优,或没有更多的特征可用停止,这样的决策树往往会过拟合,也就是说他会在训练集上表现很好,在测试集上表现却很糟糕
12.png

score = clf.score(Xtrain, Ytrain)
score

13.png

我们要分清楚过拟合的概念,过拟合,也就是说他会在训练集上表现很好,在测试集上表现却很糟糕,但如果我们在训练集和测试集上的表现效果都很好的话不能称为过拟合

剪枝策略对于决策树的影响巨大,正确的剪枝策略是决策树优化的核心

max_depth

限制树的最大深度,超过设定深度的树枝全部剪掉
这是用的最广泛的剪枝参数,在高维度低样本量时非常有效,决策树多生长一层对样本的需求量就会增加一倍,所以限制决策树的深度能够特别有效的限制过拟合,在集成算法中也非常常用,在实际使用过程中,建议我们从3开始尝试,看看拟合的效果再决定是否增加深度

min_samples_leaf&&min_samples_split

这两个是用来限制叶子节点的参数,
min_samples_leaf建议从5开始使用
min_samples_split:一个节点至少包含min_samples_split个样本才被允许进行分支

max_features&&min_impurity_decrease

14.png

确认最优剪枝参数

使用确认超参数的曲线

import matplotlib.pyplot as plt
test = []
for i in range(10):clf = tree.DecisionTreeClassifier(criterion = "entropy", random_state=30, splitter="random", max_depth = i + 1)clf = clf.fit(Xtrain, Ytrain)score = clf.score(Xtest, Ytest) # 返回预测的准确度accuracytest.append(score)
plt.plot(range(1,11), test,color = "red", label="max_depth")
plt.legend()
plt.show()

15.png
16.png

目标权重参数

17.png

重要属性和接口

fit
score
apply
predict
18.png
19.png

回归树

参数、属性、接口

Criterion

回归树衡量分枝质量的指标,支持的有三种
1、mse使用均方误差
2、friedman_mse误差费尔德曼均方误差
3、mae绝对均方误差
这里面也有许多数学原理,但是我们在使用sklearn时不用关心,因为这些因素我们并无法干预
20.png
属性依然是feature_importance_
接口中依然是
fit
score
apply
predict
是最核心
21.png

交叉验证

交叉验证是用来验证模型稳定性的一种方法,我们将数据划分为n份,依次使用其中一份作为测试集,其他n-1份作为训练集,多次计算模型的精确性来评估模型的平均准确程度
22.png

23.png
导入所需要的库

from sklearn.datasets import load_diabetes
from sklearn.model_selection import cross_val_score
from sklearn.tree import DecisionTreeRegressor

导入数据集

diabetes = load_diabetes()

实例化并交叉验证

regressor = DecisionTreeRegressor(random_state = 0) #实例化
cross_val_score(regressor, diabetes.data, diabetes.target, cv = 10, scoring = "neg_mean_squared_error") #交叉验证

参数解读
1、第一个参数可以是回归也可以是分类,这里的模型不止可以是决策树,可以是其他的支持向量机、随机森林等等模型,可以是任何我们实例化后的算法模型
2、第二个参数是完整的不需要分测试集和训练集的特征矩阵,交叉验证会自己帮我们划分测试集和数据集
3、第三个参数是数据的标签(完整的数据标签)
4、cv = 10是将数据集分成10分,每次用其中的一份作为测试集,通常我们将这个数设为5
5、scoring用后面的neg_mean_squared_error衡量我们交叉测试的结果,当默认时会返回R2可能为负数,但是我们在做回归时最常用的是均方误差,neg_mean_squared_error是负均方误差,R2越接近1越好

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

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

相关文章

【LangChain学习】基于PDF文档构建问答知识库(三)实战整合 LangChain、OpenAI、FAISS等

接下来,我们开始在web框架上整合 LangChain、OpenAI、FAISS等。 一、PDF库 因为项目是基于PDF文档的,所以需要一些操作PDF的库,我们这边使用的是PyPDF2 from PyPDF2 import PdfReader# 获取pdf文件内容 def get_pdf_text(pdf):text "…

建材陶瓷片机器视觉定位软硬件方案

【检测目的】 建材陶瓷片机器视觉定位 【检测要求】 精度0.02mm 产品大小:60mm—70mm 颜色为:白、绿两种 5S图像处理时间 【拍摄效果图一】 上料位 【拍摄效果图二】 上料位 【拍摄效果图三】 上料位 【拍摄效果图四】 上料位 【硬件配置】 外框 …

C++初阶——函数重载

前言:C中除了可以在不同的命名空间中使用同名函数,还有一种支持在同一个作用域中同名函数的方式——函数重载。 函数重载 一.什么是函数重载?二.函数重载的3种规则三.特殊情况 一.什么是函数重载? C允许同样同一作用域中声明几个功…

爬虫ip池越大越好吗?

作为一名资深的程序员,今天我要给大家分享一些关于爬虫ip池的知识。关于ip代理池的问题,答案是肯定的,池子越大越好。下面跟我一起来盘点一下ip池大的好处吧! 1、提高稳定性 爬虫ip池越大,意味着拥有更多可用的爬虫ip…

HCIA---路由器--静态路由

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 目录 一.路由器简介 二.路由器转发原理 三.骨干链路 四.路由分类 五.静态路由 总结 一.路由器简介 路由器是一种网络设备,用于将数据包从一个网络发送…

【Linux】UDP协议——传输层

目录 传输层 再谈端口号 端口号范围划分 认识知名端口号 两个问题 netstat与iostat pidof UDP协议 UDP协议格式 UDP协议的特点 面向数据报 UDP的缓冲区 UDP使用注意事项 基于UDP的应用层协议 传输层 在学习HTTP等应用层协议时,为了便于理解&#xff…

git的简单介绍和使用

git学习 1. 概念git和svn的区别和优势1.1 区别1.2 git优势 2. git的三个状态和三个阶段2.1 三个状态:2.2 三个阶段: 3. 常用的git命令3.1 下面是最常用的命令3.2 git命令操作流程图如下: 4. 分支内容学习4.1 项目远程仓库4.2 项目本地仓库4.3…

线上电影购票选座H5小程序源码开发

搭建一个线上电影购票选座H5小程序源码需要一些基本的技术和步骤。以下是一个大致的搭建过程,可以参考: 1. 确定需求和功能:首先要明确你想要的电影购票选座H5小程序的需求和功能,例如用户登录注册、电影列表展示、选座购票、订单…

编程中的宝藏:二分查找

二分查找 假设你需要在电话簿中找到一个以字母 “K” 开头的名字(虽然现在谁还在用电话簿呢!)。你可以从头开始翻页,直到进入以 “K” 打头的部分。然而,更明智的方法是从中间开始,因为你知道以 “K” 打头…

Unity游戏源码分享-仿开心消消乐Match3Jewel

Unity游戏源码分享-仿开心消消乐Match3Jewel 工程地址: https://download.csdn.net/download/Highning0007/88198762

Oracle DB 安全性 : TDE HSM TCPS Wallet Imperva

• 配置口令文件以使用区分大小写的口令 • 对表空间进行加密 • 配置对网络服务的细粒度访问 TCPS 安全口令支持 Oracle Database 11g中的口令: • 区分大小写 • 包含更多的字符 • 使用更安全的散列算法 • 在散列算法中使用salt 用户名仍是Oracle 标识…

嵌入式开发:高薪与广阔前景

嵌入式开发是高薪且前景广阔的领域。随着物联网和智能化的快速发展,嵌入式开发人才需求不断增加,市场供应相对不足,导致竞争激烈,推动了薪资水平的提升。 嵌入式开发的复杂性和技术要求使得企业为了吸引优秀人才,普遍…

Java一般用于postgis空间数据库通用的增删查改sql命令

目录 1 增加 2 删除 3 查询 4 更新 "public"."JGSQGW_Geo"为某模式下得表 一般postgrel有这样的设计模式 1 增加 #前端绘制出的数据插入 INSERT INTO "public"."JGSQGW_Geo" ( "geom","gridone","gridon…

Zookeeper特性与节点数据类型详解

CAP&Base理论 CAP理论 cap理论是指对于一个分布式计算系统来说,不可能满足以下三点: 一致性 : 在分布式环境中,一致性是指数据在多个副本之间是否能够保持一致的 特性,等同于所有节点访问同一份最新的数据副本。在一致性的需…

【积水成渊】uniapp高级玩法分享

大家好,我是csdn的博主:lqj_本人 这是我的个人博客主页: lqj_本人_python人工智能视觉(opencv)从入门到实战,前端,微信小程序-CSDN博客 最新的uniapp毕业设计专栏也放在下方了: https://blog.csdn.net/lbcy…

golang学习随记

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 go学习快捷键及快速生成代码片段go基础循环流程控制关键字切片,拷贝函数闭包 defer语句格式化输出go语言随机数rand.seed() 包管理并发编程goroutinecha…

Java经典面试题总结(一)

Java经典面试题总结(一) 题一:Java编译运行原理题二:JDK,JVM,JRE三者之间的关系题三:谈一下对冯诺依曼体系的了解题四:重载与重写的区别题五:拆箱装箱是指什么&#xff1…

《OWASP代码审计》学习——跨站脚本注入(XSS)

一、跨站脚本概述 1.什么是跨站脚本 跨站点脚本(XSS)是一种编码注入漏洞。它通常出现在 web 应用程序中。XSS 使攻击者能够向其他用户浏览的网页中注入恶意内容。XSS 允许攻击者绕过访问控制,它是 OWASP Top10 最常见的漏洞之一。XSS 是网络服务器上的第二大漏洞。…

C# OpenCvSharp 去水印 图像修复

效果 项目 VS2022.net4.8OpenCvSharp4 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Security.Cryptography; using System.Text; usi…

【Windows10下启动RocketMQ报错:找不到或无法加载主类 Files\Java\jdk1.8.0_301\lib\dt.jar】解决方法

Windows10下启动RocketMQ报错:找不到或无法加载主类 一、问题产生二、产生原因三、解决办法 一、问题产生 参考RocketMQ Github官网上的说明,下载rocketmq-all-5.1.3-bin-release.zip,解压配置环境变量后,执行如下命令&#xff1a…