百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

通过性能对比来选择机器学习模型

toyiye 2024-06-21 12:31 8 浏览 0 评论

对于刚开始进入机器学习之旅的人来说,了解所有机器学习模型及其之间的差异似乎是一项艰巨的任务。在我们了解模型如何工作以及如何利用它之后,我们将需要进入现实世界并将我们学到的知识应用到现实世界中。对于现实世界的问题,我们没有给出一个特定的模型来调整。我们必须评估一组模型,然后决定我们想要使用哪种机器学习模型。

问题:

当我们开始考虑解决机器学习中的问题时,我们必须考虑以下几点:

  • 问题定义
  • 数据集的可用性
  • 预期的解决方案
  • 业务限制

鉴于上述所有信息,我们作为AI开发人员的工作是在给定数据集上设计和训练机器学习模型以获得预期结果。一旦我们知道要构建哪个模型,构建模型就会变得微不足道。有大量资源可以帮助我们。python构建简单机器学习模型的最佳库之一是scikit-learn。使用scikit-learn(scikit-learn.org),我们必须编写的代码量显著减少。我们可以在scikit-learn中找到几乎所有流行模型的实现,因此我们的工作现在已经简化并减少到只为我们的任务选择最佳模型并调整一些参数。这可以通过几行代码完成。

我们的目标是衡量不同分类模型的性能,并尝试为我们的任务挑选最佳分类模型。为此,我们将看到我们的模型在同一数据集上的表现。

数据集:

