以下内容有任何不理解可以翻看我之前的博客哦:吴恩达deeplearning.ai专栏
我想在接下来分析下开发机器学习系统的过程,这样当你自己动手时,能够做出更加正确的判断。
机器学习开发的迭代 Iterative loop of ML development
决定模型架构
第一步,要决定模型架构,这意味着你要选择正确的模型,正确的参数,也许超参数等等。在决定完这些后,就可以训练模型。正如在之前的博客之中说的那样,模型一般不会一上来就很理想。下一步就可以查看一些诊断,例如查看程序的偏差和方差(以及下一节中的错误分析),根据诊断的结果,你可以再次调整模型,例如调整正则化系数啊,扩大神经网络啊,添加删除数据啊,增加或者减去特征之类的,这样就形成了一个迭代的闭环:
让我们看看一个垃圾邮件分类器的示例:
垃圾邮件分类器
左边是垃圾邮件的示例,右边是正常邮件:
垃圾邮件中经常会拼错一些敏感词,从而使得垃圾邮件分类器出错,所以我们该如何构建分类器呢
一种方法是构建一个监督学习算法,其中输入特征x是是电子邮件的特征输出标签y是0or1,这取决于文章是否是垃圾邮件。
构造电子邮件特征的一种方法是取英语单词的前10,000个单词并使用它们构造特征x_1一直到x_10000,例如下图的邮件,我们的输入特征就是a,andrew,buy,deal,discount等是否出现,出现了就记为1,否则为0:
另一种方法是记录出现次数,而非单单的01:
之后你就开始训练模型。并且开始想方法提高模型性能,以下是一些方法:
- 获得更多数据
- 发展基于邮件地址的复杂的特征
- 发展更加复杂的读文件文本的功能
- 检测语法错误
选择正确的方法可以加速你的工作进度。例如,如果你的模型具有高偏差,那么方法一就不太合适,但如果具有高方差,那么就比较合适了。在开发算法时,可以发展很多不同的想法并应用,并不一定要拘束于特定的一些方面。
误差分析
在诊断并选择下一步如何修改模型这一方面,我认为最重要的是偏差方差分析,而第二重要的就是误差分析。让我们看看具体是什么:
假设你有500个交叉验证的示例,并且你的算法错误地分类了其中的100个。误差分析的意思仅仅就是手动地查看这些事例每个具体错在了什么地方,从而能够了解算法错在了什么地方。具体来说,一种经常的做法是从错误的示例中找出一组,并将其分组为共性的主题或者特征。
例如,你发现很多分错的例子是药品销售,那么你就可以手动地查找,并且发现有21篇是药品销售。或者你怀疑是因为有些邮件有故意拼错的单词导致无法识别,那么也可以计算下有多少篇是有拼写错误的,假设找到了三个,按照这个思路下来,你可能还会找到邮件地址异常的7篇,18篇试图窃取密码,还有那么5篇是通过发送图片来发送垃圾邮件的。
然后你就会得出结论,影响你算法准确度的主要是以下几类邮件:卖药的邮件,窃取密码的邮件。那么你就当然优先解决以上的这些问题。
另外要说明的是,以上的这些类别并非一定是相互独立的,其实很多是相互重叠的,即一个例子可以有以上的多个特征。
如果例子很多的话,你可能没法一次性查看所有的例子,可以采取随机抽查的方法。
下一步怎么做
接下来,你就可以针对某种类型的问题来专门修正的你的模型。例如你发现你的模型难以识别医药类广告,那么你就可以多给它喂医药类邮件的数据,让它对其更加敏感。或者你可以在你的词库中增加医药类的相关名词,等等。反正就是对症下药。因此诊断时除了观察偏差方差,记得还可以进行误差分析。
为了给读者你造成不必要的麻烦,博主的所有视频都没开仅粉丝可见,如果想要阅读我的其他博客,可以点个小小的关注哦。