1.3 选择正确的算法
前面我们了解了3类机器学习算法的异同。现在是时候回答这个问题了:如何根据具体需求选择相应算法呢?
然而,这个问题没有针对所有情形都普遍适用的答案,最好的答案可能是:看情况。对于不同情况都需要考虑哪些因素呢?需要考虑的主要因素来源于数据集,包括数据集的大小、质量高低以及数据间隐含的联系。同时,也需要考虑任务的目的、算法是如何编写的、有多长时间去训练这些算法等。总之,没有统一的标准,确定一个算法选取是否合理的唯一办法就是通过使用一下试试效果。
不过,为了弄明白最适合需求的算法是什么,我们可以进行一些预备分析。通过分析数据集、现有的工具(算法)、任务目标(输出结果)的基础性质,我们能够得到许多挑选算法的有用信息。
从分析数据集这个方法出发。我们可以从两个不同的角度挑选算法——输入和输出。
(1)根据算法的输入进行挑选。
● 监督学习:接收的训练数据集中样本既有输入值,也有对应的标签。
● 无监督学习:接收的训练数据集中没有标签集,我们希望得到数据集中样本间的某种关系。
● 强化学习:接收的训练数据是通过与外界进行互动迭代式积累的,我们希望在迭代、与环境交互中优化目标函数。
(2)根据输出进行挑选。
● 回归问题:输出是连续数值。
● 分类问题:输出是离散类型。
● 聚类问题:输出结果是输入样本组成的一些簇。
图1.9展示了基于已有的数据在挑选算法时可以参考的两个角度。
图1.9 预备分析
在了解了数据集的基本性质的基础上,我们可以进一步根据已有算法分析哪些算法适合我们的输入数据集,能够给出想要的输出结果,从而缩小目标算法的挑选范围。
在了解了数据集和有了明确的算法范围后,我们需要训练这些算法,评估各个算法的表现。我们把选择的算法应用到手头的数据集上。接下来,通过一系列精心选择的衡量算法表现的指标,我们能够对这些算法的表现进行比较,最终选出最合适的算法。