我们选择的数据集是Kaggle的汽车评估数据集(https://www.kaggle.com/elikplim/car-evaluation-data-set)。数据包括许多特征

  • 相对购买成本
  • 维修费用
  • 门的数量
  • boot space等

我们的任务是预测某辆车是否处于可接受的状态。

汽车可能属于4类:unacceptable, acceptable, good 和 very good。所以我们的问题变成了一个有4个类的分类问题。现在我们将尝试选择能够告诉我们汽车是否状况良好的最佳模型。

我们如何选择正确的模型?

我们可以通过多种方式衡量模型的表现。性能测量的核心思想是我们的模型能够准确地预测给定的数据点。还有其他考虑因素,如延迟,内存使用等,但本文中我们只讨论模型的预测准确性。

在本文中我们选择评估的指标是:

  1. 准确性
  2. 精度
  3. 召回
  4. F1得分
  5. ROC(AUC)
  6. 对数损失

所有这些度量将给我们一种不同的性能感觉。尽管一个好的模型在这些度量标准中表现良好,但是我们应该根据我们的问题陈述来选择度量标准。

混淆矩阵 :要理解大多数这些指标,我们首先需要了解混淆矩阵是什么。假设我们有一个2级分类问题。我们将一个类称为“YES”,将另一个类称为“NO”。现在我们有一组给出的实际分类作为我们的测试数据。我们还有一组相同测试数据点的预测值。

混乱矩阵

该图像描述了具有165个点的数据集的混淆矩阵。

  • TN - 真阴性(实际数据集中的YES点数)
  • TP - 真阳性(实际数据集中NO点数)
  • FN - 假阴性(错误预测为NO的点数)
  • FP - 误报(错误预测为YES的点数)

我们来看看这些指标的含义:

如果n =我们的测试数据集中的总点数

1.准确度:准确度衡量预测总数的正确预测数,即模型正确预测的次数。这是一个数据点。当我们有多个要测试的数据点时,准确度由整个测试数据集上模型的平均准确度给出。

(准确度公式)

准确度也可以用混淆矩阵定义为

Acc =(TP + TN)/ n

2.Precision:我们得到正确的Yes预测的次数

Precision = TP / predicted Yes

3.Recall:正确预测Yes的次数

Recall = TP/ actual Yes

4.F1分数:F1分数同时考虑精度和召回率

5.ROC(AUC):FPR(X轴)到TPR(Y轴)的图。其中:

FPR = FP rate = FP / actual No

TPR = TP rate = TP / actual Yes

6.对数损失:它也是预测值与实际值之差的度量。

测试我们的模型:

现在我们已经定义了我们的指标,让我们试着看看我们在不同模型上得到了什么结果。

我们将在分析中使用以下模型:

  • Logistic回归
  • 决策树
  • 随机森林
  • K最近邻
  • 朴素贝叶斯(多个类的多项式)

我们一个接一个地尝试一下。

Logistic回归:

混淆矩阵

决策树:

混淆矩阵

随机森林:

混淆矩阵

K最近邻:

混淆矩阵

朴素贝叶斯:

混淆矩阵

比较我们的所有指标,我们得到如下图表:

观察:

根据我们在数据集上运行不同模型所收集的数据,我们可以看到Accuracy,Precision,Recall和F1 Scores都是相互成比例的。这意味着对于我们的情况,我们可以使用其中任何一个来评估我们的模型。

这些指标中表现最好的模型是简单的决策树,其次是随机森林和逻辑回归。

Confusion Matrices让我们更清楚地了解性能。我们必须看一下对角线上的高数字。对角线以外的数字越高,说明分类错误。我们可以看到决策树的错误分类最少。

如果我们查看对数损失比较,情况就会大不相同。这里决策树比我们所有的模型都要糟糕得多,而Logistic回归给我们带来了最好的结果。

这些差异违背了我们的直觉,因为我们期望更准确的模型具有最小的损失。这需要进一步调查我们为什么会在决策树中获得如此高的损失。

但对于我们的案例,决策树分类器似乎表现最好。如果我们想要稳扎稳打(这在现实生活中总是一个很好的策略),我们会选择随机森林或逻辑回归。

在查看这些结果时,我们需要记住以下几点:

  • 我们的数据集仅包含大约1700个点,这远远不足以令人满意地训练我们的模型。在现实生活中,我们将拥有更大的数据集,因此在几个模型中具有不同程度的性能。
  • 我们需要通过更严格的调整来评估我们的模型,以确定哪一个最拟合我们的数据。我们可以使用scikit-learn的模型选择库(https://scikit-learn.org/stable/modules/classes.html#module-sklearn.model_selection)来查找调整模型的最佳参数。

结论:

我们可以使用不同的度量标准来比较不同的模型,并选择最适合我们需求的模型。这些度量标准很重要,但是还有其他考虑因素。通常都有延迟性需求,最低准确度要求,更注重减少假阴性结果,等等。

相关推荐

如何用 coco 数据集训练 Detectron2 模型?

随着最新的Pythorc1.3版本的发布,下一代完全重写了它以前的目标检测框架,新的目标检测框架被称为Detectron2。本教程将通过使用自定义coco数据集训练实例分割模型,帮助你开始使...

CICD联动阿里云容器服务Kubernetes实践之Bamboo篇

本文档以构建一个Java软件项目并部署到阿里云容器服务的Kubernetes集群为例说明如何使用Bamboo在阿里云Kubernetes服务上运行RemoteAgents并在agents上...

Open3D-ML点云语义分割实验【RandLA-Net】

作为点云Open3D-ML实验的一部分,我撰写了文章解释如何使用Tensorflow和PyTorch支持安装此库。为了测试安装,我解释了如何运行一个简单的Python脚本来可视化名为...

清理系统不用第三方工具(系统自带清理软件效果好不?)

清理优化系统一定要借助于优化工具吗?其实,手动优化系统也没有那么神秘,掌握了方法和技巧,系统清理也是一件简单和随心的事。一方面要为每一个可能产生累赘的文件找到清理的方法,另一方面要寻找能够提高工作效率...

【信创】联想开先终端开机不显示grub界面的修改方法

原文链接:【信创】联想开先终端开机不显示grub界面的修改方法...

如意玲珑成熟度再提升,三大发行版支持教程来啦!

前期,我们已分别发布如意玲珑在deepinV23与UOSV20、openEuler24.03发行版的操作指南,本文,我们将为大家详细介绍Ubuntu24.04、Debian12、op...

118种常见的多媒体文件格式(英文简写)

MP4[?mpi?f??]-MPEG-4Part14(MPEG-4第14部分)AVI[e?vi??a?]-AudioVideoInterleave(音视频交错)MOV[m...

密码丢了急上火?码住7种console密码紧急恢复方式!

身为攻城狮的你,...

CSGO丨CS2的cfg指令代码分享(csgo自己的cfg在哪里?config文件位置在哪?)

?...

使用open SSL生成局域网IP地址证书

某些特殊情况下,用户内网访问多可文档管理系统时需要启用SSL传输加密功能,但只有IP,没有域名和证书。这种情况下多可提供了一种免费可行的方式,通过openSSL生成免费证书。此方法生成证书浏览器会提示...

Python中加载配置文件(python怎么加载程序包)

我们在做开发的时候经常要使用配置文件,那么配置文件的加载就需要我们提前考虑,再不使用任何框架的情况下,我们通常会有两种解决办法:完整加载将所有配置信息一次性写入单一配置文件.部分加载将常用配置信息写...

python开发项目,不得不了解的.cfg配置文件

安装软件时,经常会见到后缀为.cfg、.ini的文件,一般我们不用管,只要不删就行。因为这些是程序安装、运行时需要用到的配置文件。但对开发者来说,这种文件是怎么回事就必须搞清了。本文从.cfg文件的创...

瑞芯微RK3568鸿蒙开发板OpenHarmony系统修改cfg文件权限方法

本文适用OpenHarmony开源鸿蒙系统,本次使用的是开源鸿蒙主板,搭载瑞芯微RK3568芯片。深圳触觉智能专注研发生产OpenHarmony开源鸿蒙硬件,包括核心板、开发板、嵌入式主板,工控整机等...

Python9:图像风格迁移-使用阿里的接口

先不多说,直接上结果图。#!/usr/bin/envpython#coding=utf-8importosfromaliyunsdkcore.clientimportAcsClient...

Python带你打造个性化的图片文字识别

我们的目标:从CSV文件读取用户的文件信息,并将文件名称修改为姓名格式的中文名称,进行规范资料整理,从而实现快速对多个文件进行重命名。最终效果:将原来无规律的文件名重命名为以姓名为名称的文件。技术点:...

取消回复欢迎 发表评论:

请填写验证码