解锁选择完美机器学习算法的秘密!
在处理数据科学问题时,最重要的选择之一是选择合适的机器学习算法。
解决数据科学问题时需要做出的关键决策之一是使用哪种机器学习算法。
有数百种机器学习算法可供选择,每种算法都有自己的优点和缺点。在某些算法的特定类型的问题或特定数据集上可能比其他算法效果更好。
“没有免费的午餐”(NFL)定理指出,没有一种算法最适合每个问题,或者换句话说,当所有可能的问题的性能平均时,所有算法都具有相同的性能。
在本文中,我们将讨论在为您的问题选择模型时应考虑的要点,以及如何比较不同的机器学习算法。
关键算法方面
以下列表包含您在考虑特定机器学习算法时可能会问自己的 10 个问题:
算法可以解决哪种类型的问题?算法可以只解决回归或分类问题,还是可以同时解决两者?它可以处理多类/多标签问题还是仅处理二元分类问题?该算法对数据集是否有任何假设?例如,一些算法假设数据是线性可分的(例如,感知器或线性SVM),而其他算法则假设数据是正态分布的(例如,高斯混合模型)。对算法的性能是否有任何保证?例如,如果算法试图解决优化问题(如逻辑回归或神经网络),是保证找到全局最优解还是只找到局部最优解?有效训练模型需要多少数据?一些算法,如深度神经网络,比其他算法更精通数据。算法是否趋于过度拟合?如果是这样,算法是否提供了处理过拟合的方法?在训练和预测期间,算法的运行时和内存要求是什么?为算法准备数据需要哪些数据预处理步骤?该算法有多少个超参数?具有大量超参数的算法需要更多时间来训练和调整。算法的结果是否易于解释?在许多问题领域(如医学诊断),我们希望能够用人类的术语来解释模型的预测。一些模型可以很容易地可视化(例如决策树),而其他模型的行为更像一个黑匣子(例如,神经网络)。该算法是否支持在线(增量)学习,即我们是否可以在不从头开始重建模型的情况下在其他样本上对其进行训练?
算法比较示例
例如,让我们采用两种最流行的算法:决策树和神经网络,并根据上述标准进行比较。
决策树
决策树可以处理分类和回归问题。他们还可以轻松处理多类和多标签问题。决策树算法对数据集没有任何特定的假设。决策树是使用贪婪算法构建的,该算法不能保证找到最佳树(即,最小化正确分类所有训练样本所需的测试数量的树)。但是,如果我们不断扩展决策树的节点,直到叶节点中的所有样本都属于同一类,则决策树可以在训练集上达到 100% 的准确性。这样的树通常不是好的预测因子,因为它们在训练集中过度拟合了噪声。决策树甚至可以很好地处理中小型数据集。决策树很容易过度拟合。但是,我们可以通过使用树木修剪来减少过度拟合。我们还可以使用集成方法,例如将多个决策树的输出组合在一起的随机森林。这些方法受过度拟合的影响较小。构建决策树的时间是 O(n²p),其中 n 是训练样本的数量,p 是特征的数量。决策树中的预测时间取决于树的高度,该高度通常以 n 为单位的对数,因为大多数决策树都相当平衡。决策树不需要任何数据预处理。它们可以无缝处理不同类型的特征,包括数字和分类特征。它们也不需要对数据进行规范化。决策树有几个需要调整的关键超参数,尤其是在使用修剪时,例如树的最大深度以及使用哪种杂质度量来决定如何拆分节点。决策树很容易理解和解释,我们可以很容易地将它们可视化(除非树非常大)。决策树不能轻易修改以考虑新的训练样本,因为数据集中的微小变化可能会导致树的拓扑发生较大变化。
神经网络
神经网络是现存最通用、最灵活的机器学习模型之一。它们几乎可以解决任何类型的问题,包括分类、回归、时间序列分析、自动内容生成等。神经网络没有关于数据集的假设,但数据需要规范化。神经网络使用梯度下降进行训练。因此,他们只能找到局部最优解决方案。但是,可以使用各种技术来避免陷入局部最小值,例如动量和自适应学习率。深度神经网络需要大量数据才能以数百万个样本点的数量进行训练。一般来说,网络越大(它拥有的层和神经元越多),我们就越需要数据来训练它。太大的网络可能会记住所有训练样本,并且不能很好地泛化。对于许多问题,您可以从一个小网络(例如,只有一个或两个隐藏层)开始,然后逐渐增加其大小,直到开始过度拟合训练集。您还可以添加正则化以处理过度拟合。神经网络的训练时间取决于许多因素(网络的大小、训练它所需的梯度下降迭代次数等)。但是,预测时间非常快,因为我们只需要在网络上进行一次前向传递即可获得标签。神经网络要求所有特征都是数值和归一化的。神经网络有很多超参数需要调整,比如层数、每层神经元数量、使用哪个激活函数、学习率等。神经网络的预测很难解释,因为它们基于大量神经元的计算,每个神经元对最终预测的贡献很小。神经网络可以很容易地适应包括额外的训练样本,因为它们使用增量学习算法(随机梯度下降)。
时间复杂度
下表比较了一些流行算法的训练和预测时间(n 是训练样本数,p 是特征数)。
Kaggle竞赛中最成功的算法
根据 2016 年进行的一项调查,Kaggle 竞赛获胜者最常用的算法是梯度提升算法 (XGBoost) 和神经网络(见这篇文章)。
在 29 年的 2015 名 Kaggle 竞赛获奖者中,其中 8 人使用 XGBoost,9 人使用深度神经网络,11 人使用两者的集合。
XGBoost主要用于处理结构化数据的问题(例如,关系表),而神经网络在处理非结构化问题(例如,处理图像,语音或文本的问题)方面更成功。
检查一下今天的情况是否仍然如此,或者趋势是否已经改变(有人愿意接受挑战吗?
感谢您的阅读!Roi Yehoshua博士是波士顿东北大学的教学教授,教授构成数据科学硕士课程的课程。他在多机器人系统和强化学习方面的研究已发表在人工智能领域的顶级领先期刊和会议上。他还是Medium社交平台上的顶级作家,经常发表有关数据科学和机器学习的文章。
编译:LCR
- 免责声明
- 本文所包含的观点仅代表作者个人看法,不代表新火种的观点。在新火种上获取的所有信息均不应被视为投资建议。新火种对本文可能提及或链接的任何项目不表示认可。 交易和投资涉及高风险,读者在采取与本文内容相关的任何行动之前,请务必进行充分的尽职调查。最终的决策应该基于您自己的独立判断。新火种不对因依赖本文观点而产生的任何金钱损失负任何责任。