8. 机器学习系统设计

假设你想建立一个垃圾邮件分类器,通过监督学习来构造一个分类器来区分垃圾邮件和非垃圾邮件。为了应用监督学习,首先要想的就是:如何来表示邮件的特征向量x,通过特征向量x和分类标签y,我们就能训练一个分类器,比如使用逻辑回归的方法。这里有一种选择邮件的特征向量的方法:我们可以提出一个可能包含100个单词的列表,通过这些单词来区分垃圾邮件或非垃圾邮件。

7.1 误差分析

误差分析能帮助你更系统地在众多方法中做出选择。

如果你准备从事研发机器学习产品或开发机器学习应用。

  1. 通常来说,最好的方法不是建立一个很复杂的有许多复杂特征的系统,而是通过一个简单的算法来快速地实现它。
  2. 在1结束之后,就可以画出相应学习曲线,通过学习曲线以及检验误差来找出你的算法是否存在高偏差或者高方差的问题或者一些其他问题。在这些分析之后,再来决定是否使用更多的数据或者特征等等。
  3. 误差分析:当实现比如一个垃圾邮件分类器的时候,可以经常观察交叉验证集的情况,然后看一看那些被算法错误分类的文件,通过查看这些被错误分类的垃圾邮件和非垃圾邮件,看看这些经常被错误分类的邮件有什么共同特征和规律。经常做这个过程就会启发你应该设计怎样的新特征或是告诉你现在的系统有什么优点和缺点。

假设你在做一个垃圾邮件分类器,然后在你的交叉验证集中有500个样本,假如该例子中算法有很高的错误率,它错误分类了100个交叉验证样本。于是现在需要做的就是,手动核查这100个错误,然后手工为他们分类。同时要考虑清楚这些邮件是什么类型的邮件,有什么线索或者特征你觉得能帮助算法正确地进行分类。最后在改进学习算法时,另一个技巧是保证自己对学习算法有一种数值估计的方法。当改进算法的时候,如果你的算法能够返回一个数值评价指标来估计算法执行的效果,将会很有帮助。

例子:假如我们正在决定是否应该将discount disounts discounter discounting视为同一个单词,这样做的一种方法就是只看单词中的前几个英文字母。如果只看这些单词,就会发现这些单词大体上有着相似的意思。在自然语言处理中,就有这种方法叫做词干提取软件,porter stemmer,但这种方法有利也有弊,要看自己怎么选择。如果选择了这种方法,那么数值估计对这种方法的误差分析很有用。

7.2 不对称性分类的误差评估

有一个问题:使用一个合适的误差度量值,有时会对于你的学习算法造成非常微妙的影响,这就是偏斜类的问题。

假如说你有一个算法,它的精确度是99.2%,因此它只有0.8%的误差。然后你对你的算法做出了一点改动,现在是99.5%的精确度,0.5%误差。那我们的改动是有效的还是一个只输出y=1的函数都比你的模型准确?这里就引入了查准率和召回率。

假设我们正在用测试集来评估一个分类模型,对于每个测试中的样本都会等于0或1,我们的学习算法要做的就是做出值的预测并且学习算法会为每一个测试集中的实例做出预测,预测值也是等于0或1。

  • 查准率:预测得所有正例中实际是正例得比重
  • 召回率(查全率):实际真正例中预测正确的正例的比重

(Precision(查准率):预测为1中真正为1的概率;Recall(召回率):真正为1中预测为1的概率)

在有些时候,我们需要保证查准率和召回率的相对平衡,并且学习它们作为算法评估度量值的更有效的方式。(为什么逻辑回归有个0.5, 原来是先逻辑回归有个hx概率结果,再进行人为划分类。)

7.3 F_{1} Score 

通常如果阈值设置的比较高,那么对应的查准率高、召回率低;相反如果阈值设置的低,那么查准率低、召回率高。这么看来threshold也就是临界值比较重要,那有没有办法自动选取临界值?或者更广泛地说,如果我们有不同的算法或者不同的想法,我们如何比较不同的查准率和召回率?

