为什么使用机器学习?

思考一下,你会如何使用传统的编程技术写一个垃圾邮件过滤器(图 1-1):

  1. 你先观察下垃圾邮件一般都是什么样子。你可能注意到一些词或短语(比如 4U、credit card、free、amazing)在邮件主题中频繁出现,也许还注意到发件人名字、邮件正文的格式,等等。

  2. 你为观察到的规律写了一个检测算法,如果检测到了这些规律,程序就会标记邮件为垃圾邮件。

  3. 测试程序,重复第1步和第2步,直到满足要求。

为什么使用机器学习? - 图1

图 1-1 传统方法

这个问题并不简单,你的程序很可能会变成一长串复杂的规则—— 这样就会很难维护。

相反的,基于机器学习技术的垃圾邮件过滤器会自动学习哪个词和短语是垃圾邮件的预测值,通过与普通邮件比较,检测垃圾邮件中反常频次的词语格式(图 1-2)。这个程序短得多,更易维护,也更精确。

为什么使用机器学习? - 图2

图 1-2 机器学习方法

进而,如果发送垃圾邮件的人发现所有包含“4U”的邮件都被屏蔽了,可能会转而使用“For U”。使用传统方法的垃圾邮件过滤器需要更新以标记“For U”。如果发送垃圾邮件的人持续更改,你就需要被动地不停地写入新规则。

相反的,基于机器学习的垃圾邮件过滤器会自动注意到“For U”在用户手动标记垃圾邮件中的反常频繁性,然后就能自动标记垃圾邮件而无需干预了(图1-3)。

为什么使用机器学习? - 图3

图 1-3 自动适应改变

机器学习的另一个优点是善于处理对于传统方法太复杂或是没有已知算法的问题。例如,对于语言识别:假如想写一个可以识别“one”和“two”的简单程序。你可能注意到“two”起始是一个高音(“T”),所以可以写一个可以测量高音强度的算法,用它区分 one 和 two。很明显,这个方法不能推广到嘈杂环境下的数百万人的数千词汇、数十种语言。(现在)最佳的方法是根据大量单词的录音,写一个可以自我学习的算法。

最后,机器学习可以帮助人类进行学习(图 1-4):可以检查机器学习算法已经掌握了什么(尽管对于某些算法,这样做会有点麻烦)。例如,当垃圾邮件过滤器被训练了足够多的垃圾邮件,就可以用它列出垃圾邮件预测值的单词和单词组合列表。有时,可能会发现不引人关注的关联或新趋势,有助于对问题更好的理解。

为什么使用机器学习? - 图4

图 1-4 机器学习可以帮助人类学习

使用机器学习方法挖掘大量数据,可以发现并不显著的规律。这称作数据挖掘。

总结一下,机器学习善于:

  • 需要进行大量手工调整或需要拥有长串规则才能解决的问题:机器学习算法通常可以简化代码、提高性能。

  • 问题复杂,传统方法难以解决:最好的机器学习方法可以找到解决方案。

  • 环境有波动:机器学习算法可以适应新数据。

  • 洞察复杂问题和大量数据。