本文主要面向机器学习爱好者、数据科学初学者,以及对应用机器学习算法解决实际问题感兴趣的读者。面对众多的机器学习算法,初学者常会困惑:“我该使用哪一种算法?”这个问题的答案取决于多种因素,例如:
- 数据的大小、质量与性质
- 可用的计算时间
- 任务的紧急程度
- 数据的使用目的
实际上,即使经验丰富的数据科学家,在未对不同算法进行测试前,也难以断言哪种算法性能最佳。我们并不追求一步到位,但希望根据一些明确的因素,为算法选择提供参考方向。
机器学习算法速查表

这张速查表能帮助你从众多算法中,初步筛选出适合解决特定问题的选项。下文将介绍如何使用它。
考虑到读者主要为初学者,我们在探讨算法时做了一些简化假设。表中推荐的算法均基于编译反馈以及多位数据科学家、机器学习专家和开发者的建议。对于少数未达成一致的问题,我们采取了求同存异的处理方式。
如何使用速查表
请将速查表中的路径和算法标签理解为:“如果符合<路径标签>,则使用<算法>。”例如:
- 如果你需要进行降维,使用主成分分析(PCA)。
- 如果你需要快速的数值预测,使用决策树或逻辑回归。
- 如果你需要层次化的聚类结果,使用层次聚类。
有时可能会同时符合多个分支,有时则找不到完美匹配。重要的是,这些路径是基于经验法则的推荐,并非绝对精确。许多数据科学家认为,找到最佳算法的唯一可靠方法就是尝试所有可能的算法。
机器学习算法的主要类别
本节将概述最流行的机器学习类别。如果你已熟悉这些分类,可以直接跳至“选择具体算法的场景”部分。
监督学习
监督学习算法基于一组已标注的样本进行预测。例如,利用历史销售数据预测未来价格。在监督学习中,我们有一组输入变量(特征)和一组希望预测的输出变量(标签)。算法通过分析训练数据,学习一个从输入到输出的映射函数,并利用该函数预测新实例的结果。
- 分类:当预测目标是离散类别时,即为分类任务。例如,给图片打上“猫”或“狗”的标签。只有两个类别时称为二元分类,超过两个则为多元分类。
- 回归:当预测目标是连续数值时,即为回归问题。
- 预测:这是基于过去和现在数据预测未来的过程,常用于趋势分析。例如,根据今年及往年的销售业绩预测下一年的情况。
半监督学习
监督学习的主要挑战在于数据标注成本高、耗时长。如果标注数据有限,可以利用大量未标注数据来提升监督学习的效果。由于机器并非完全在监督下学习,故称为半监督学习。这种方法能利用少量标注数据和大量未标注数据来提高学习精度。
无监督学习
在无监督学习中,机器使用完全未标注的数据,目标是发现数据中隐藏的内在结构,例如聚类结构、低维流形或稀疏的树与图。
- 聚类:将数据实例分组,使得同一组(集群)内的实例彼此相似,而不同组的实例相异。常用于将整个数据集分割成若干组,以便在各组内进行深入分析,发现内在模式。
- 降维:减少所考虑的变量(特征)数量。在许多应用中,原始数据特征维度很高,其中可能存在冗余或与任务无关的特征。降维有助于发现真实、潜在的数据关系。
强化学习
强化学习通过与环境交互获得的反馈信息来分析和优化智能体的行为。智能体不会被告知具体应采取哪种行动,而是通过不断尝试不同策略,发现能带来最大累积奖励的行为。试错搜索和延迟奖励是强化学习区别于其他技术的重要特点。
选择算法时的考量因素
选择算法时,需要权衡以下几点:准确性、训练时间、易用性。许多用户将准确性放在首位,而初学者则倾向于选择他们最熟悉的算法。
拿到数据集后,首要目标是快速获得初步结果,无论这些结果看起来多么初步。初学者通常选择易于实现且能快速出结果的算法。这种思路在探索初期是合理的。一旦获得初步结果并对数据有了基本了解,就应该投入更多时间,尝试更复杂的算法来深化理解,从而改进结果。
然而,即使到了这一步,理论上精度最高的算法也未必是最佳选择,因为这类算法通常需要细致的参数调优和大量的训练才能达到最佳性能。
选择具体算法的场景
深入了解具体算法有助于理解其性能和使用方式。以下细节可为你提供进一步指导,建议结合前面的速查表一起阅读。
线性回归与逻辑回归


