理解基本算法策略,能为分析机器学习模型的构建和训练方式提供有益的视角。这些策略并非仅仅是抽象思想;它们是scikit-learn、TensorFlow和PyTorch等常用库中许多算法的核心组成部分。识别这些模式有助于阐明特定模型为何如此运行、其性能特点可能是什么以及实现选择如何影响结果。
机器学习中的分治法
“分、解、合”的方法在基于树的模型中最为常见:
- 决策树: 构建决策树的过程本身就是一种分治策略。在每个节点,数据集会根据最佳特征和阈值(一种贪心选择,稍后讨论)进行划分。这递归地将数据(“分”步骤)分成更小的子集。“解”步骤在满足停止条件(例如,最大深度、每个叶节点的最小样本数)时隐式发生,创建一个代表预测的叶节点。最后的“合”步骤是树结构本身,从根节点遍历树将学到的划分应用于新数据点的分类。
- 随机森林: 这种集成方法构建多个决策树。每棵树在内部都使用分治法。集成本身的特性可以看作是一种更高层次的应用,通过在不同数据和特征子集上处理预测问题,然后组合结果(例如,通过平均或投票)。
- 内部操作: 尽管并非直接的模型逻辑,但诸如归并排序(一种典型的分治算法)等排序算法可能被机器学习库内部用于为划分寻找中位数,或在预处理期间高效地排序特征值,从而影响整体运行时间。
机器学习中的动态规划
动态规划(DP)专注于通过存储中间结果来解决重叠子问题,在更专业的机器学习方面有所出现:
- 强化学习(RL): 诸如值迭代和策略迭代等用于马尔可夫决策过程中寻找最佳策略的算法,主要使用动态规划。贝尔曼方程是这些方法的核心,它根据后继状态的值表示某个状态的值。动态规划技术迭代地计算这些值,将其存储(通常在表或数组中)并重复使用以避免重复计算。
- 序列分析(自然语言处理、生物信息学): 涉及序列最佳对齐或匹配的问题,例如寻找两个字符串之间的编辑距离(例如,使用瓦格纳-费舍尔算法)或生物信息学中的序列比对(Needleman-Wunsch、Smith-Waterman),都使用动态规划。它们基于较短子序列的最佳方案,逐步构建较长序列的方案。
虽然在标准分类或回归模型中不如其他方法广泛,但在这些特定方面工作时,掌握动态规划很有益。
机器学习中的贪心算法
贪心策略在每一步都做出局部最优选择,因其简单且通常性能足够,在机器学习中非常常见:
- 决策树构建: 如前所述,CART(分类与回归树)等算法中的核心划分过程是贪心的。在每个节点,算法选择特征和划分点,以最大化局部标准(如基尼不纯度减少或信息增益)针对该特定划分。它不回溯或预判此选择是否会生成全局最佳树。这使得构建更快,但有时可能导致次优树。
- 特征选择: 诸如顺序前向选择(SFS)或顺序后向选择(SBS)等方法都是贪心的。SFS从无特征开始,每一步都贪心地添加提供最佳性能提升的单个特征。SBS从所有特征开始,贪心地移除对性能损害最小的特征。
- 聚类: 某些聚类算法具有贪心方面。例如,层次凝聚式聚类通常在每一步根据所选的连接准则,贪心地合并两个最接近的簇。
贪心方法的盛行展现了机器学习中常见的权衡:为了计算效率和实现简易性,牺牲了有保证的全局最优性。
机器学习中的随机算法
将随机性引入算法是机器学习中的一种有效技术,常用于提高强健性、逃离局部最优以及增强泛化能力:
- 随机森林: 随机性主要以两种方式使用:
- 装袋(Bootstrap Aggregating): 每棵树都在原始数据的一个不同随机样本上进行训练,这些样本是有放回地抽取的。
- 特征子采样: 在树的每个划分点,只考虑随机特征子集来寻找最佳划分。这降低了树之间的关联性,普遍降低了整体模型的方差。
- 随机梯度下降(SGD): 随机梯度下降不使用整个数据集计算梯度(如批量梯度下降),而是在每一步使用单个随机选择的数据点或一个小型随机小批量来估计梯度。这种随机性为优化过程增加了噪声,这可以帮助算法跳出浅层局部最小值,并且通常能加快在大型数据集上的收敛速度。
- 初始化: 神经网络中的权重通常是随机初始化的。如果所有权重都从零开始,层内的神经元将学习相同的东西。随机初始化打破了这种对称性,允许不同的神经元学习不同的特征。
- Dropout: 这种用于神经网络的正则化技术在训练期间随机“丢弃”(设为零)部分神经元输出。这可以防止单元过度相互适应,并迫使网络学习更多的表示。
随机性对于现代机器学习模型的成功训练和性能来说通常很重要。
机器学习中的迭代优化
许多机器学习模型通过优化目标函数(通常是最小化损失函数)进行训练。这种优化通常使用迭代算法进行:
- 梯度下降及其变体: 这是训练线性回归、逻辑回归、支持向量机,特别是神经网络等模型的主力。算法从初始参数猜测(通常是随机的)开始,迭代地朝着与损失函数梯度相反的方向更新参数。
- 批量梯度下降: 在整个数据集上计算梯度。
- 随机梯度下降(SGD): 在单个样本或小批量(结合随机性)上计算梯度。
- 高级优化器(Adam, RMSprop): 调整学习率或使用动量,但仍遵循基于梯度的基本迭代改进过程。
- 坐标下降: 通过每次沿一个参数(坐标)方向迭代地最小化目标函数,同时保持其他参数固定来优化。例如,用于训练Lasso回归。
- 期望最大化(EM): 一种迭代算法,用于在模型依赖于未观测到的隐变量(例如,高斯混合模型)的统计模型中寻找参数的最大似然估计。它在“E步”(估计隐变量)和“M步”(在给定估计隐变量的情况下优化参数)之间交替进行。
这些迭代方法不保证在所有情况下都能找到全局最优(特别是对于训练深度神经网络等非凸问题),但它们是寻找非常好的方案的有效算法策略。
理解这些关联
许多实际的机器学习模型结合了这些策略。随机森林使用分治法(树结构)、贪心选择(节点划分)和随机化(装袋、特征子采样)。训练深度神经网络涉及迭代优化(SGD/Adam)与随机化(初始化、Dropout、数据洗牌)。
掌握这些内在的算法模式有助于您:
- 分析性能: 了解算法是贪心的表明它可能速度快但可能是次优的。识别迭代优化表明学习率和收敛准则的重要性。掌握随机性的使用有助于解释模型方差和正则化效应。
- 选择模型: 如果您需要有保证的最优性(并且问题结构允许),动态规划可能适用。如果大型数据集上的速度很重要,则支持并行化的策略(如分治法或迭代方法在小批量上的方面)是有利的。
- 调整超参数: 许多超参数直接控制这些策略的方面(例如,分治法中的树深度、迭代优化中的学习率、随机化中的Dropout率)。
- 实现自定义算法: 在开发新的机器学习方案时,应用这些已有的算法设计模式提供了良好基础。
下图展示了策略与常见机器学习技术之间的一些关联:
该图将核心算法策略与它们发挥重要作用的特定机器学习模型或技术对应起来。虚线表明像随机森林这样结合多种策略的模型。
识别复杂机器学习系统中的这些基本构建块,能让您更好地理解其设计和行为,将库函数视为清晰的组件。这种掌握对在实践中有效地应用、调试和优化机器学习模型来说很重要。