[ 学习笔记二 ] 吴恩达机器学习[已完结]
文章太长了,内容分开写的,接学习笔记一:[ 学习笔记一 ] 吴恩达机器学习[持续更新中...]-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 必须包含足够的信息,能够准确预测 y
02 人类专家能自信预测:一个有用的测试是:给你输入 x,一个人类专家能否自信地预测出 y?如果能,说明特征信息充足,大数据策略有潜力;如果不能,说明特征本身就不够,需要先改进特征设计。
大数据策略是工作流程:
01 选择低偏差算法:要选择一个有足够容量的模型,可以有很多特征的逻辑回归/线性回归,可以有很多隐藏单元的神经网络,确保模型能够拟合非常复杂的函数关系,保证Jtrain(θ)可以变得很小。
02 利用大数据防止过拟合:低偏差算法容易过拟合,如果提供非常大量的训练数据,模型就很难过拟合。因为要同时拟合海量数据的通用模式,它必须学到真正普适的规律,而不是记住少数样本的噪声。
03 最终结果:由于模型足够复杂,会很小,由于数据量足够大,模型不会过拟合,所以
,最终,
也会很小,从而获得高性能。
第十一章:支持向量机
① 优化目标
SVM的优化目标是由逻辑回归的优化目标改进的,逻辑回归的优化目标是:
对其进行改进得到,SVM的优化目标:
这里做的几个转变是:
1. 移除:SVM 优化去掉了逻辑回归公式最外层的
。这是化简,乘以一个常数倍不影响最小化问题的最优解。
2. 替换成本函数:SVM用两个新的折线近似成本函数和
替换了逻辑回归中对数形式的成本函数。
对于 y=1 (cost1(z):当 z≥1 时,成本为0;当 z<1 时,成本线性增长。这里SVM鼓励正样本远离决策边界,与原来的逻辑回归0相比,SVM的决策边界是 ± 1。
对于 y=0 (cost0(z)):当 z≤−1 时,成本为0;当 z>−1 时,成本线性增长。同理,这也鼓励负样本离决策边界远一些。
3. 调整正则化参数:
逻辑回归中,用 λ 来控制正则化项的权重。SVM中,用新的参数 C 来控制成本项的权重。C 的作用和 λ 类似,C越大,对误分类的惩罚就越大,模型会倾向于将训练数据分得更准确,过拟合;C 越小,模型会更注重让决策边界简单平滑,欠拟合。
② 直观上对大间隔的理解
C的作用
C 非常大:所有点都分对,模型复杂,容易过拟合,对异常值敏感。
C 适中:尽量保持大间隔,允许异常值落在间隔内甚至被错分,泛化能力更强 。
③ 大间隔分类器的数学原理
C 非常大时,优化问题退化为寻找决策直线边界,这时候优化公式退化为:
对于原来的约束条件:所有的样本:
,所有
的样本:
根据投影知识:
将其转化为
如下图所示,模型倾向与选择投影p在||θ|| (决策边界)上投影长度长的策略,因为投影长,说明p值较大,这时θ 值小,而模型的优化目标就是 θ² 。
④ 核函数
可以用高阶多项式来拟合非线性边界,像
因此,引入了核函数(Kernel)和地标(Landmark)的概念,
对于任意一个给定的训练样本 x,都能计算出它与每个地标之间的相似度,得到,之后,用训练好的SVM参数和新特征做预测,决策边界会把符合边界条件的区域圈出来,形成一个非线性的、类似两个小岛形状的决策区域。
⑤ 使用SVM
01 :使用 SVM 软件包
通常使用现有的软件包: liblinear, libsvm 来求解参数 θ,使用包时,需要指定:参数 C,核函数,核函数常见的有高斯核和线性核,高斯核需要指定参数 σ²,线性核又是无核函数,直接使用原始特征 x。
02:核函数细节
使用高斯核函数前必须进行特征缩放,因为如果一个特征的数值范围远大于另一个特征,那么在计算距离时,该特征会占据绝对主导地位,导致核函数的值主要由这一个特征决定,从而忽略了其他特征的影响。进行特征缩放可以确保所有特征对相似度的贡献是均衡的。
03:其他核函数的选择
并不是所有相似度函数都能用作核函数,一个有效的核函数必须满足 “Mercer定理” 的数学条件,它保证了 SVM 的优化问题可以正确、高效地求解,并且不会发散。除了高斯核,还有一些常用的现成核函数,比如多项式核、字符串核 、卡方核、直方图交集核等,不过它们用的比较少。
多项式核形式:
04:多分类问题
处理多分类问题有两种常见方式:可以直接使用SVM 软件包内置的多分类功能,也可以自己实现,即训练 K 个独立的 SVM,K 是类别数,对于第 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恤尺码为例:如果选择 K=3,可以将用户的身高体重数据聚成 3 类,对应S、M、L,如果选择 K=5,可以将用户聚成 5 类,对应XS、S、M、L、XL,能更好满足多样化需求的尺码方案,最终选择 K=3还是K=5,取决于公司的商业策略是想简化库存管理,还是想提升顾客的合身度和满意度。
第十三章:降维
① 目标Ⅰ:数据压缩
数据压缩:减少数据的维度,用更少的特征来表示原本复杂的数据点。
② 目标Ⅱ:可视化
将高维数据压缩后的可视化分析,将 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加速监督学习
02:PCA的主要应用场景
压缩:能减少存储数据所需的内存或磁盘空间,从而加快学习算法的训练速度,并通过计算保留的方差百分比来决定选择的主成分数 k 。
03: PCA误用:防止过拟合
不推荐使用PCA减少特征数量,使得特征越少,模型越简单,越不容易过拟合。
PCA在降维时不考虑标签 y ,它在压缩过程中可能会丢弃掉一些对预测结果很重要但方差较小的信息。相当于在没有监督信号指导的情况下进行特征选择/提取,效果往往不如有监督的正则化方法。应当使用正则化来防止过拟合,这样既能保留所有特征的信息,又能约束模型的复杂度。
04: PCA不该被盲目使用
不要默认PCA是机器学习流程的第一步。在实现PCA之前,首先尝试直接使用原始数据运行想要做的任务,只有当原始数据运行效果不佳时,像训练速度太慢、内存溢出或算法无法收敛,才考虑实施PCA,并使用降维后的特征。
第十四章:异常检测
① 问题动机
我们有一个数据集,它们都是正常样本。我们的目标是判断一个新的样本
是否异常。我们首先需要建立一个模型
,用于表示正常数据的概率分布,然后设定一个阈值
。对于一个新样本
,我们计算其概率
:
② 高斯分布
③ 算法
该模型建立基于一个独立性假设:各特征相互独立,联合概率等于各特征概率的乘积。
异常检测算法步骤
选择可能能够指示异常的特征 ,对每个特征
,计算:
对新样本,计算:
如果,则判断为异常。
④ 开发和评估异常检测系统
为什么需要量化评估?量化评估算法性能,决策会容易得多。
数据假设:假设有标签数据,正常 y=0,异常 y=1:
在训练集上拟合模型后,对验证集/测试集样本预测:
评估指标包括:真阳性、假阳性、假阴性、真阴性、精确率/召回率、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(θ) 计算成本太高(需要遍历整个数据集)
我们需要一种轻量级的方法来监控收敛