当前位置: 首页 > news >正文

从0开始学习机器学习--Day20--优化算法的思路

确定执行的优先级(Prioritizing what to work on : Spam classification example)

在建立学习系统前,我们不仅要梳理框架,更重要的是我们要弄清楚有哪些事情是要优先做的,这可以帮我们节约大量的时间。

以垃圾邮件为例,按照之前解决分类问题的思路,我们可能会想到设置特征向量为x,在训练集中假设垃圾邮件的标签为1,否则则为0,但是怎么设置特征向量是一个关键的问题。假设我们有一个100个单词纵向排列的单词表,我们把邮件里的单词与表做对比,如果出现了表里的单词记为1,否则记为0,从而设置出一个由0和1构成的列向量,而这就是一个100维的特征向量了。当然,在实际操作中,我们是把训练集中出现的较多的单词放进表里,而不是随机写一个表,衡量较多次数的标准是出现次数在[10000,50000]。

像上述所说的方法,其实就是在试图让我们的算法如何在有限的时间内具有高精确度和低错误率,当然我们还可以添加其他特征,像通过标题的信息辅助判断,邮件内容中授信人信息的占比以及故意拼写错误的单词,都能帮助我们更好地优化算法,这些方法之间没有优劣之分,一般我们会随机采取其中一种或几种方法,只要不去盲目地收集数据扩大训练集。

误差分析(Error analysis)

在解决学习问题时,和想象中思考如何将尽可能考虑全面,如何做出一个复杂的系统不同,我们一般会先在较短的时间内粗略地做一个简单算法出来,并画出对应的学习曲线和计算出误差。在上一章我们了解到,这可以帮助我们知道我们应该往哪个方向优化算法,是应该扩充数据集,还是增加更多特征,亦或是更改正则化参数。

但在这里想说的一个同样很重要的方法:误差分析,我们可以在观察每次算法在验证集计算误差后,呈现出的错误预测的结果,多看看这些结果有利于我们思考怎样去设计新特征以及当下算法的优缺点。

对于垃圾邮件分类算法作误差分析

可以看到,假如我们有500个验证集,其中有100个被是错误分类的,通过手动分析我们发现其中的邮件以盗取密码为目的的钓鱼邮件居多,那么我们就可以在特征筛选时加强带有密码信息字眼的权重;假如我们分析这些错误分类的邮件中拼写错误的很少,来源奇怪和带有奇怪标点的邮件很多,这说明我们需要把更多的时间放在思考如何筛选后者。

另一个改进算法的技巧是在算法中加入数值估计,意思是在对算法做出改进后,优化后的算法可以返回一个数值评价标准来估计算法执行的结果,这有助于我们判断是否改进的方向是准确的,毕竟进步0.05和进步5是截然不同的两个效果。

假设我们思考根据词干将一些单词归为同一类以方便算法做出更好的判断,但有的只是因为单词的时态发生改变(discount,discounted,discounting),有的根本就是两个单词(universe,university),在这种情况下,最好的判断方法就是我们实施词干提取的方法然后观察效果是否显著,而在这种背景下,返回一个数值评价就能帮我们直观地感受一个方法的好坏,简单的做法就是用分类错误率作为数值评价,假如用了词干提取后错误率下降了,这就说明这是一个好的改进思路。所以我们一般都会在验证集执行这一步,毕竟这就有一个现成的、可以不需要加工的数据供我们参考,而不是在测试集再去做分析。

视频参考链接:https://www.bilibili.com/video/BV1By4y1J7A5?spm_id_from=333.788.player.switch&vd_source=867b8ecbd62561f6cb9b4a83a368f691&p=66


http://www.mrgr.cn/news/69413.html

相关文章:

  • package.json中“type“: “module“是什么含义,es6和commonjs的区别以及require和import使用场景
  • Redis - 哨兵(Sentinel)
  • 解决Oracle DECODE函数字符串截断问题的深度剖析20241113
  • 【MinIO】Python 运用 MinIO 实现简易文件系统
  • 比ChatGPT更酷的AI工具
  • Spring Boot 接口防重复提交解决方案
  • Sequelize+Sqlite3使用示例
  • “2048”游戏网页版html+css+js
  • 2024系统分析师---微服务架构(淘宝押题)
  • 万字长文解读深度学习——GPT、BERT、T5
  • FFmpeg存放压缩后的音视频数据的结构体:AVPacket简介,结构体,函数
  • C++入门(下)
  • 关于c语言内存越界及防范措施
  • C#-密封类、密封方法
  • 发顶会首选:大模型+时间序列!掌握这3大切入点,小白也能轻松上手!
  • 终端会话工具byobu
  • 增强现实技术在零售业中的应用
  • 程序员应该有什么职业素养?
  • 每日一题之二叉树
  • 程序员学长 | 最强总结,机器学习中处理不平衡数据集的五种方法!!
  • 配置多公钥在多平台使用Git
  • 【Steam登录】protobuf协议逆向
  • 字符在线统计字符在线统计
  • Vue3中使用Ant Design Vue的Table组件详解
  • Qt教程(007):资源文件添加
  • 利用 Screen 保持 VSCode 连接远程任务持续运行