7.1. 学习系统构建方法
本文最后更新于 2024年1月27日 下午
学习系统构建方法
方法优先级
假设垃圾邮件中会存在一些故意拼错的单词,如何通过监督机器学习建立一个垃圾邮件分类器?
设\(x\)表示邮件的特征,分类标签\(y={0,1}\)分别表示不是垃圾邮件和是垃圾邮件。
一个简单思路是从邮件中选取100个单词作为分类器决定邮件是否是垃圾邮件的特征。
将这100个单词编码按照字典排序,设特征向量\(x\)是一个100维的向量,每一个维度代表了100个词中的某一个词在一封邮件中出现(1)或者是不出现(0),用数学的表达即为
\[x_j=\begin{cases}
1 \text{ if appear} \\
0 \text{ if not appear}
\end{cases}\] 整个过程如下图所示。
事实上,在实际的分类器中,通常会按照训练集中邮件的词频选出10000到50000个单词来作为特征向量的维度。
对于上述的垃圾邮件分类器,如何在邮箱的时间内让垃圾邮件分类器具有高准确率?
下面提供了几种常见的思路:
1. 收集更多的数据。(比如:Honeypot Project)
2. 用更加复杂的特征向量。(比如包括发件人,邮件的主题等等)
3.
简化目前的特征向量,比如“deal”和“deals”,“discount”和“discounts”是否应该合并在同一维度?
或者考虑大小写以及标点符号。
4. 检测故意拼错的单词。
这些思路中哪些才是最具效率的? 怎样用科学和系统的方法从这些改进方法中选择出真正有效率的改进方法? 这是本章将会聚焦的问题。
系统构建的方法
- 用最简单的算法构建神经网络,训练并且用验证集验证。
- 画出学习曲线决定是否需要更多的特征或者数据。
- 误差分析:查看被算法分类错误的文件,找出共同的规律。
具体而言,对于垃圾邮件分类器,需要查看全部分类错误的邮件,将它们手动分类并确认它们共同的特性。思考这些共性作为特征如何帮助分类器进行识别。
这样做的目的是通过简单的分类算法更能够发现错误的识别,从而获取更明显的特征,进而优化算法。
数值方法
此外,在训练过程中返回一个数学结果(比如准确率)是非常有效的。
比如:思考是否将“discount/discounted/discounts/discounting”作为同一个特征?
基本思路是通过词干提取(Stemming)软件来提取词干,但是这种软件最简单的检查单词前面的几个字母,因此可能会发生误识别的情况(比如“University/Universe”)。那么是否应该应用词干提取软件来提取特征呢?简单的办法是快速运行一下词干提取软件,获取此时的正确率,与不进行词干提取软件时的正确率进行对比。通过对比试验来辅助决策。