1.8 更进一步
人们第一次看到算法时,我常常看到的反应之一是“但是……这有点蠢。”他们真正的意思是,“但是……哪里有学习?”机器学习的正式定义是:“编写一个程序,在得到更多数据时,更好地执行某项任务。”我们的模型——1-最近邻算法完全符合这一定义:可以预期,越大的样本“工作得越好”(反过来,可以预期减少样本会使性能降级)。另一方面,它不太符合我们对“学习”的直观理解。我们的模型实际上记住了看到的所有情况,而人们倾向于将学习视为对高层抽象的辨别,这提供了经验的更紧凑表现形式。当你看到一个数字的图像时,不会重温一生中见过的所有图像以决定是否匹配——你知道用于过滤和识别的高层概念(“0就像一个圆圈”)。
可以在我们的问题上使用更高级的算法(如支持向量机或者神经网络,第8章中将这么做),它们的行为和“学习”的概念更符合:在训练阶段处理数据,并提取简化的表现形式。这样做的明显缺点是训练阶段实际上将变得更加复杂,好处是所得到的模型更小、更快。
那么,应该使用支持向量机、神经网络还是其他方法?和往常一样,答案是“看情况”。首先,这取决于你的终极目标。你的目标可能是更加精确;如果代码部署于生产环境,目标也可能是更快、使用更少内存或者其他。
正如前面所讨论的那样,实际上没有办法知道某种模型是否好于另一种——你必须尝试,这可能代价很高。所以,在追求更好的模型之前,要仔细考虑:当前模型是否足够好?工作是否集中于正确的问题?正如法国谚语所说“更好是好的敌人”。我们的简单算法已经达到大约95%的分类正确率,相当不错了。如果这已经足够,就不要浪费时间,转向感兴趣的下一个问题。机器学习问题有能力自己生存,除非你有一个快速、100%准确的完美模型,否则永远不能说“完成”了,回到工作中继续改善、挤出每一点精确度是很有诱惑的。因此,必须提前想好什么是“足够好”,否则可能需要很长时间来追求完美!