0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

构建算法的推荐步骤

深度学习自然语言处理 来源:登龙 2020-08-28 10:21 次阅读

一、构建算法推荐步骤

当我们遇到一个问题,比如预测房价,我们想要用机器学习算法来更好的解决这个问题,推荐的步骤如下:

1.1 实现一个简单的算法

建议先花点时间实现一个简单能用的算法,比如线性回归预测房价,不需要一开始就花很多时间设计复杂的算法(在软件开发中叫避免过早优化)

你可以先实现能用的算法,然后利用上篇文章从 0 开始机器学习 - 机器学习算法诊断中的学习曲线等诊断法来分析算法的优化方向,这样一个简单的算法就成为了优化问题的好工具!

1.2 分析学习曲线

有个简单的算法后,我们就可以画出学习曲线了,然后就可以决定下一步到底要往哪个方向做优化:

获得更多的训练样本

尝试减少特征的数量

尝试获得更多的特征

尝试增加多项式特征

尝试减少正则化程度

尝试增加正则化程度

...

1.3 误差分析

假如我们有多个方向可以作为优化的方向,比如以下的方向都可以解决模型的高方差问题:

获得更多的训练样本 - 适用于高方差的模型

尝试减少特征的数量 - 适用于高方差的模型

尝试增加正则化程度 - 适用于高方差的模型

那我们又如何来评估每种方法的性能到底提升多少呢?或者说有没有一种直接的指标来告诉我,使用了这样一种优化措施后我的算法性能到底提高了多少百分比?

今天就来看看如何分析机器学习算法的误差。

二、机器学习算法误差分析

2.1 偏斜类问题

在介绍误差分析指标前,先来了解一个偏斜类问题:

训练集中有非常多同一类的样本,只有很少或者没有其他类的样本,这样的训练样本称为偏斜类。

比如预测癌症是否恶性的 100 个样本中:95 个是良性的肿瘤,5 个恶性的肿瘤,假设我们在这个样本上对比以下 2 种分类算法的百分比准确度,即分类错误的百分比:

普通非机器学习算法:人为把所有的样本都预测为良性,则分错了 5 个恶性的样本,错误率为 5 / 100 = 0.05 = 5%

神经网络算法:训练后预测 100 个样本,把 10 个良性的样本误分类为恶性的样本,错误率为 10 / 100 = 10%

如果仅仅从错误率大小来判断算法的优劣是不合适的,因为第一种人为设置样本都为良性的算法不会在实际项目中使用,但是通过指标却发现效果比神经网络还要好,这肯定是有问题的。

正是因为存在这么一种偏斜类的训练样本,所以我们需要用一个更加一般性的算法准确度评价指标,以此适用与任何类型的样本,解决上面那种荒唐的结论。

2.2 查准率与查全率

为了解决这个问题,使用查准率(Precision)和查全率(Recall)这 2 个误差指标,为了计算这 2 者,我们需要把算法预测的结果分为以下 4 种:

正确肯定(True Positive,TP):预测为真,实际为真

正确否定(True Negative,TN):预测为假,实际为假

错误肯定(False Positive,FP):预测为真,实际为假

错误否定(False Negative,FN):预测为假,实际为真

把这 4 个写到表格里面:

Positive Negative
Positive TP FN
Negative FP TN
实际值 预测值

然后我们就可以定义这 2 个指标啦:

查准率 = TP / (TP + FP):预测为真(恶性肿瘤)的情况中,实际为真(恶性肿瘤)的比例,越高越好

查全率 = TP / (TP + FN):实际为真(恶性肿瘤)的情况中,预测为真(恶性肿瘤)的比例,越高越好

有了这 2 个指标我们再来分析下上面的算法性能,第一个人为的算法认为所有的肿瘤都是良性的,也就等价于原样本中 5 个恶性的肿瘤样本一个都没有预测成功,也即所有恶性肿瘤样本,该算法成功预测恶性肿瘤的比例为 0,所以查全率为 0,这说明该算法的效果并不好。

2.3 查准率与查全率的整合

在实际的使用中,查准率和查全率往往不能很好的权衡,要想保持两者都很高不太容易,通过使用以下的公式来整合这 2 个评价指标可以帮助我们直接看出一个算法的性能优劣:

以后评价一个算法的性能直接比较 F1 Score 即可,这就大大方便了我们对比算法的性能。

三、机器学习的样本规模

除了评价指标,还有一个要关心的问题就是样本的规模,在机器学习领域有一句话:「取得成功的人不是拥有最好算法的人,而是拥有最多数据的人」

这句话的意思就是说当我们拥有非常多的数据时,选择什么样的算法不是最最重要的,一些在小样本上表现不好的算法,经过大样本的训练往往也能表现良好。

比如下面这 4 种算法在很大样本上训练后的效果相差不是很大,但是在小样本时有挺大差距:

但在实际的机器学习算法中,为了能够使得训练数据发挥最大效用,我们往往会选一个比较好的模型(不太容易欠拟合,比如神经网络),再加上很多的样本数据(防止过拟合)

