考虑如何使用传统编程技术编写垃圾邮件过滤器(图1-1):
首先,您会看到垃圾邮件通常是什么样的。你可能会注意主题(subject)中出现的一些单词或短语(比如“4U”、“信用卡”、“free”和“amazing”)。也许您还会注意到发件人姓名、邮件正文等其他一些模式。
您将为您所注意到的每个模式编写一个检测算法,如果检测到一些这样的模式,您的程序将标记电子邮件为垃圾邮件。
您将测试您的程序,并重复步骤1和步骤2,直到它足够好为止。
图1 - 1:传统的方法
因为这个问题并不简单,你的程序很可能会变成一个关于复杂规则的很长的列表——很难维护。
相比之下,基于机器学习技术的垃圾邮件过滤器通过在垃圾邮件样本中发现异常频繁的单词模式(图1-2),自动学习哪些单词和短语是垃圾邮件的良好预测因子。这个程序更短,更容易维护,而且很可能更准确。
图1 - 2 机器学习方法
此外,如果垃圾邮件发送者注意到他们所有包含“4U”的邮件都被屏蔽了,它们可能会使用“For U”来代替“4U”。使用传统编程技术的垃圾邮件过滤器需要更新对“For U”电子邮件的标记规则。如果垃圾邮件发送者继续在你的垃圾邮件过滤器周围工作,你将需要不断地编写新的规则。
相反,基于机器学习技术的垃圾邮件过滤器会自动注意到“For U”在用户标记的垃圾邮件中变得异常频繁,并且在没有您的干预的情况下开始标记过滤它们(图1-3)。
图1 - 3 自动适应变化
机器学习的另一个领域是针对传统方法过于复杂或者没有已知算法的问题。例如,考虑一个语音识别程序:从简单的开始,写一个能够区分单词“one”和“two”的程序。你可能会注意到,“two”一词的开头是高音(T),所以你可以硬编码一个算法,用来测量高音的声音强度,然后用它来区分one和two。很明显,这种技术不会扩展到成千上万的人在嘈杂的环境中,用十多种语言中所说的话。最好的解决方案(至少是今天)是编写一个可以自我学习的算法,并为每个单词提供许多录音样本。
最后,机器学习可以帮助人类学习(图1-4):可以对ML算法进行检查,看看他们学到了什么(尽管对于一些算法来说,这可能有点棘手)。例如,一旦垃圾邮件过滤器被训练了足够多的垃圾邮件,它可以很容易地被检查,以显示单词的列表和它认为是垃圾邮件的最佳预测者的单词组合。有时这将揭示未知的相关性或新趋势,从而导致更好地理解问题。
使用ML技术来挖掘大量的数据可以帮助发现没有立即显现的模式。这就是所谓的数据挖掘(data mining)
图1 - 4 机器学习可以帮助人类学习。
总之,机器学习对下面的各个方面都很适合:
现有解决方案需要大量手工调优或冗长的规则列表的问题:一种机器学习算法通常可以简化代码并执行得更好。
在所有使用传统方法的情况下都没有好的解决方案的复杂问题:最好的机器学习技术可以找到解决方案。
波动环境:机器学习系统可以适应新的数据。
了解复杂问题和大量数据。