线性SVM与核SVM
核技巧(Kernel Trick)可用于将非线性可分的数据映射到高维空间,使其变得线性可分。支持向量机(SVM)训练算法旨在找到一个由法向量 w 和偏置项 b 定义的超平面,以最大间隔分隔不同类别。这可以转化为一个条件优化问题:

当因变量(目标)不是数值型时,逻辑回归和SVM通常是进行分类任务的首选尝试。这些模型易于实现,参数调节相对直观,且性能通常不错,非常适合初学者。
决策树与集成树方法

决策树、随机森林和梯度提升(Gradient Boosting)都是基于决策树的算法。决策树有多种变体,但核心思想相同:将特征空间划分为若干区域,使得每个区域内的样本标签尽可能一致。决策树易于理解和实现,但容易过拟合,尤其是在树深度很大时。随机森林和梯度提升是两种流行的集成方法,它们通过组合多个决策树来获得良好的准确性,同时能有效缓解过拟合问题。
神经网络与深度学习

神经网络在20世纪80年代中期因并行和分布式处理能力而兴起,但随后因反向传播算法训练效率等问题一度遇冷。SVM等更简单、易于训练的模型逐渐成为主流。
近年来,无监督预训练、逐层贪婪训练等新技术的出现,以及GPU和大规模并行处理(MPP)带来的强大算力,使得神经网络研究复兴,并催生了深度达数千层的模型。

浅层神经网络由此发展为深度学习神经网络。深度学习在监督学习领域取得了巨大成功,在语音识别、图像识别等任务上已达到甚至超越人类水平。在无监督学习任务(如特征提取)中,深度学习也能以较少的人工干预,从原始图像或语音中自动提取有效特征。
神经网络通常由输入层、隐藏层和输出层组成。当输出层是分类变量时,网络可用于分类;当输出层是连续变量时,可用于回归;当输出层与输入层结构相同时,可用于特征提取(如自编码器)。隐藏层的数量决定了模型的复杂度和建模能力。
K-Means/K-Modes与高斯混合模型(GMM)聚类


K-Means/K-Modes和GMM的目标都是将n个观测值划分为k个集群。K-Means采用硬分配,即每个样本仅被分配到一个集群。而GMM采用软分配,为每个样本赋予属于各个集群的概率。在给定集群数k的情况下,这两种算法都相对简单快速。
DBSCAN

DBSCAN(基于密度的空间聚类)不需要预先指定聚类数量k。它通过密度扩散的方式连接样本,能够发现任意形状的簇,并识别噪声点。
层次聚类

层次聚类的结果可以用树结构(树状图)可视化。它不需要预先指定聚类数量,允许用户在不同粒度级别(通过切割树状图的不同高度)查看聚类结果,从而获得细化或粗化的集群划分。
PCA、SVD与LDA
我们通常不希望直接将大量特征输入机器学习算法,因为其中可能包含无关特征,或者数据的“本征”维度低于特征数量。主成分分析(PCA)、奇异值分解(SVD)和隐狄利克雷分布(LDA)都可用于降维。
PCA是一种无监督方法,旨在将数据映射到低维空间,同时保留尽可能多的信息(方差)。它寻找由数据协方差矩阵的主要特征向量定义的子空间。
SVD与PCA相关。中心化数据矩阵的SVD由其主导左奇异向量定义子空间,类似于PCA。但SVD是一种更通用的技术,例如,在推荐系统中,对用户-电影矩阵进行SVD可以提取用户和电影的特征向量。此外,SVD在自然语言处理中广泛用于主题建模,称为潜在语义分析(LSA)。
LDA是自然语言处理中一种相关的概率主题模型。它将文档分解为主题,类似于高斯混合模型(GMM)将连续数据分解为高斯分布。不同之处在于,LDA对离散数据(文档中的词)建模,并假设主题服从狄利克雷先验分布。
总结
面对新问题时,可以遵循一个简单的工作流程:
- 明确问题:你想要解决的具体问题是什么?
- 从简单开始:熟悉你的数据,并建立一个简单的基准模型。
- 逐步复杂化:在基准基础上,尝试更复杂的算法来提升性能。