数据科学:带你选择完美机器学习算法

大家好,在解决数据科学问题时,需要做出的关键决定之一就是使用哪种机器学习算法。

有数百种机器学习算法可供选择,每种算法都有自己的优缺点。对于特定类型的问题或特定的数据集,某些算法可能比其他算法更有效。

“No Free Lunch(没有免费的午餐)” (NFL)定理指出,没有一种算法适用于每个问题,换句话说,所有算法在所有可能问题上的平均表现都是一样的。

数据科学:带你选择完美机器学习算法_第1张图片

本文将讨论在为问题选择模型时应考虑的要点,以及如何比较不同的机器学习算法。

关键算法方面

如下列出了在考虑特定机器学习算法时可能会问自己的10个问题:

  1. 该算法可以解决哪种类型的问题?该算法只能解决回归或分类问题,还是两者都可以解决?它能处理多类别/多标签问题,还是只能处理二元分类问题?

  2. 算法是否对数据集有任何假设?例如,有些算法假定数据是线性可分的(例如感知器或线性SVM),而有些算法则假定数据是正态分布的(如高斯混合模型)。

  3. 算法的性能是否有任何保证?例如,如果算法试图解决优化问题(如逻辑回归或神经网络),它是否能保证找到全局最优解,还是只能找到局部最优解?

  4. 需要多少数据才能有效训练模型?有些算法(如深度神经网络)比其他算法更精通数据。

  5. 算法是否倾向于过拟合?如果是,该算法是否提供了处理过拟合的方法?

  6. 在训练和预测期间,算法的运行时间和内存需求是多少?

  7. 需要哪些数据预处理步骤来为算法准备数据?

  8. 算法有多少超参数?超参数较多的算法需要更多时间来训练和调整。

  9. 算法结果是否易于解释?在许多问题领域(如医疗诊断)中,我们希望能用人类术语解释模型的预测结果。有些模型很容易可视化(如决策树),而有些模型则更像一个黑盒子(如神经网络)。

  10. 该算法是否支持在线(增量)学习,也就是说,我们能否在不从头开始重建模型的情况下,用更多的样本对其进行训练?

算法比较示例

例如,以决策树和神经网络这两种最流行的算法为例,根据上述标准对它们进行比较。

决策树

  1. 决策树可以处理分类和回归问题。它们还可以轻松处理多类别和多标签问题。

  2. 决策树算法对数据集没有任何特定的假设。

  3. 决策树是通过贪婪算法构建的,这种算法并不能保证找到最优树(即正确分类所有训练样本所需的测试次数最少的树)。然而,如果我们不断扩展决策树的节点,直到叶子节点中的所有样本都属于同一类别,那么决策树在训练集上的准确率就能达到100%。这种树通常不是好的预测工具,因为它们过度拟合了训练集中的噪声。

  4. 即使是中小型数据集,决策树也能很好地发挥作用。

  5. 决策树很容易过度拟合。不过可以通过使用剪枝来减少过拟合。还可以使用组合方法,如将多个决策树的输出组合起来的随机森林。这些方法受过拟合的影响较小。

  6. 构建决策树的时间为O(n²p),其中n是训练样本的数量,p是特征的数量。决策树的预测时间取决于树的高度,通常是n的对数,因为大多数决策树都是相当平衡的。

  7. 决策树不需要任何数据预处理。它们可以无缝处理不同类型的特征,包括数字特征和分类特征。它们也不需要对数据进行归一化处理。

  8. 决策树有几个关键的超参数需要调整,尤其是在使用剪枝的情况下,例如树的最大深度和使用哪种杂质度量来决定如何分割节点。

  9. 决策树易于理解和解释,可以很容易地将其可视化(除非树非常大)。

  10. 决策树不能轻松根据新的训练样本进行修改,因为数据集的微小变化都会导致树的拓扑结构发生巨大变化。

神经网络

  1. 神经网络是最通用、最灵活的机器学习模型之一。它们几乎可以解决任何类型的问题,包括分类、回归、时间序列分析、自动内容生成等。

  2. 神经网络对数据集不做假设,但需要对数据进行归一化处理。

  3. 神经网络采用梯度下降法进行训练。因此,它们只能找到局部最优解。不过,有多种技术可用于避免陷入局部最小值,例如动量和自适应学习率。

  4. 深度神经网络需要大量数据进行训练,大约需要数百万个样本点。一般来说,网络越大(层数和神经元越多),就越需要数据来训练它。

  5. 过于庞大的网络可能会记住所有的训练样本,从而无法很好地进行泛化。对于很多问题,可以从小网络(例如只有一到两个隐藏层)开始,逐渐扩大网络规模,直到开始过度拟合训练集。还可以添加正则化来解决过拟合问题。

  6. 神经网络的训练时间取决于很多因素(网络的大小、训练所需的梯度下降迭代次数等)。不过,预测时间非常快,因为只需对网络进行一次前向传递即可获得标签。

  7. 神经网络要求所有特征都是数值型且归一化的。

  8. 神经网络有很多需要调整的超参数,如层数、每层神经元数、使用的激活函数、学习率等。

  9. 神经网络的预测很难解释,因为它们是基于大量神经元的计算,而每个神经元对最终预测只有很小的贡献。

  10. 神经网络使用增量学习算法(随机梯度下降),因此很容易适应额外的训练样本。

时间复杂性

下表比较了一些常用算法的训练和预测时间(n为训练样本数,p为特征数)。

数据科学:带你选择完美机器学习算法_第2张图片

并且通过对竞赛研究可以发现,获奖者最常使用的算法是梯度提升算法(XGBoost)和神经网络。XGBoost主要用于处理结构化数据(例如关系表)的问题,而神经网络在处理非结构化问题(例如处理图像、语音或文本的问题)时更为成功和便捷。

你可能感兴趣的:(数据科学,机器学习,人工智能)