[ 学习笔记二 ] 吴恩达机器学习[已完结]

📅 发布时间:2026/7/21 10:35:45
[ 学习笔记二 ] 吴恩达机器学习[已完结] 文章太长了内容分开写的接学习笔记一[ 学习笔记一 ] 吴恩达机器学习[持续更新中...]-CSDN博客第十章 机器学习系统设计① 确定执行的优先级以垃圾邮件分类器为例在有了初始模型后需要通过错误分析来决定下一步该做什么而不是凭感觉随意选择。需要时刻保持应该如何系统性地决定下一步该做什么的想法01 从简单算法开始先构建一个简单的模型并在验证集上测试这步很重要。02 绘制学习曲线判断当前问题是高偏差还是高方差03 基于诊断做决策如果数据不足高方差就考虑收集更多数据。如果模型过于简单高偏差就考虑添加更多特征。04 错误分析手动查看验证集中分类错误的邮件看它们有什么共同模式然后针对性地设计特征去解决这些问题。② 误差分析该例子中若验证集中有 100 封邮件被分错手动查看这 100 封邮件并给它们打上标签统计错误类型。通过误差分析设计算法优先解决统计次数最多的问题。例如发现改进标点符号处理和路由信息可能是最高效的投入方向而不是先去处理只占 5 个错误的拼写问题。误差分析提供的只是灵感而决策最终需要依赖数值评估。任何一个新想法都必须有一个明确的数值指标来判断它是否真的带来了提升。如果没有数值评估你可能会花费大量时间实现一些直觉上很好但实际无效的功能。③ 不对称性分类的误差评估在类别不平衡的分类问题中仅仅使用误差或准确率作为评估指标是远远不够的。还需要引入查准率Precision和查全率Recall这两个指标。在类别不平衡问题中当正样本非常稀少时一个预测结果全部为负样本的蠢办法也能获得很高的准确率。因此高准确率并不代表模型好。01 查准率 (Precision)预测患病的人中有多少是真正患病的第一列02 查全率 (Recall)所有真正患病的人中有多少被成功检测出来了第一行④ 精确度和召回率的权衡通过调整阈值来控制预测场景 A非常确信才诊断为癌症避免误诊将阈值设得很高比如hθ(x)≥0.8才预测为 1癌症。查准率高升高因为要求很高的证据才下判断所以预测为癌症的人很可能真的得了癌症。查全率降低因为门槛太高可能会漏掉一些实际患有但模型评分没超过 0.8 的病人。场景 B尽量不漏掉任何一个癌症患者避免漏诊将阈值设得很低比如hθ(x)≥0.3就预测为 1癌症。查全率升高几乎所有真正的癌症患者都会被检测出来。查准率降低很多实际上没病的人也会被误诊为癌症。无法同时获得完美的查准率和查全率。F₁分数查准率和查全率的调和平均数由查准率和查全率的平均数改进而来调和平均数对低分更敏感。只有当查准率和查全率都高时F₁分数才会高。如果其中一项很低F₁分数会显著降低。⑤ 机器学习数据在某些条件下拥有更多的数据比拥有更复杂的算法更重要并不是在任何情况下收集更多数据都能提升性能。大数据策略有效需要满足两个关键条件01 特征包含足够信息特征 x 必须包含足够的信息能够准确预测 y02 人类专家能自信预测一个有用的测试是给你输入 x一个人类专家能否自信地预测出 y如果能说明特征信息充足大数据策略有潜力如果不能说明特征本身就不够需要先改进特征设计。大数据策略是工作流程01 选择低偏差算法要选择一个有足够容量的模型可以有很多特征的逻辑回归/线性回归可以有很多隐藏单元的神经网络确保模型能够拟合非常复杂的函数关系保证Jtrain(θ)可以变得很小。02 利用大数据防止过拟合低偏差算法容易过拟合如果提供非常大量的训练数据模型就很难过拟合。因为要同时拟合海量数据的通用模式它必须学到真正普适的规律而不是记住少数样本的噪声。03 最终结果由于模型足够复杂会很小由于数据量足够大模型不会过拟合所以最终也会很小从而获得高性能。第十一章支持向量机① 优化目标SVM的优化目标是由逻辑回归的优化目标改进的逻辑回归的优化目标是对其进行改进得到SVM的优化目标这里做的几个转变是1. 移除​SVM 优化去掉了逻辑回归公式最外层的。这是化简乘以一个常数倍不影响最小化问题的最优解。2. 替换成本函数SVM用两个新的折线近似成本函数和替换了逻辑回归中对数形式的成本函数。对于 y1 (cost1(z)当 z≥1 时成本为0当 z1 时成本线性增长。这里SVM鼓励正样本远离决策边界与原来的逻辑回归0相比SVM的决策边界是 ± 1。对于 y0 (cost0(z))当 z≤−1 时成本为0当 z−1 时成本线性增长。同理这也鼓励负样本离决策边界远一些。3. 调整正则化参数逻辑回归中用 λ 来控制正则化项的权重。SVM中用新的参数 C 来控制成本项的权重。C 的作用和 λ​ 类似C越大对误分类的惩罚就越大模型会倾向于将训练数据分得更准确过拟合C 越小模型会更注重让决策边界简单平滑欠拟合。② 直观上对大间隔的理解C的作用C 非常大所有点都分对模型复杂容易过拟合对异常值敏感。C 适中尽量保持大间隔允许异常值落在间隔内甚至被错分泛化能力更强 。③ 大间隔分类器的数学原理C 非常大时优化问题退化为寻找决策直线边界这时候优化公式退化为对于原来的约束条件所有的样本所有的样本根据投影知识:将其转化为如下图所示模型倾向与选择投影p在||θ|| (决策边界)上投影长度长的策略因为投影长说明p值较大这时θ 值小而模型的优化目标就是 θ² 。④ 核函数可以用高阶多项式来拟合非线性边界像因此引入了核函数Kernel和地标Landmark的概念对于任意一个给定的训练样本 x都能计算出它与每个地标之间的相似度得到​之后用训练好的SVM参数和新特征做预测决策边界会把符合边界条件的区域圈出来形成一个非线性的、类似两个小岛形状的决策区域。⑤ 使用SVM01 使用 SVM 软件包通常使用现有的软件包 liblinear, libsvm 来求解参数 θ使用包时需要指定参数 C核函数核函数常见的有高斯核和线性核高斯核需要指定参数 σ²线性核又是无核函数直接使用原始特征 x。02核函数细节使用高斯核函数前必须进行特征缩放因为如果一个特征的数值范围远大于另一个特征那么在计算距离时该特征会占据绝对主导地位导致核函数的值主要由这一个特征决定从而忽略了其他特征的影响。进行特征缩放可以确保所有特征对相似度的贡献是均衡的。03其他核函数的选择并不是所有相似度函数都能用作核函数一个有效的核函数必须满足 “Mercer定理” 的数学条件它保证了 SVM 的优化问题可以正确、高效地求解并且不会发散。除了高斯核还有一些常用的现成核函数比如多项式核、字符串核 、卡方核、直方图交集核等不过它们用的比较少。多项式核形式04多分类问题处理多分类问题有两种常见方式可以直接使用SVM 软件包内置的多分类功能也可以自己实现即训练 K 个独立的 SVMK 是类别数对于第 i 个 SVM将类别 i 的样本作为正类其余所有类别的样本作为负类训练得到 K 组参数 θ(1),θ(2),…,θ(K) 预测时对于新样本 x分别计算每个分类器的决策值并选择值最大的那个类别作为最终的预测结果这个过程和逻辑回归实现多分类问题的方法类似。05逻辑回归 vs. 支持向量机if 特征n 相对于 训练样本数m 很大使用逻辑回归或线性核SVM因为特征已经很多足以拟合一个相对复杂的模型线性模型通常就足够好而且训练速度快。if n 很小m 中等使用带高斯核的 SVM因为特征较少需要通过核函数将数据映射到更高维的空间以学习更复杂的决策边界。if n 很小m 很大先尝试手动创建更多特征然后使用逻辑回归或线性核SVM因为当样本量巨大时带高斯核的SVM计算量会非常大训练会非常慢。第十二章无监督学习① 无监督学习在无监督学习中数据是没有标签的。与监督学习不同监督学习每个输入 x 都有一个对应的标签 y 无监督学习只有输入 x 没有对应的标签 y。无监督算法的任务是在未标记的数据中找到数据的结构。解决的问题有市场细分、社交网络分析、组织计算集群、天文数据分析 。② K-Means算法K-means算法的输入簇的数量K 和 一组无标签的训练样本。K-means 算法一个核心的迭代过程分两步在特征空间中随机选取 K个点作为初始的“簇中心点”01 簇分配对于每一个数据点将它分配到离它最近的那个簇中心围绕中心点形成了 K个簇。02 移动中心点对于每一个簇计算分配给该簇的所有数据点的平均位置。然后将中心点移动到这个新的均值位置。③ 优化目标代价函数公式计算每个样本到其所属簇中心点距离的平方的平均值。优化目标找到一组簇分配和簇中心点使得所有样本点到其最近中心点的距离平方和最小。符合 K-means 算法的两个核心步骤先簇分配固定中心点为每个点找到最近的中心点再移动中心点固定点的分配重新计算每个簇的中心点。④ 随机初始化初始化 K-means 算法时簇的数量 K 必须小于训练样本数 m从训练集中随机选择 K 个不同的样本然后将这些样本的位置直接作为初始的簇中心点。局部最优解K-means 可能会陷入局部最优解而不是找到全局最优解。如果初始化不好算法可能收敛到一个次优的结果将本应分开的簇被合并了或者一个簇被不合理地分割。这种情况下代价函数的值会比全局最优解对应的值要高。为了避免局部最优解问题可采取多次随机初始化的策略多次随机初始化中心点计算并记录最终的代价函数 J挑选出使代价函数 J 最小的那一次聚类结果作为最终答案。该方法在 K 较小2-10时非常有效如果 K 非常大数据集被分割成多份每份数据量都很小第一次随机初始化往往就已经足够好了。⑤ 选取聚类数量在无监督学习中数据没有标签因此通常没有一个绝对的正确答案。选择 K 值往往是主观的或者需要根据实际应用场景来决定。肘部法则一种常用的、较为客观的方法来帮助选择 K 值。将代价函数 J 看作是 K的函数随着 K 的增加每个样本到其簇中心点的平均距离会减小因此 J会下降 将不同 K 值对应的 J 值绘制成图表。当图表呈现出一个清晰的肘部时在肘部之前J 下降得非常快在肘部之后J下降得越来越慢。这个肘部对应的 K 值通常被认为是一个比较合适的选择。很多时候图表是平滑下降的没有一个清晰的肘点。在这种情况下肘部法则就失效了难以直观地选出唯一的 K 值。根据后续目的选择K值选择K值时不仅要看数据本身的统计特性而要评估不同的 K 值带来的实际价值。以T恤尺码为例如果选择 K3可以将用户的身高体重数据聚成 3 类对应S、M、L如果选择 K5可以将用户聚成 5 类对应XS、S、M、L、XL能更好满足多样化需求的尺码方案最终选择 K3还是K5取决于公司的商业策略是想简化库存管理还是想提升顾客的合身度和满意度。第十三章降维① 目标Ⅰ:数据压缩数据压缩减少数据的维度用更少的特征来表示原本复杂的数据点。② 目标Ⅱ:可视化将高维数据压缩后的可视化分析将 6 个维度的特征转化为2个维度的特征下面图是降维后数据可视化的结果③ 主成分分析问题规划PCA要解决的核心问题是找到一个低维的表面将高维数据投影上去也就是说PCA 不是线性回归线性回归有监督左图所示目标是预测一个特定的输出值y。它计算的是点到预测线的垂直距离沿y轴方向最小化的是预测值与实际值的平方差。PCA无监督右图所示没有y没有预测。它只关注数据本身x1,x2​。它计算的是点到直线的垂直距离 / 最短距离最小化的是投影造成的误差。数据预处理01均值归一化02特征缩放如果不同特征的取值范围差异很大那么取值范围大的特征会主导整个分析。因此需要将数据缩放到一个可比较的范围确保每个特征都有同等重要的地位。PCA 算法步骤01 计算协方差矩阵协方差矩阵是一个n×n的对称矩阵它衡量了数据中不同特征之间的相关性以及特征的方差。02 计算特征向量 - 奇异值分解03降维映射④ 压缩重现原始数据是二维的通过PCA找到了一个主方向绿色直线。压缩将原始点 x 投影到主方向上得到一维的表示 z这个过程就是重建将压缩后的点在主方向 z 上映射回原始的二维空间得到近似点可以看到和原始的 x 之间存在一定的投影误差。⑤ 主成分数量选择要决定保留几个主成分需要一个标准来衡量降维带来的信息损失有多大。平均平方投影误差计算的是所有样本经过压缩再重建后与原始数据相比平均偏离了多远。这个值越小说明降维过程中丢失的信息越少。数据总变差计算的是原始数据本身的分散程度可以理解为数据总的“能量”或“信息量”。目标是让信息损失的比例控制在一个很小的范围内找到满足以下条件的最小 k 为这个比值小于等于 0.01就意味着我们保留了 99% 的方差表示可以接受的最大信息损失比例。k 值确定的两种方法01 概念法效率极低02 高效算法⑥ 应用PCA的建议01 使用PCA加速监督学习02PCA的主要应用场景压缩能减少存储数据所需的内存或磁盘空间从而加快学习算法的训练速度并通过计算保留的方差百分比来决定选择的主成分数 k 。03 PCA误用防止过拟合不推荐使用PCA减少特征数量使得特征越少模型越简单越不容易过拟合。PCA在降维时不考虑标签 y 它在压缩过程中可能会丢弃掉一些对预测结果很重要但方差较小的信息。相当于在没有监督信号指导的情况下进行特征选择/提取效果往往不如有监督的正则化方法。应当使用正则化来防止过拟合这样既能保留所有特征的信息又能约束模型的复杂度。04 PCA不该被盲目使用不要默认PCA是机器学习流程的第一步。在实现PCA之前首先尝试直接使用原始数据运行想要做的任务只有当原始数据运行效果不佳时像训练速度太慢、内存溢出或算法无法收敛才考虑实施PCA并使用降维后的特征。第十四章异常检测① 问题动机我们有一个数据集它们都是正常样本。我们的目标是判断一个新的样本是否异常。我们首先需要建立一个模型用于表示正常数据的概率分布然后设定一个阈值。对于一个新样本​我们计算其概率② 高斯分布③ 算法该模型建立基于一个独立性假设各特征相互独立联合概率等于各特征概率的乘积。异常检测算法步骤选择可能能够指示异常的特征 ​对每个特征计算对新样本计算如果则判断为异常。④ 开发和评估异常检测系统为什么需要量化评估量化评估算法性能决策会容易得多。数据假设假设有标签数据正常 y0异常 y1在训练集上拟合模型后对验证集/测试集样本预测评估指标包括真阳性、假阳性、假阴性、真阴性、精确率/召回率、F₁分数可以使用交叉验证集来选择阈值 εeg 选择使F₁分数最大的ε 。⑤ 异常检测 VS监督学习异常检测 (Anomaly Detection)正例异常样本数量极少负例正常样本数量很大未来可能出现的异常可能与之前见过的任何异常样本都完全不同仅从大量正常样本中学习“正常”的模式识别任何偏离正常模式的样本。应用识别异常的用户行为、飞机引擎检测、监控服务器异常监督学习 (Supervised Learning)正例和负例数量都很大两者都有充足的样本未来的正例很可能与训练集中的正例相似从大量正例和负例中学习分类边界区分两类。应用: 区分垃圾邮件和正常邮件、预测晴天/雨天等天气类型、判断肿瘤是良性还是恶性⑥ 选择要使用的功能许多异常检测算法通常假设数据特征是服从高斯分布的。但在实际数据中特征的直方图可能看起来一点也不像钟形曲线。可以对特征进行如下数学变换使其看起来更像高斯分布通过特征变换将一个右偏的分布转换为一个更接近高斯分布的形态从而让算法工作得更好。异常检测的错误分析图中蓝×在低维概率较大但在高维概率较小表示蓝×为误判点需要新加特征维度以区分。模型 p(x) 对于正常样本计算出的概率值很大而对于异常样本计算出的概率值很小。当模型对于正常样本和异常样本计算出的概率值 p(x) 相差无几时则无法有效区分它们。分析可以拿出交叉验证集中被算法错误分类的样本进行观察。通过分析这些“出错的样本”去寻找新的特征这些特征能够帮助把这些错误样本与正常样本更好地区分开。设计新特征不要局限于原始数据可尝试对问题理解将原始特征进行加减乘除等组合创造出能捕捉特定异常模式的新特征。⑦ 多变量高斯分布多元高斯分布的概率密度函数对角线元素越大分布越分散方差大非对角线元素为正时特征间存在正相关非对角线元素为负时特征间存在负相关等高线变成倾斜的椭圆相关性越强椭圆越扁平改变均值向量会平移整个分布的中心位置协方差矩阵保持不变时分布形状相同但中心点移动⑧ 使用多变量高斯分布的异常检测01多元高斯分布的概率密度函数均值向量每个特征的样本均值是协方差矩阵n×n 矩阵对角线元素是各特征的方差非对角线元素是特征间的协方差定义为02使用多元高斯分布进行异常检测的算法步骤03与原始模型的关系原始独立特征模型假设所有特征相互独立可以写为可以证明当协方差矩阵 Σ 为对角矩阵时多元高斯分布退化为独立特征模型的特例此时这正是原始独立特征模型的乘积形式。第十五章推荐系统① 问题规划② 基于内容的推荐算法01 核心思想02 优化目标对单个用户的优化第一项平方误差项衡量预测评分与实际评分的差距第二项正则化项防止过拟合对所有用户的联合优化03优化算法——梯度下降③ 协同过滤算法学习电影特征的优化目标这个目标函数的第一项是平方误差项衡量预测评分与实际评分的差距第二项是正则化项防止特征向量过大。迭代过程先初始化随机猜测或再迭代固定优化固定优化最后重复直到收敛这形成了一个相互促进的学习过程用户参数帮助推断电影特征电影特征帮助优化用户参数。叫协同过滤也是因为算法协同利用了所有用户的评分数据过滤出用户可能喜欢的物品。用户之间通过共同的评分模式协同工作——喜欢相似电影的用户会帮助算法推断其他电影的属性。协同过滤的优化目标01已知电影特征学习用户参数02已知用户参数学习电影特征03同时学习所有参数注意这里同时优化 x 和 θ不需要再交替进行而是同时学习。协同过滤算法步骤其中α 是学习率第一项是预测误差对参数的梯度第二项是正则化项的梯度④ 矢量化:低轶矩阵分解预测评分矩阵协同过滤学习到的参数可以用于构建完整的预测评分矩阵如下每列表示该用户对各个电影的评价每行表示一部电影被所有用户的评价矩阵分解时预测矩阵可以写成这就是低秩矩阵分解将原始的稀疏评分矩阵分解为两个低秩矩阵的乘积。⑤ 实施细节:均值规范化现在增加了一个新用户 Eve用户5她没有对任何电影进行评分协同过滤的目标函数中对用户的优化依赖于该用户有评分的电影如果用户没有任何评分那么第一项平方误差项为 0只剩下正则化项最小化这个目标函数会得到。那么对新用户 Eve预测评分对所有电影都为 0无法为新用户提供有意义的推荐。解决方案均值归一化步骤1计算每部电影的平均评分只计算有评分的用户的平均值步骤2构建均值归一化的评分矩阵步骤3用归一化后的矩阵进行协同过滤对应用协同过滤算法学习和。步骤4预测评分对于用户和电影预测评分为其中是电影的平均评分。对新用户 Eve 的预测对于新用户 Eve由于她没有评分学习到的 θ(5)0那么预测评分为对新用户模型会给电影打该电影的平均分作为初始推荐。第十六章大规模机器学习① 学习大数据集在足够大的数据集上即使使用相对简单的算法往往也能取得很好的效果。例如在区分易混淆单词{to, two, too}, {then, than}的任务中数据量比算法选择更重要。② 批量梯度下降批量梯度下降每次迭代需要遍历整个训练集计算梯度当数据集非常大时每一步都非常慢在收敛前可能需要大量迭代批量梯度下降的更新规则如下所示每一步都朝着正确的方向下降稳定地下降至局部最优但每次迭代计算量大大数据集上慢③ 随机梯度下降随机打乱训练集顺序每次只用一个训练样本更新参数而不是用全部样本。对于单个样本的代价整体训练代价是平均值随机梯度下降每次更新快可以处理超大数据集需要逐渐减小学习率 α 来帮助收敛但下降路径曲折可能不会精确收敛到最小值而是在附近震荡④ Mini-Batch 梯度下降每次迭代使用 b 个 训练样本b 是小批量大小Mini-Batch是批量梯度下降和随机梯度下降的折中方案既有向量化计算的优势又不会一次处理全部数据。梯度更新公式为⑤ 随机梯度下降收敛批量梯度下降中我们可以直接计算并绘制迭代次数 vs 代价函数值的曲线观察是否下降。但在随机梯度下降中每次迭代只用一个样本Jtrain(θ)Jtrain​(θ) 计算成本太高需要遍历整个数据集我们需要一种轻量级的方法来监控收敛