这里使用的F_{1} Score,即调和平均数(倒数的平均数)来衡量。 

 F_{1} Score会比较照顾数值小的一方,如果PR都为0, F_{1} Score=0;如果PR都为1,F_{1} Score=1。

 7.4 机器学习数据

 这节讲的重点是数据和特征的关系,例如,你就算找一个房地产经纪人,只给他房子有多大,他也无法准确给出价格,所以学习算法也没有办法给出准确的价格。

  • 对数据的要求:要包含足够多的特征,不然白搭;
  • 对算法的要求:要包含足够的参数。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

07-通过RocketMQ和Redis实现用户动态提醒

1、用户动态表 CREATE TABLE `t_user_moments` (`id` bigint(12) unsigned NOT NULL AUTO_INCREMENT COMMENT 主键id,`user_id` bigint(12) DEFAULT NULL COMMENT 用户id,`user_type` int(8) DEFAULT NULL COMMENT 动态类型:0视频 1直播 2专栏动态,`contend_id` bigint(12) D…

Linux下C/C++实现DNS查询(DNS QUERY)

DNS 的全称是 Domain Name System 或者 Domain Name Service,它主要的作用就是将人们所熟悉的网址 (域名) “翻译”成电脑可以理解的 IP 地址,这个过程叫做 DNS 域名解析。域名是由一串用点分隔的名字组成的 Internet 上某一台计算机或计算机组的名称&am…

从裸机启动开始运行一个C++程序(二)

先序文章请看: 从裸机启动开始运行一个C程序(一) 运行在8086上的第一个程序 既然硬件环境已经就绪了,那接下来,就要想办法让它运行我们的程序了。不过在此之前,我们必须要了解一下8086的主要架构&#xf…

微星MSI GE66 10SF-416RU电脑 Hackintosh 黑苹果efi引导文件

原文来源于黑果魏叔官网,转载需注明出处。(下载请直接百度黑果魏叔) 硬件配置 硬件型号驱动情况 主板Intel HM470 处理器Intel Core i7-10875H 2.30GHz up to 5.10GHz已驱动 内存Kingston Fury Impact DDR4 2x16Gb 3200mhz已驱动 硬盘NT…

【Linux】权限的理解

🌇个人主页:平凡的小苏 📚学习格言:命运给你一个低的起点,是想看你精彩的翻盘,而不是让你自甘堕落,脚下的路虽然难走,但我还能走,比起向阳而生,我更想尝试逆风…

Apache Flink 文件上传漏洞 (CVE-2020-17518)

文章目录 一、Apache Flink简介二、漏洞简介三、漏洞复现四、上传jar包getshell 一、Apache Flink简介 Apache Flink 是一个框架和分布式处理引擎,用于在无边界和有边界数据流上进行有状态的计算。Flink 能在所有常见集群环境中运行,并能以内存速度和任…

自定义组件3-behaviors

1、behaviors是小程序中用于实现组件间代码共享的特性,类似于Vue.js中的mixins 2、behaviors的工作方式 每个behaviors可以包含一组属性、数据、生命周期函数和方法。组件引用它时,它的数据和属性和方法会被 合并到组件中。 每个组件可以引用多个behav…

NXP MCUXPresso - cc1plus.exe: out of memory allocating 65536 bytes

文章目录 NXP MCUXPresso - cc1plus.exe: out of memory allocating 65536 bytes概述实验结论补充END NXP MCUXPresso - cc1plus.exe: out of memory allocating 65536 bytes 概述 在尝试迁移 openpnp - Smoothieware project 从gcc命令行 MRI调试方式 到NXP MCUXpresso工程…

数据库界的科技与狠活: 创邻科技Galaxybase X英特尔SGX数据加密解决方案正式发布

引言 近日,创邻科技入选与英特尔合作,在基于第四代英特尔至强处理器的支持下,利用软件防护扩展(Software Guard Extension,SGX) 技术,打造出了具备可信执行环境的图数据库产品,保护企业释放关联…

nodejs进阶(4)—读取图片到页面

我们先实现从指定路径读取图片然后输出到页面的功能。 先准备一张图片imgs/dog.jpg。 file.js里面继续添加readImg方法,在这里注意读写的时候都需要声明binary。(file.js 在上一篇文章nodejs进阶3-路由处理中有完整的内容) readImg:functi…

03)FastDFS配置nginx 服务,使用http方式访问图片

