1.2 为什么使用机器学习
考虑一下如何使用传统的编程技术编写垃圾邮件过滤器(见图1-1):
图1-1:传统方法
1.首先,你会检查垃圾邮件通常是什么样子。你可能会注意到一些词或短语(例如“4U”“信用卡”“免费”和“惊人的”)往往会在主题行中出现很多次。也许你还会注意到发件人姓名、电子邮件正文和电子邮件其他部分中的一些其他模式。
2.你会为你注意到的每个模式编写一个检测算法,如果检测到许多这样的模式,你的程序会将电子邮件标记为垃圾邮件。
3.你会测试程序并重复步骤1和步骤2,直到它足够好可以发布。
由于这个问题很困难,因此你的程序很可能会变成一长串复杂的规则——很难维护。
相比之下,基于机器学习技术的垃圾邮件过滤器会自动学习词和短语,这些词和短语是垃圾邮件的预测因素,通过与非垃圾邮件比较,检测垃圾邮件中反复出现的词语模式(见图1-2)。该程序更短,更易于维护,也更准确。
图1-2:机器学习方法
如果垃圾邮件发送者注意到他们所有包含“4U”的电子邮件都被阻止了怎么办?他们可能会转而写“For U”。使用传统编程技术的垃圾邮件过滤器需要更新来标记“For U”电子邮件。如果垃圾邮件发送者一直绕过你的垃圾邮件过滤器,你就需要不断编写新规则。
相比之下,基于机器学习技术的垃圾邮件过滤器会自动注意到“For U”在用户标记的垃圾邮件中变得异常频繁,并且在没有人工干预的情况下自动标记垃圾邮件(见图1-3)。
图1-3:自动适应变化
机器学习的另一个亮点是擅于处理对于传统方法过于复杂或没有已知算法的问题。例如,考虑语音识别,假设你想编写一个能够区分单词“one”和“two”的简单程序。你可能会注意到单词“two”以高音(“T”)开头,因此你会对测量高音强度的算法进行硬编码并使用它来区分“one”和“two”,但显然这种技术不能扩展到所有的语音识别(人们所处环境不同、语言不同、使用的词汇不同)。最好的解决方案(至少在今天)是根据给定的大量单词录音示例,编写一个能够自我学习的算法。
最后,机器学习可以帮助人类进行学习(见图1-4)。可以检查ML模型来查看它们学到了什么(尽管这对于某些模型来说可能很棘手)。例如,一旦垃圾邮件过滤器接受了足够多的垃圾邮件训练,就可以用它列出垃圾邮件预测器的单词和单词组合。有时候这会揭示意想不到的相关性或新趋势,从而更好地理解问题。挖掘大量数据来发现隐藏的模式称为数据挖掘,机器学习擅长于此。
图1-4:机器学习可以帮助人类进行学习
总而言之,机器学习非常适合:
· 现有解决方案需要有大量微调或一长串规则来解决的问题(机器学习模型通常可以简化代码并且比传统方法执行得更好)。
· 使用传统方法无法解决的复杂问题(最好的机器学习技术可能会找到解决方案)。
· 变化的环境(机器学习系统可以很容易地根据新数据重新训练,始终保持最新状态)。
· 深入了解复杂问题和大量数据。