机器学习项目实战7-Python实现决策树算法分类伪钞项目实战
off999 2024-11-26 07:24 47 浏览 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
相关推荐
- 安全教育登录入口平台(安全教育登录入口平台官网)
-
122交通安全教育怎么登录:122交通网的注册方法是首先登录网址http://www.122.cn/,接着打开网页后,点击右上角的“个人登录”;其次进入邮箱注册,然后进入到注册页面,输入相关信息即可完...
- 大鱼吃小鱼经典版(大鱼吃小鱼经典版(经典版)官方版)
-
大鱼吃小鱼小鱼吃虾是于谦跟郭麒麟的《我的棒儿呢?》郭德纲说于思洋郭麒麟作诗的相声,最后郭麒麟做了一首,师傅躺在师母身上大鱼吃小鱼小鱼吃虾虾吃水水落石出师傅压师娘师娘压床床压地地动山摇。...
-
- 哪个软件可以免费pdf转ppt(免费的pdf转ppt软件哪个好)
-
要想将ppt免费转换为pdf的话,我们建议大家可以下一个那个wps,如果你是会员的话,可以注册为会员,这样的话,在wps里面的话,就可以免费将ppt呢转换为pdfpdf之后呢,我们就可以直接使用,不需要去直接不需要去另外保存,为什么格式转...
-
2026-02-04 09:03 off999
- 电信宽带测速官网入口(电信宽带测速官网入口app)
-
这个网站看看http://www.swok.cn/pcindex.jsp1.登录中国电信网上营业厅,宽带光纤,贴心服务,宽带测速2.下载第三方软件,如360等。进行在线测速进行宽带测速时,尽...
- 植物大战僵尸95版手机下载(植物大战僵尸95 版下载)
-
1可以在应用商店或者游戏平台上下载植物大战僵尸95版手机游戏。2下载教程:打开应用商店或者游戏平台,搜索“植物大战僵尸95版”,找到游戏后点击下载按钮,等待下载完成即可安装并开始游戏。3注意:确...
- 免费下载ppt成品的网站(ppt成品免费下载的网站有哪些)
-
1、Chuangkit(chuangkit.com)直达地址:chuangkit.com2、Woodo幻灯片(woodo.cn)直达链接:woodo.cn3、OfficePlus(officeplu...
- 2025世界杯赛程表(2025世界杯在哪个国家)
-
2022年卡塔尔世界杯赛程公布,全部比赛在卡塔尔境内8座球场举行,2022年,决赛阶段球队全部确定。揭幕战于当地时间11月20日19时进行,由东道主卡塔尔对阵厄瓜多尔,决赛于当地时间12月18日...
- 下载搜狐视频电视剧(搜狐电视剧下载安装)
-
搜狐视频APP下载好的视频想要导出到手机相册里方法如下1、打开手机搜狐视频软件,进入搜狐视频后我们点击右上角的“查找”,找到自已喜欢的视频。2、在“浏览器页面搜索”窗口中,输入要下载的视频的名称,然后...
- 永久免费听歌网站(丫丫音乐网)
-
可以到《我爱音乐网》《好听音乐网》《一听音乐网》《YYMP3音乐网》还可以到《九天音乐网》永久免费听歌软件有酷狗音乐和天猫精灵,以前要跳舞经常要下载舞曲,我从QQ上找不到舞曲下载就从酷狗音乐上找,大多...
- 音乐格式转换mp3软件(音乐格式转换器免费版)
-
有两种方法:方法一在手机上操作:1、进入手机中的文件管理。2、在其中选择“音乐”,将显示出手机中的全部音乐。3、点击“全选”,选中所有音乐文件。4、点击屏幕右下方的省略号图标,在弹出菜单中选择“...
- 电子书txt下载(免费的最全的小说阅读器)
-
1.Z-library里面收录了近千万本电子书籍,需求量大。2.苦瓜书盘没有广告,不需要账号注册,使用起来非常简单,直接搜索预览下载即可。3.鸠摩搜书整体风格简洁清晰,书籍资源丰富。4.亚马逊图书书籍...
- 最好免费观看高清电影(播放免费的最好看的电影)
-
在目前的网上选择中,IMDb(互联网电影数据库)被认为是最全的电影网站之一。这个网站提供了各种类型的电影和电视节目的海量信息,包括剧情介绍、演员表、评价、评论等。其还提供了有关电影制作背后的详细信息,...
- 孤单枪手2简体中文版(孤单枪手2简体中文版官方下载)
-
要将《孤胆枪手2》游戏的征兵秘籍切换为中文,您可以按照以下步骤进行操作:首先,打开游戏设置选项,通常可以在游戏主菜单或游戏内部找到。然后,寻找语言选项或界面选项,点击进入。在语言选项中,选择中文作为游...
欢迎 你 发表评论:
- 一周热门
- 最近发表
- 标签列表
-
- 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)