通过这 2 者就可以让一个算法变的很强大,所以以后当你设计机器学习算法的时候一定要考虑自己的样本规模,选择合适的模型适应你的数据,如果你有很多很多的数据,那么可以选择复杂一点的模型,不能白白浪费你的数据!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 算法
    +关注

    关注

    23

    文章

    4599

    浏览量

    92619
  • 模型
    +关注

    关注

    1

    文章

    3160

    浏览量

    48703
  • 机器学习
    +关注

    关注

    66

    文章

    8375

    浏览量

    132397

原文标题:从 0 开始机器学习 - 机器学习系统的设计与误差分析

文章出处:【微信号:zenRRan,微信公众号:深度学习自然语言处理】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    RNN算法的三个关键步骤

    DL之RNN:RNN算法相关论文、相关思路、关键步骤、配图集合+TF代码定义
    发表于 12-28 14:20

    MAKEFILE条件预构建步骤

    您好,我在项目中有两个配置,我想在构建配置之前做一些事情。我已经在项目属性中使用了预构建步骤,但有不同的东西。我可以使用“IFEQ”来选择MaFIX文件“.BuffPi::”部分中的配置的预
    发表于 01-30 07:54

    六大步骤学习贝叶斯算法

    学习贝叶斯算法的五个步骤
    发表于 07-16 16:57

    怎么将#define值传递给后期构建步骤

    我想创建一个打包后的步骤来打包我的版本。我们使用C源代码中的一个定义来配置我们的构建。是否有人知道一种方法,可以在后生成步骤中从源代码中传递清单常数的值?例如,如果在Cfg.h中存在
    发表于 10-08 10:17

    PID算法调试步骤

    0、前言在我看来,其实控制题是较好做(混)的一种题型,你懂我意思吧。控制题简单概括下,大概就是三个步骤。1、构建整体方案。2、设计整体控制电路。3、软件程序设计—PID算法调试。1 、整体方案拿到
    发表于 11-30 06:34

    有什么方法可以添加闪存前和闪存后构建步骤吗?

    有什么方法可以添加闪存前和闪存后构建步骤吗?对于我的系统,我必须向 ESP 发送一条特殊命令以将其置于引导加载程序模式,然后再发送一条命令使其真正启动。除了正常的构建步骤之外,我似乎无
    发表于 03-02 08:36

    有什么方法可以添加闪存前和闪存后构建步骤吗?

    有什么方法可以添加闪存前和闪存后构建步骤吗?对于我的系统,我必须向 ESP 发送一条特殊命令以将其置于引导加载程序模式,然后再发送一条命令使其真正启动。除了正常的构建步骤之外,我似乎无
    发表于 04-14 08:07

    基于设备性能的蓝牙散列网构建算法

    蓝牙规范中没有提供蓝牙散列网的构建方法。该文采用基于设备性能组建散列网的思想,提出一种散列网构建算法算法选择性能优良的设备担任主节点和桥节点,并采取措施控制
    发表于 03-29 11:00 14次下载

    WSN中能量有效的连通支配集构建算法

    现有的连通支配集构建算法大多过程复杂、步骤冗余、耗能较多,且不能适应网络动态拓扑的变化。为此,提出一种能量有效的构建算法。该
    发表于 03-06 17:22 1次下载

    OpenHarmony Dev-Board-SIG专场:搭建编译构建主要步骤

    OpenHarmony Dev-Board-SIG专场:搭建编译构建主要步骤
    的头像 发表于 12-28 14:37 1040次阅读
    OpenHarmony Dev-Board-SIG专场:搭建编译<b class='flag-5'>构建</b>主要<b class='flag-5'>步骤</b>

    TensorRT构建具有动态形状的引擎的步骤

    动态形状(Dynamic Shapes) 是延迟指定部分或全部张量维度直到运行时的能力。动态形状可以通过 C++ 和 Python 接口使用。 以下部分提供了更详细的信息;但是,这里概述了构建具有动态形状的引擎的步骤
    的头像 发表于 05-13 16:40 3094次阅读

    介绍从一组可重用的验证组件中构建测试平台所需的步骤

    本文介绍了从一组可重用的验证组件中构建测试平台所需的步骤。UVM促进了重用,加速了测试平台构建的过程。
    的头像 发表于 06-13 09:11 460次阅读
    介绍从一组可重用的验证组件中<b class='flag-5'>构建</b>测试平台所需的<b class='flag-5'>步骤</b>

    可重用的验证组件中构建测试平台的步骤

    本文介绍了从一组可重用的验证组件中构建测试平台所需的步骤。UVM促进了重用,加速了测试平台构建的过程。 首先对 测试平台集成者(testbench integrator) 和 测试编写者(test
    的头像 发表于 06-13 09:14 559次阅读
    可重用的验证组件中<b class='flag-5'>构建</b>测试平台的<b class='flag-5'>步骤</b>

    EEMD方法的原理与算法实现步骤

    电子发烧友网站提供《EEMD方法的原理与算法实现步骤.pdf》资料免费下载
    发表于 10-23 11:44 0次下载
    EEMD方法的原理与<b class='flag-5'>算法</b>实现<b class='flag-5'>步骤</b>

    使用SSR构建React应用的步骤

    使用SSR(Server-Side Rendering,服务器端渲染)构建React应用的步骤通常包括以下几个阶段: 一、项目初始化与配置 创建React项目 : 可以使用Create React
    的头像 发表于 11-18 11:30 193次阅读