这是一个有趣的问题——在很多方面,这确实是机器学习中的问题。
答案的简短版本是这样的:您选择的模型非常重要,但没有银弹或魔锤;除了一些值得注意的例外,值得将您学到的所有技术视为在正确情况下使用的工具。实际发生的选择通常涉及一些分析、一些可视化、一些直觉、一些经验和一点巫术(也就是说,运气)。
我将分两部分回答您:第一,我将给出适合特定模型的问题示例,第二,我将概述我在第一次设置时采用的一些方法。
考虑复杂环境中的图像识别问题。这不是一个容易解决的问题;它通常可以处理丰富的特性和不同的抽象级别。在这种情况下,人们可能会尝试某种类型的神经网络(让我们说一些花哨的东西,比如卷积网络):这具有作为一个非常有表现力的模型的优势,它可能只是对复杂的相互关系进行建模所需的动力工具变量。当然,付出的代价是算法可能相当昂贵。然而,考虑到模型的丰富性所带来的优势,这种缓慢可能是合理的。
现在,考虑一个非常不同的问题,即在很长一段时间内找到嘈杂的时间序列数据的总体趋势;假设我们的选择是“上升”或“下降”。在这种情况下,人们可能会想使用非常复杂的解决方案,比如上面的神经网络;正如我们所提到的,这将是一个强大的工具,可以解释数据中的复杂关系。另一方面,对于范围如此有限的问题,简单地使用 OLS 回归并查看拟合数据的线性方程的斜率可能会很有用。它会又快又脏,但它可能会完成这项工作。在这种情况下,神经网络可能会大材小用。
您可能会注意到,在我上面的回答中有很多“也许”、“可能”和“可能”。不幸的是,往往没有硬性规定。当我考虑使用什么模型时,我会想到以下标准,这至少让我朝着正确的方向前进(希望如此):
计算约束是什么?(例如,如果我需要根据动态输入在网页上向用户提供快速估计,我不会使用深度网络)。
数据可视化后是什么样子的?对于回归问题,输入是否类似于我知道的任何数学函数?可以对其应用任何转换吗?对于聚类,是否有任何明显的模式?集群的形状大致如何?
数据集有多稀疏或密集?过拟合的倾向是什么?执行交叉验证有多容易?
之后就是利用经验,做一些实验性的测试,然后再改进。它既是一门艺术,又是一门科学,既令人兴奋又艰难。
我希望这会有所帮助;如果您有任何问题,请告诉我。祝你好运!
编辑:作为一个简短的附录,并回答您提出的具体问题:当数据包含许多丰富的关系时,诸如 NN 之类的表达模型很有用;但是,当复杂性是主要问题和/或可以以某种方式预测数据的一般形式时(例如,“数据看起来像带有一些噪声的线性函数”)。
编辑编辑:等等,还有一件事——我从来没有发现“释放所有算法,看看有什么用”的方法有用。在我看来,一个人在这个领域可以培养的最重要的一项技能就是理解为什么某些问题最好通过某些解决方案来解决;它将为您节省大量时间。