FastDFS是没有文件访问功能的,需要借助其他工具实现图片HTTP访问的。 没安装nginx时比如前端html网页想获取 FastDFS的一张图片显示,需要java写个controller,然后使用 FastDFS-java client客户端调用文件获取api,HttpServletResponre在返回图片流.给前端显示。 安装了nginx…

计算机图形学-GAMES101-9

前言 材质和光的相互作用很重要。VertexShader和FragmentShader。纹理贴图Texture mapping。 一、在三角形中插值 为什么要在三角形内部插值?虽然我们的操作很多是在三角形顶点上进行计算的,但是对于三角形内部我们也希望每个像素点能得到一个值&…

ChatGPT的兴起的时代,国内chatgpt产品大盘点

在人工智能技术的不断发展和应用下,自然语言处理技术成为了研究的热点之一。而其中最受关注的就是“聊天机器人”技术,而GPT(Generative Pre-trained Transformer)模型则是目前最流行的聊天机器人生成模型之一。 随着 ChatGPT 技…

模板类与友元

目录 分类 一、非模板友元:友元函数不是模板函数,而是利用模板类参数生成的函数; 代码 分析 运行结果 二、约束模板友元:模板类实例化时,每个实例化的类对应一个友元函数;并且这个模板友元适用多种类模…

pg事务:事务ID

事务ID pg中每个事务都会分配事务ID,事务ID分为虚拟事务ID和持久化事务ID(transactionID)。pg的事务ID非常重要,是理解事务、数据可见性、事务ID回卷等等的重要知识点。 虚拟事务ID 只读事务不会分配事务ID,事务ID是…

Chrome Performance 页面性能分析

Chrome Performance 页面性能分析 背景介绍 性能优化是前端开发一个非常重要的组成部分,如何更好地进行网络传输,如何优化浏览器渲染过程,来定位项目中存在的问题。Chrome DevTools给我们提供了2种常用方式 Audits和Performance&#xff0c…

三分钟看懂JDK、JRE和JVM的区别和联系

节选自JavaGuide(Github 标星 134k star!「Java学习 + 面试指南」一份涵盖大部分 Java 程序员所需要掌握的核心知识) JVM Java 虚拟机(JVM)是运行 Java 字节码的虚拟机。JVM 有针对不同系统的特定实现(Windows,Linux,macOS),目的是使用相同的字节码,它们都会给出相同…

【C++】21年精通C++之泛型编程和模板初阶知识

❤️前言 大家好!今天和大家一起学习关于C泛型编程和模板初阶的相关知识。 正文 我们之前已经学习了C中非常重要的一个特性——函数重载,函数重载很好地提高了我们代码的可读性。但是对于适配多种参数的某种函数来说,我们如果使用函数重载就…

Maven安装和配置(详细版)

Maven安装和配置 Maven安装1、安装链接:2、配置环境变量: Maven配置1、修改Maven仓库下载镜像及修改仓库位置:2、在Idea上配置Maven: 测试Maven安装能否安装jar包 Maven安装 1、安装链接: Maven – Download Apache …

阿里云服务器 之 mqtt服务器搭建及使用

本文主要是对mqtt的学习使用,其中服务器是基于阿里云服务器的mqtt功能,客户端使用的是mqttx软件。 一、服务器部分搭建说明 1、如果是首次使用,则需要经过注册与认证的步骤。 2、找到"产品与服务"-->"物联网平台"&…