机器学习项目实战7-Python实现决策树算法分类伪钞项目实战
off999 2024-11-26 07:24 33 浏览 0 评论
预设条件
- 中级IDE使用经验(Jetbrain Pycharm优先)
- 了解Python运行环境及其命令使用
- 对Python编程语言有很好的理解
- 基本了解Pandas(处理数据框架)、Numpy、Scikit Learn和Matplot库
- 一些统计学知识,对分析数据是有帮助的
运行环境
以下运行软件的版本号是经过验证的可成功运行的版本号,以供参考。
编号 | 软件名称 | 版本号 |
1 | Python | 3.9.19 |
2 | conda | 22.9.0 |
3 | pip | 23.3.1 |
4 | numpy | 1.26.4 |
5 | pandas | 2.2.1 |
6 | matplotlib | 3.8.4 |
7 | scikit-learn | 1.4.2 |
8 | scipy | 1.13.0 |
9 | seaborn | 0.13.2 |
10 | statsmodels | 0.14.2 |
项目背景
决策树是最常用和最广泛使用的监督机器学习算法之一,它可以执行回归和分类任务。决策树算法背后的直觉很简单,但也非常强大。
对于数据集中的每个属性,决策树算法形成一个节点,其中最重要的属性放置在根节点上。决策树的决策流程是,从根节点开始,沿着条件或“决策”的相应节点向下执行,一直持续到达叶子节点,而叶子节点包含了决策树的预测或结果。
比如考虑这样一个场景:有一个人向你借车给他开,你需要决定是否把车借给他,这里有几个因素可以帮助你做出决定:
- 这个人是亲密的朋友还是只是熟人?如果对方只是熟人,那就拒绝这个请求;如果这个人是你的朋友,那就进入下一步。
- 这个人是第一次借车吗?如果是,把车借给他,否则进入下一步。
- 上次他还车的时候车坏了吗?如有,则拒绝;如果没有,就把车借给他。
上述场景的决策树如下所示:
决策树的优点
使用决策树进行预测分析有几个优点:
- 决策树可以用来预测连续值和离散值,也就是说,它们对回归和分类任务都很有效
- 只需要相对较少的算力来训练算法
- 可用于对非线性数据进行分类
- 与KNN和其他分类算法相比,非常快速和有效
数据获取
本篇项目实战数据来源于网络,数据项统计如下:
编号 | 变量名称 | 描述 |
1 | variance | 方差 |
2 | skewness | 偏度 |
3 | curtosis | 曲率 |
4 | entropy | 熵 |
5 | class | 分类 |
数据详情如下(部分展示):
数据预处理
查看元数据
使用pandas工具的info()方法查看元数据:
从图中可以看到:数据集的类型是pandas.core.frame.DataFrame,索引范围从0到1371,一共1372条数据,数据列一共有5个,以及列出了每个列的名称、非空个数、数据类型等信息。
查看数据
使用pandas工具的head()方法查看前5行数据:
使用pandas工具的tail()方法查看最后5行数据:
可以看到数据集有5个数据列,分别是variance、skewness、curtosis、entropy、class。在这5个数据列中,前4个是连续值,最后1个是离散值。
因为本篇是要预测银行现钞的真伪,所以需要基于前4个列来预测最后1列。
Variance是小波变换的方差。这个值用来测量数据点与平均值的距离远近。如果数据点与平均值距离近,则数据的分布就是一个正常分布,也叫对称分布,这种情况是一种良好的分布,是非常容易进行预测的。在当前图像上下文中,这是由小波变换产生的系数的方差。方差越小,系数越接近实际图像。
skewness是小波变换的偏度。偏度是一个连续值,表示分布的不对称性。如果在均值左侧有更多的值,则分布呈负偏态。如果在均值右侧有更多的值,则分布呈正偏态。如果均值,众数和中位数相同,则分布是对称的。分布越对称,越接近正态分布。在目前的情况下,这是由小波变换产生的系数的偏度。越对称,方差、偏度、曲率、熵的系数越接近实际图像。
curtosis(又叫kurtosis)是小波变换的峰度。峰度是一个连续值,像偏度一样,也描述了分布的形状。根据峰度系数(k)的不同,与正态分布相比,一个分布可能或多或少是平坦的,或者在其末端或尾部有或多或少的数据。当分布更加分散和平坦时,它被称为平丘;当它不那么分散而更集中在中间时,成为常峰态;当分布几乎完全集中在中间时,它被称为尖峰态。这与方差和偏度之前的情况相同,分布越常峰态,系数越接近实际图像。
entropy是图像熵。熵也是一个连续值,它通常衡量系统中的随机性或无序性。在图像的上下文中,熵测量像素与其相邻像素之间的差异。系数的熵越大,图像变换时的损失就越大,熵越小,信息损失就越小。
class是分类。class是离散值,有0和1两个值,用来表示钞票是真的还是伪造的。可以使用Pandas的unique()方法检查第5列是否包含0和1。
上面的方法返回一个值为0和1的数组。这意味着class行中包含的值只有0和1。它可以作为我们监督学习的目标。这是一个整数值,当图像是伪造的时为0,当图像是真实的时为1。由于我们有这个class列,其中包含真实和伪造图像的标签,这意味着我们的学习类型是有监督的。
数据描述性统计
通过Pandas工具的describe()方法来查看数据的个数(count)、平均值(mean)、标准差(std)、最小值(min)、分位数(25%位、50%位、75%位)、最大值(max)。如下图所示:
查看数据项比例
由于class列只有0和1,但是它们之间的比例有多少?是0多一些还是1多一些呢?亦或者0跟1一样多?为了获取每个值的比例,可以使用value_counts()方法。
关键代码:
执行结果如下:
从上面执行的结果中可以看到,0有762个,1有610个,0比1多152个,这意味着假钞只比真钞要多一点,但如果假设0有5500个,1有610个,那么会造成更大的差异,这样就会导致对最终结果的负面影响。
为更清晰看出百分比,可以对数据进行归一化处理,处理后的结果如下:
由上图可知,大约56%的数据集是伪造的,44%是真实的,也就是说56:44的比例率,有12%的差异,这在统计学上被认为是一个很小的差异,因为它只是略高于10%,所以数据被认为是平衡的,如果不是56:44的比例,而是80:20或70:30的比例,那么这样的数据就会被认为是不平衡的,对于步平衡的数据需要采取一定的措施消除不平衡,但本文的使用的数据不需要这么做。
通过绘制直方图,可以更加直观的查看数据,可视化结果如下:
从上图可以看出,只有variance基本符合正态分布。
关键代码:
数据缺失值查看
使用Pandas工具的isnull()方法来查看数据项的缺失值情况,如下图所示:
从上图中可以看出,variance、skewness、curtosis、entropy、class等字段都没有缺失值的情况,无须对缺失值情况进行额外处理。
探索性数据分析
特征数据项分布分析
使用双变量分析法查看数值型特征variance、skewness、curtosis、entropy与class数据项之间关系的分布情况,用散点图显示出来。
上面的图形都是两两配对,这里限于篇幅就不全部展示了,大家可以去执行程序来查看每两组特征构建的图形。
当然,也可以把所有的特征分布的散点图构建到一张图形里,这里使用Seaborn库的pairplot()方法来实现。
关键代码:
执行代码,显示出的每组散点图如下所示:
从上图中可以看出,curtosis和variance是最简单的特征组合,它们可以通过一条线就能区分,它们是线性可分隔的。
构建模型
本章节将采用sklearn库中的DecisionTreeClassifier类来构建基础模型,再用该模型进行训练和测试。
数据准备
首先第一步,将数据集中的class列提取出来作为目标特征,然后第二步,将数据集分隔成训练集和测试集。X数据集含variance、skewness、curtosis、entropy列。Y数据集含class列。
X数据集如图所示:
Y数据集如图所示:
关键代码:
把整个数据集分成两个部分,一个部分是训练集,另一个部分是测试集,训练集占整个数据集的80%,测试集占整个数据集的20%。train_test_split()是随机采样,为避免每次运行都会采集到不同的结果,可以给random_state定义一个种子SEED,本例的SEED设置为42。
X_train数据集如图:
X_test数据集如图:
y_train数据集如图:
y_test数据集如图:
关键代码:
统计各个数据集的shape,可以看到训练集有1097条采样数据,测试集油275条采样数据。
训练模型
数据已经准备完毕,我们可以使用sklearn的DecisionTreeClassifier库来对训练集来训练决策树模型。训练模型采用fit()方法进行。
关键代码:
预测数据
模型训练好之后,可以用来对测试集进行预测。
以下是预测代码:
预测出来的结果如下:
评估模型
有几种方法可以将预测结果与实际结果进行比较,它们度量的是分类的不同方面。一些最常用的分类指标如下:
- 混淆矩阵(confusion Matrix):
当需要知道每个类别有多少样本是正确的或错误的时候,引入混淆矩阵。混淆矩阵有四个变量,真正例(True Positive, TP)、假正例(False Positive, FP)、真负例(True Negative, TN)、假负例(False Negative, FN)。
Positive/Negative(P/N)是预测结果的正负,True/False(T/F)是对预测结果正确与否的判断。也就是说:
- TP是代表实际结果为正例且预测结果是正例,那说明判断是正确的,即TP为预测结果是正例(P),判断是正确的(T);
- TN是代表实际结果为负例且预测结果是负例,那说明判断是正确的,即TN为预测结果是负例(N),判断是正确的(T);
- FP是代表实际结果为正例但预测结果是负例,那说明判断是错误的,即FP为预测结果是正例(P),判断是错误的(F);
- FN是代表实际结果为负例但预测结果是正例,那说明判断是错误的,即FN为预测结果是负例(N),判断是错误的(F);
- 精度(Precision):
精度是模型判断为正例的样本中,判断正确的个数占比。
- 召回率(Recall):
召回率表示应当被预测的正例中,真正例有多少。
- F1评分(F1 score):
F1评分是精确度和召回率的平衡或调和的平均值。最小值为0,最大值为1。当F1评分等于1时,这意味着所有类都被正确预测了,但是这是一个很难用真实数据获得的分数,因为异常数据几乎总是存在的。
用以上指标来进行模型评估,需要导入sklearn的metrics库,这个库里包含了classification_report和confusion_matrix方法,classification_report返回精度、召回率和F1评分。
结果如下:
从上面的分类报告中,可以知道假钞预测的准确率为0.97,召回率为1.00,F1评分为0.98,这些测量值是使用148个样品获得的。与此同时,对于真钞,结果是低一个单位,预测精度为1.00,召回率为0.96,F1评分为0.98,这些测量值使用了127个样品获得的。
结果可视化
对混淆矩阵进行可视化操作,可以使用Seaborn的heatmap()方法。结果如下:
混淆矩阵的图示中,148个class为0的采样中,148个真正例,0个是假正例,同时127个class为1的采样中,122个是真正例,5个是假反例。
结论
本文主要介绍了通过使用决策树算法进行建模和预测的实战项目案例,希望能够帮助你学习和理解决策树算法的核心内容。如果你还想学习更多人工智能/机器学习/深度学习相关的知识,请继续阅读我编写的其他内容的文章。
本文涉及到的机器学习实战项目文件(附带数据+代码+文档)名称如下:
decision_tree.py
data_banknote_authentication.csv
MLAP7-机器学习项目实战7-Python实现决策树算法分类伪钞项目实战.pdf
相关推荐
- directx官方下载win7(directx download)
-
点开始-----运行,输入dxdiag,回车后打开“DirectX诊断工具”窗口,进入“显示”选项卡,看一下是否启用了加速,没有的话,单击下面的“DirectX功能”项中的“启用”按钮,这样便打开了D...
- u盘视频无法播放怎么办(u盘上视频没办法播放)
-
解决办法:1.检查U盘存储格式是否为FAT32,如果不是,请将其格式化为FAT32; 2.检查U盘中视频文件是否损坏,如果有损坏文件,请尝试重新复制一份; 3.检查U盘中存储...
-
- 笔记本电脑无法正常启动怎么修复
-
1.可以解决。2.Windows未能启动可能是由于系统文件损坏、硬件故障或病毒感染等原因引起的。解决方法可以尝试使用Windows安全模式启动、修复启动、还原系统、重装系统等方法。3.如果以上方法都无法解决问题,可以考虑联系专业的电脑...
-
2025-11-16 04:03 off999
- 联想设置u盘为第一启动项(联想怎么设置u盘启动为第一启动项)
-
联想电脑设置u盘为第一启动项方法如下一、将电脑开机,开机瞬间按F2键进入bios设置界面二、在上面5个选项里找到boot选项,这里按键盘上左右键来移动三、这里利用键盘上下键选到USB选项,然后按F5/...
-
- 家用路由器哪个牌子最好信号最稳定
-
TP-LINK最好,信号最稳定。路由器是连接两个或多个网络的硬件设备,在网络间起网关的作用,是读取每一个数据包中的地址然后决定如何传送的专用智能性的网络设备。它能够理解不同的协议,例如某个局域网使用的以太网协议,因特网使用的TCP/IP协议...
-
2025-11-16 03:03 off999
- 安卓纯净版系统(安卓的纯净模式)
-
安卓系统有纯净模式的,安卓系统必须有纯净模式的,刷入纯净版系统可以去除一些预装的应用和系统自带软件,提高手机的运行速度和使用体验。但需要注意的是刷机有一定风险,请确保你已经备份好手机数据并了解安装风险...
- deepin系统怎么安装软件(deepin操作系统怎么安装软件)
-
deepin是一个基于Linux的操作系统,它默认不支持APK应用。要在deepin上安装APK应用,需要先安装一个Android模拟器,例如Anbox,然后从GooglePlayStore或其他...
-
- 下载app安装包(下载app安装包损坏)
-
1,没有刷机过的,可以在手机里面,找到系统自带的文件管理-(如图),2,点开后,可以直接看到文件分类,找到,安装包,点开,(如下图)3,即可看到手机里面的未安装APP;操作方法01如果是直接在浏览器上下载的软件,那就直接点开浏览器,然后点击...
-
2025-11-16 01:51 off999
- window7旗舰版密码忘记(win7密码忘记了怎么办旗舰版)
-
1、重启电脑按f8选择“带命令提示符的安全模式”,跳出“CommandPrompt”窗口。2、在窗口中输入“netuserasd/add”回车,再升级输入“netlocalgroupadmi...
- windows7界面(windows7界面由哪几个部分组成)
-
您好!Windows7一般有两种界面。一种为Aero界面,一种为经典界面。Aero界面还包含三个小分类:性能最佳Aero,BasicAero,对比度Aero。性能最佳Aero是Windows7最...
- wps截图快捷键(WPS截图快捷键是哪个)
-
在WPS中进行截屏,可以通过快捷键来实现。具体操作在按下“Alt+PrtSc”之后,就会将当前屏幕截图保存到剪贴板中。若需要将截图保存为图片文件,则在粘贴时选择“文件夹”而不是“粘贴”,再选定存储...
- 电脑主机自动关机是什么原因
-
原因一、软件 1.病毒破坏,自从有了计算机以后不久,计算机病毒也应运而生。当网络成为当今社会的信息大动脉后,病毒的传播更加方便,所以也时不时的干扰和破坏我们的正常工作。比较典型的就是前一段时间对...
- 显示桌面快捷键(怎么设置桌面快捷图标)
-
电脑上显示桌面的快捷键如下:1,常用。同时按Win徽标键+D键(win键位于Ctrl与Alt之间像个飘起来的田字):按一次显示桌面,再同时按一次返回到窗口。2,同时按Win徽标键+M:原本含义是“...
- 如何使用u盘拷贝文件(如何使用u盘拷贝文件到电脑)
-
1、插入u盘,在桌面上或“我的电脑”中能查看u盘信息。2、在电脑中找到需要拷贝的文件,右键点击复制。3、进入u盘界面,在空白处点击右键,选择“粘贴”即可拷贝到u盘。或者,同时打开需要复制的文件窗口和u...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
python入门到脱坑 输入与输出—str()函数
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
慕ke 前端工程师2024「完整」
-
失业程序员复习python笔记——条件与循环
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
