zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Andrew Ng-机器学习基础笔记(下)-Python实现代码

2023-09-11 14:20:00 时间

目录

前言:

10. 应用机器学习的建议

10.1 决定下一步做什么

10.2 评估一个假设

10.3 模型选择和交叉验证集

10.4 诊断误差和方差

 10.5 正则化和偏差/方差

 10.6 学习曲线

10.7 决定下一步做什么

11 机器学习系统的设计(Machine Learning System Design)

11.1  首先要做什么

11.2  误差分析

11.3 类偏差的误差度量:

11.4 查准率和查全率(召回率)之间的权衡

11.5 机器学习的数据

前言:

12 支持向量机(Support Vectir Machines)

12.1 优化目标

12.2 大边界的直观理解

12.3 大边界分类背后的数学

12.4 核函数1

12.5 核函数2

12.6 使用支持向量机

总结:

课后练习:

13 聚类(Clustering)

13.1 无监督学习:简介

13.2 K-均值算法

13.3 优化目标

13.4 随机初始化

14 降维(Dimensionality Reduction)

14.1 动机一:数据压缩

14.3 主成分分析问题

14.4 主成分分析算法

14.5 选择主成分的数量

14.6 重建的压缩表示

课后作业:

未完待续

参考:黄海广博士的机器学习笔记


前言:

Andrew Ng-机器学习基础笔记(上)-Python实现代码

https://blog.csdn.net/qq_37457202/article/details/106848778

10. 应用机器学习的建议

10.1 决定下一步做什么

引语:如果你想改进一个机器学习的性能。比如你发现预测房价时,产生了巨大的误差(线性回归),现在你的问题是如何改进。

通常人们的办法

1、有两倍甚至十倍的数量的训练集-花费更多的时间在搜集训练数据上

2、精心挑选小部分以防止过拟合

然而:

1、数据多的情况下反而很多时候会增加多项式特征-过拟合

2、人工操作麻烦

获得更多的训练实例——通常是有效的,但代价较大,下面的方法也可能有效

采取下列方法:

1. 尝试减少特征的数量

2. 尝试获得更多的特征

3. 尝试增加多项式特征

4. 尝试减少正则化程度 λ

5. 尝试增加正则化程度 λ

我们采用机器学习诊断法

“诊断法”的意思是: 这是一种测试法,你通过执行这种测试,能够深入了解某种算法到底是否有用。

10.2 评估一个假设

关键是如何用你学过的算法来评估假设函数

比如下图:

我们需要另一种方法来评估我们的假设函数过拟合检验。

为了检验算法是否过拟合,我们将数据分成训练集和测试集,通常用 70%的数据作为训 练集,用剩下 30%的数据作为测试集

这种换分要采取随机,就是所谓的“洗牌”,然后选取训练集与测试集

测试集评估在通过训练集让我们的模型学习得出其参数后,对测试集运用该模型,我们 有两种方式计算误差:

1. 对于线性回归模型,我们利用测试集数据计算代价函数 J

2. 对于逻辑回归模型,我们除了可以利用测试数据集来计算代价函数外:

(其实是一样的,就是测试集表示的时候,脚标不同而已)

误分类的比率,对于每一个测试集实例,计算:

然后对计算结果求平均

这样看的话更为直观,因为对于逻辑回归而言,其返回0,1二值是比较常见的

10.3 模型选择和交叉验证集

假设我们要在 10 个不同次数的二项式模型之间进行选择:

显然越高次数的多项式模型越能够适应我们的训练数据集,但是适应训练数据集并不代 表着能推广至一般情况

因此那我们需要选择一个更适应的模型

使用交叉验 证集来帮助选择模型。

即:使用 60%的数据作为训练集,使用 20%的数据作为交叉验证集,使用 20%的数据 作为测试集(6 2 2)

模型选择的方法为:

1. 使用训练集训练出 10 个模型

2. 用 10 个模型分别对交叉验证集计算得出交叉验证误差(代价函数的值)

3. 选取代价函数值最小的模型

4. 用步骤 3 中选出的模型对测试集计算得出推广误差(代价函数的值) 

10.4 诊断误差和方差

目的:学会判断一个算法是偏差还是方差有问题

因为这个问题对于弄清如何改进学习算法的效果非常重要,高偏差和高方差的问题基本上来说是欠拟合和过拟合的问题

们通常会通过将训练集和交叉验证集的代价函数误差与多项式的次数绘制在同一张 图表上来帮助分析

对于训练集,当 d 较小时,模型拟合程度更低,误差较大;随着 d 的增长,拟合程度提 高,误差减小。

对于交叉验证集,当 d 较小时,模型拟合程度低,误差较大;但是随着 d 的增长,误差 呈现先减小后增大的趋势。

转折点是我们的模型开始过拟合训练数据集的时候。

判断是方差还是偏差方法:

训练集误差交叉验证集误差近似(如图左)时:偏差---欠拟合

交叉验证集误差>>(远大于)训练集误差(如图右)时:方差---过拟合

 10.5 正则化和偏差/方差

在我们在训练模型的过程中,一般会使用一些正则化方法来防止过拟合

我们如何正确的选择 λ 的值时,也需要思考与刚才选择多项式模型次数类似的问题

我们选择一系列的想要测试的 λ 值,通常是 0-10 之间的呈现 2 倍关系的值

(如: 0,0.01,0.02,0.04,0.08,0.15,0.32,0.64,1.28,2.56,5.12,10 共 12 个)。

我们同样把数据分为训练集、交叉验证集和测试集

选择 λ 的方法为:

1. 使用训练集训练出 12 个不同程度正则化的模型

2. 用 12 模型分别对交叉验证集计算的出交叉验证误差

3. 选择得出交叉验证误差最小的模型

4. 运用步骤 3 中选出模型对测试集计算得出推广误差,我们也可以同时将训练集和交叉验证集模型的代价函数误差与 λ 的值绘制在一张图表上:

与刚才选择多项式模型次数类似!!!!

  • 当 λ 较小时,(相当于没有正则化)训练集误差较小(过拟合)而交叉验证集误差较大
  • 随着 λ 的增加,(大到一定程度后其实就相当于丢掉了高项)训练集误差不断增加(欠拟合),而交叉验证集误差则是先减小后 增加

 10.6 学习曲线

学习曲线是学习算法的一个很好的合理检验(sanity check)---使用学习曲线来判断某一个学习算法是否处于偏 差、方差

如何利用学习曲线识别高偏差/欠拟合

我们尝试用一条直线来适应下面的 数据

高偏差/欠拟合的情况下,增加数据到训练集不一定能有帮助。

如何利用学习曲线识别高方差/过拟合:

假设我们使用一个非常高次的多项式模型,并且正则化非常小

可以看出,当交叉验证集误差远大于训练集误差时,往训练集增加更多数据可以提高模型的效果。

 

高方差/过拟合的情况下,增加更多数据到训练集可能可以提高算法效果

10.7 决定下一步做什么

情况分析表
措施目的
获得更多的训练实例解决高方差
尝试减少特征的数量解决高方差
尝试获得更多的特征解决高偏差
尝试增加多项式特征解决高偏差
尝试减少正则化程度 λ解决高偏差
尝试增加正则化程度 λ解决高方差

注意,这一个表格,一定要屡清楚措施和目的

不清楚的回头看笔记,前面说的偏差以及方差

神经网络的方差和偏差:

使用较小的神经网络,类似于参数较少的情况,容易导致高偏差和欠拟合。但计算代价较小。

使用较大的神经网络,类似于参数较多的情况,容易导致高方差和过拟合,虽然计算代 价比较大,但是可以通过正则化手段来调整而更加适应数据。

通常选择较大的神经网络并采用正则化处理会比采用较小的神经网络效果要好。

改进学习算法的表现时,你可以充分运用以上这些内容来判断哪些途径可能是有帮助的

11 机器学习系统的设计(Machine Learning System Design)

11.1  首先要做什么

关于如何巧妙构建一个复杂的机器学习系统的建议

接下来的讨论都是以垃圾邮件分类算法为例进行讨论

构架一个合适的分类器我们有许多需要做的:

1. 收集更多的数据,让我们有更多的垃圾邮件和非垃圾邮件的样本

2. 基于邮件的路由信息开发一系列复杂的特征

3. 基于邮件的正文信息开发一系列复杂的特征,包括考虑截词的处理

4. 为探测刻意的拼写错误(把 watch 写成 w4tch)开发复杂的算法

我们需要做的是从一堆不同的方法中选取出合适的那一个

11.2  误差分析

在之前,我们都是通过画出学习曲线后进而分析是否需要引入更多的特征,这在刚接触机器学习的时候是一个很好的方法。

我们必须用证据来领导我们的决策,怎样分配自己的时间来优化算法,除了学习曲线以外,还要非常有用的方法是误差分析(人工误差分析,比如什么类型的邮件总被错误分类,从而构造新的特征变量)

构建一个学习算法的推荐方法为:

1. 从一个简单的能快速实现的算法开始,实现该算法并用交叉验证集数据测试这个算 法

2. 绘制学习曲线,决定是增加更多数据,或者添加更多特征,还是其他选择

3. 进行误差分析:人工检查交叉验证集中我们算法中产生预测误差的实例,看看这些实例是否有某种系统化的趋势

误差分析要做的即是检验交叉验证集中我们的算法产生错误预测的所有邮件看是否按照类分组。用数值来判断哪一个模型更好更有效,通常是看交叉验证集的误差。

总结一下:
当你在研究一个新的机器学习问题的时候,推荐先实现一个简单快捷、即使不是那么完美的算法

11.3 类偏差的误差度量:

使用一个合适的误差度量值,这有时会给你的学习算法造成非常微妙的影响,这件重要的事情就是偏斜类(skewed classes)的问题。类偏斜情况表现为我们的训 练集中有非常多的同一种类的实例,只有很少或没有其他类的实例。

例如我们希望用算法来预测癌症是否是恶性的,在我们的训练集中,只有 0.5%的实例 是恶性肿瘤。假设我们编写一个非学习而来的算法,在所有情况下都预测肿瘤是良性的,那 么误差只有 0.5%。然而我们通过训练而得到的神经网络算法却有 1%的误差。这时,误差的 大小是不能视为评判算法效果的依据的

查准率(Precision)和查全率/召回率(Recall)

(非常重要的概念,必须搞懂!!!)

我们将算法预测的结果分成四种情况:

1. 正确肯定(True Positive,TP):预测为真,实际为真

2. 正确否定(True Negative,TN):预测为假,实际为假

3. 错误肯定(False Positive,FP):预测为真,实际为假

4. 错误否定(False Negative,FN):预测为假,实际为真

则:

查准率=TP/TP+FP。例,在所有我们预测有恶性肿瘤的病人中,实际上有恶性肿 瘤的病人的百分比,越高越好。

查全率=TP/(TP+FN)。例,在所有实际上有恶性肿瘤的病人中,成功预测有恶性肿瘤 的病人的百分比,越高越好。

这样,对于我们刚才那个总是预测病人肿瘤为良性的算法,其查全率是 0

11.4 查准率和查全率(召回率)之间的权衡

我们希望查准率和召回率相对平衡

假设,我们算法的输出结果在0-1之间,我们使用阀值0.5来预测真假

继续沿用预测肿瘤的例子

如果我们希望只在非常确信的情况下预测为真(肿瘤为恶性),即我们希望更高的查准率,我们可以使用比 0.5 更大的阀值,如 0.7,0.9。这样做我们会减少错误预测病人为恶性 肿瘤的情况,同时却会增加未能成功预测肿瘤为恶性的情况。

如果我们希望提高查全率,尽可能地让所有有可能是恶性肿瘤的病人都得到进一步地检 查、诊断,我们可以使用比 0.5 更小的阀值,如 0.3。 我们可以将不同阀值情况下,查全率与查准率的关系绘制成图表,曲线的形状根据数据 的不同而不同:

我们希望有一个帮助我们选择这个阀值的方法。一种方法是计算 F1 值(F1 Score),其 计算公式为

我们选择使得 F1值最高

11.5 机器学习的数据

因为数据有时是唯一实际起到作用的,当然这是有条件的

关键的假设:特征值有足够的信息量,且我们有一个很好的函数,这是为什么能保证低误差的关键所在。

因此偏差问题,我么将通过确保有一个具有很多参数的学习算法来解决,以便我们能够 得到一个较低偏差的算法,并且通过非常大的训练集来保证

当我们使用了非常非常大的训练集,在这种情况,尽管我们希望有很多参数,但是如果训练集比参数的数量还大,甚至是多的多,那么过拟合是不太可能发生的

前言:

因为书写难度以及后面需要补充等原因,写完每一小部分在进行一次合并。

12 支持向量机(Support Vectir Machines)

12.1 优化目标

在监督学习中,许多学习算法的性能都非常类似,因此,重要的不是你该选择使用学习算法 A 还是学习算法 B,而更重要的是, 应用这些算法时,所创建的大量数据在应用这些算法时,表现情况通常依赖于你的水平

与逻辑回归和神经网络相比,支持向量机,或者简称 SVM,在学习复杂的非线性 方程时提供了一种更为清晰,更加强大的方式

这部分学习非常重要。

我将会从逻辑回归开始展示我们如何一点一点修改来得到本质上的支持向量机。

将用 z 表示 

回顾一下之前的逻辑回归的代价函数:

在计算的时候,我们将每个样本加入总代价函数中,因此总代价函数通常会有对所有的训练样本求和。其实1/m这个可以不考虑,我们只是方便运算才引入的。

现在开始建立支持向量机

我们会从这个代价函数开始,也就是 对于这个对数,我们一点一点修改,让我取这里的 z=1 点,我先画出将要用的代价函数。

y=1情况:新的代价函数是粉色这一条,由两段直线构成,这时候非常接近逻辑回归中述使用的代价函数了。

事实上,在之后的的优化问题中,为支持向量机,带来计算上的优势。例如,更容易计算股票交易的问题等等。

同理:y=0情况

如果我们用一个新的代价函数来代替,即这条从 0 点开始的水平直线,然后是一条斜线,像上图。

那么,现在让我给这两个方程命名,左边的函数,我称之为 cost1(z),同时,右 边函数我称它为 cost0 (z) 。这里的下标是指在代价函数中,对应的 y=1 和 y=0 的情况,拥有 了这些定义后,现在,我们就开始构建支持向量机

构建我们的支持向量机:

弄清楚上面这幅图非常关键!!!

对于第一部分,需要注意后面的讲解,代价函数用cost表示,对于支持向量机,我们希望得到最小化问题,同时加上正则化参数,此时的1/m这一项只是为了方便运算(正如我们求一个函数的极值的坐标与方程是否放大无关)

对于第二部分,由于常数是无关紧要的,因此可以用C来代替

第三部分,对于我们熟悉的逻辑回归,我们有两项参数我们通过设置不同正则参数λ达到优化的目的A+λ×B,,但对于支持向量机,按照惯例,我 们将使用一个不同的参数替换这里使用的 λ来权衡这两项。就是第一项和第二项 我们依照惯例使用一个不同的参数称为 C,同时改为优化目标,C×A+B 因此,在逻辑回归中, 如果给定λ,一个非常大的值,意味着给予 B 更大的权重。而这里,就对应于将 C 设定为非 常小的值,那么,相应的将会给 B 比给 A 更大的权重。参数 C 考虑成 1/λ, 

12.2 大边界的直观理解

逻辑回归不同的是,支持向量机的要求更高,不仅仅要能正确分开输入的样本,即不 仅仅要求 \Theta ^{T}x >0,我们需要的是比 0 值大很多,比如大于等于 1,我也想这个比 0 小很多, 比如我希望它小于等于-1,这就相当于在支持向量机中嵌入了一个额外的安全因子。或者说 安全的间距因子

支持向量机的直观感受

求解优化问题的时候得到非常有趣的决策边界

SVM能得到黑色这一条,如何得出呢?通过间距(margin),如图:

因此支持向量机有时被称为大间距分类器

注意

大间距分类器由于正则化因子常数设置的非常大,学习算法容易受异常点(outlier)的影响:

当正则化参数非常大,SVM则会将决策界由黑边粉红。

当 C 不是非常非常大的时候,它可以忽略掉一些异常点的影响,得到更好的决策界。

回顾一下

C=1/λ,因此:

C 较大时,相当于 λ 较小,可能会导致过拟合,高方差

C 较小时,相当于 λ 较大,可能会导致低拟合,高偏差

为什么会是这样的? 它是如何得出大间距分类器的?我在本节中没有讲解,在下一节课中,我将略述这些问题背 后的数学原理,来解释这个优化问题是如何得到一个大间距分类器的。

且背后的数学意义,先不讨论

12.3 大边界分类背后的数学

12.4 核函数1

回顾我们之前讨论过可以使用高级数的多项式模型来解决无法用直线进行分隔的分类 问题:

给定一个训练实例 x,我们利用 x 的各个特征与我们预先选定的地标(landmarks)

例如:

这个函数与正态分布没什么实际上的关系,只是看上去像而已。

图中水平面的坐标为 x1,x2垂直坐标轴代表 f。可以看出,只有当 x 与 l (1)重合时 f 才 具有最大值。随着 x 的改变 f 值改变的速率受到 σ 2的控制

在下图中,当实例处于洋红色的点位置处,因为其离 l (1)更近,但是离 l (2)和 l (3)较远,因 此 f1接近 1而 f2,f3 接近 0。因此 hθ(x)=θ0+θ1f1+θ2f2+θ1f3>0,因此预测 y=1

同理可以求出, 对于离 l (2)较近的绿色点,也预测 y=1,但是对于浅蓝色的点,因为其离三个地标都较远,预测 y=0。

小结:

这样,图中红色的封闭曲线所表示的范围,便是我们依据一个单一的训练实例和我们选取的地标所得出的判定边界,在预测时,我们采用的特征不是训练实例本身的特征,而是通过核函数计算出的新特征 f1,f2,f3。

12.5 核函数2

如何选地标:

核函数用于支持向量机中:

我们在对后正则化部分微调一下

改成

中 M 是根据我们选择的核函数而不同的一个矩阵。这样做的 原因是为了简化计算。

12.6 使用支持向量机

关于参数的求解,我们一般的都是通过调用包进行求解的比如Libsvm

尽管不自己的 SVM(支持向量机)的优化软件,但是你也需要做几件事:

1、是提出参数 C 的选择。我们在之前的视频中讨论过误差/方差在这方面的性质。

2、你也需要选择内核参数或你想要使用的相似函数,其中一个选择是:我们选择不需要任何内核参数,没有内核参数的理念,也叫线性核函数

因此,如果有人说他使用了线性核的 SVM(支持向量机),这就意味这他使用了不带有核函数的 SVM(支持向量机)。

下面是一些普遍使用的准则:

n 为特征数,m 为训练样本数。

(1)如果相较于 m 而言,n 要大许多,即训练集数据量不够支持我们训练一个复杂的非 线性模型,我们选用逻辑回归模型或者不带核函数的支持向量机。

(2)如果 n 较小,而且 m 大小中等,例如 n 在 1-1000 之间,而 m 在 10-10000 之间, 使用高斯核函数的支持向量机。

(3)如果 n 较小,而 m 较大,例如 n 在 1-1000 之间,而 m 大于 50000,则使用支持向量 机会非常慢,解决方案是创造、增加更多的特征,然后使用逻辑回归或不带核函数的支持向 量机。

值得一提的是,神经网络在以上三种情况下都可能会有较好的表现,但是训练神经网络 可能非常慢,选择支持向量机的原因主要在于它的代价函数是凸函数,不存在局部最小值

选择神经网络和SVM上:
对于许多这样的问题,神经网络训练起来可能会特别慢,但是如果 你有一个非常好的 SVM 实现包,它可能会运行得比较快比神经网络快很多,尽管我们在此 之前没有展示,但是事实证明,SVM 具有的优化问题,是一种凸优化问题。以及全局最优

总结:

对于监督学习而言不是你所掌握的算法的强弱:、

通常更加重要的是:你有多少数据,你有 多熟练是否擅长做误差分析和排除学习算法,指出如何设定新的特征变量和找出其他能决定 你学习算法的变量等方面,通常这些方面会比你使用逻辑回归还是 SVM 这方面更加重要

这部分的学习还是不过,SVM需要在后期的时候补大量的知识

课后练习:

练习后的学习笔记

https://blog.csdn.net/qq_37457202/article/details/107186967

13 聚类(Clustering)

13.1 无监督学习:简介

无监督学习是让机器学习无标签的数据,而不是我们之前实验的有标签的数据

我们拿到没有标签的数据是这样的

在非监督学习中,我们需要将一系列无标签的训练数据,输入到一个算法中,然后我们告诉这个 算法,快去为我们找找这个数据的内在结构给定数据.

图上的数据看起来可以分成两个分开的点集 (称为簇) , 一个能够找到我圈出的 这些点集的算法,就被称为聚类算法

 当然, 此后我们还将提到其他类型的非监督 学习算法,它们可以为我们找到其他类型的结构或者其他的一些模式,而不只是簇。

聚类算法一般用于做什么呢?

与第一章提到的一样如图。

13.2 K-均值算法

K-均值是最普及的聚类算法,算法接受一个未标记的数据集,然后将数据聚类成不同的 组。 

K-均值是一个迭代算法,假设我们想要将数据聚类成 n 个组,其方法为

  • 首先选择 k 个随机的点,称为聚类中心
  • 对于数据集中的每一个数据, 按照距离 K 个中心点的距离, 将其与距离最近的中心点关联起来,与同一个中心点关联的所有点聚成一类。

通俗的来说,我们每一次都重复这个族的中心为位置--质心

下面是一个聚类示例:

用  来表示聚类中心, 用 来存储与第i个实例数据最近的聚 类中心的索引,K-均值算法的伪代码如下:

算法分为两个步

第一个for循环是赋值步骤,即:对于每一个样例i,计算其应该属 于的类。

第二个for循环是聚类中心的移动,即:对于每一个类k,重新计算该类的质心。 

K-均值算法也可以很便利地用于将数据分为许多不同组,即使在没有非常明显区分的组 群的情况下也可以 

用于帮助确定将要生产的T-恤衫的三种尺寸:

13.3 优化目标

K-均值最小化问题,是要最小化所有的数据点与其所关联的聚类中心点之间的距离之和, 因此 K-均值的代价函数(又称畸变函数 Distortion function)为:

K-均值迭代算法,我们知道,第一个循环是用于减小c(i)引起的代价,而第二个循环则 是用于减小 u(i)引起的代价

13.4 随机初始化

在运行 K-均值算法的之前,我们首先要随机初始化所有的聚类中心点

1. 我们应该选择 K<m,即聚类中心点的个数要小于所有训练集实例的数量

2. 随机选择 K 个训练实例,然后令 K 个聚类中心分别与这 K 个训练实例相等

K-均值的一个问题在于,它有可能会停留在一个局部最小值处,而这取决于初始化的情况。

为了解决这个问题,我们通常需要多次运行K-均值算法,每一次都重新进行随机初始化,多次运行比较K均值结果,选择代价函数最小的结果。这种方法在 k 较小的时候(2--10)还是可行的,但是如果 k 较大,这么做也可能不会有明显地改善

13.6 选择聚类数

通常根据不同的情况人工选择,通过作图分析我们可以采用一种叫做“肘部法则,”然后计算成本 函数或者计算畸变函数 J

好像有一个很清楚的肘在那儿,那个点是曲线的肘点畸变值下降得很快。当你应用“肘部法则”的时候,如果你得到了一个像上面这样的图,那么这将是一种 用来选择聚类个数的合理方法

14 降维(Dimensionality Reduction)

14.1 动机一:数据压缩

开始谈论第二种类型的无监督学习问题,称为降维。

作用:使用较少的计算机内存或磁盘空间,但它也让我们加快我们的学习算法

 x1 :长度:用厘米表示;  x2 :是用英寸表示同一物体的长度。其实现实生活中也是这样很多时候,很多数据都是冗余的,因此有了降纬这种说法。

一千多个特征都在一起,它实际上会变得非常困难,去跟踪你知道的那些特征,你从那些工程队得到的。 其实不想有高度冗余的特征一样。

比如飞行员测试调查::  x1 , 也许是他们的技能 (直升机飞行员) , 也许  x2 可能是飞行员的爱好。也许这两个特征值高度高度相关

其实同理,我们有时可以也可将三维数据降到二维

处理过程可以被用于把任何维度的数据降到任何想要的维度, 例如将 1000 维的 特征降至 100 

14.2 动机二:数据可视化 

我们能将数据可视,降纬是一个好办法

要将这个50维的数据可视化是不可能的,我们需要将他降到2纬,便可以将其可视化了

降维的算法只负责减少维数新产生的特征的意义就必须由我们自己去发现了。 

14.3 主成分分析问题

主成分分析(PCA)是最常见的降维算法。

在PCA中,我们要找到的是一方向向量(Vector direction),当我们的数据投射到该向量的时候,希望投射平均均方误差能尽可能地小。方向向量经过原点,投射误差是从特征向量向该方向向量作垂线的长度

分析问题的描述:

将 n 维数据降至 k 维,注意主成分分析与线性回顾的比较:

主成分分析线性回归是两种不同的算法。

主成分分析最小化的是投射误差(Projected Erro),而线性回归尝试的是最小化预测误

线性回归的目的是预测结果,而主成分分析不作任何预测。

左边的是线性回归的误差(垂直于横轴投影) 右边则是主要成分分析的误差 (垂直于红线投影)

PCA 将 n 个特征降维到 k 个, 可以用来进行数据压缩, 如果 100 维的向量最后可以用 10 维来表示,那么压缩率为 90%

同样图像处理领域的 KL 变换使用 PCA 做图像压缩。但 PCA 要保证降维后,还要保证数据的特性损失

PCA 技术的一大好处是对数据进行降维的处理。

我们可以对新求出的 “主元” 向量的重 要性进行排序,根据需要取前面最重要的部分,将后面的维数省去,可以达到降维从而简化 模型或是对数据进行压缩的效果。同时最大程度的保持了原有数据的信息

PCA 技术的一个很大的优点是,它是完全无参数限制的。在 PCA 的计算过程中完全不 需要人为的设定参数或是根据任何经验模型对计算进行干预, 最后的结果只与数据相关, 与 用户是独立的。 

一点同时也可以看作是缺点。却无法通过参数化等方法对处理过程进行干预, 可能会得不到预期的效果, 效率也不高。

14.4 主成分分析算法

PCA 减少n维到k维

这一部分学得比较闷后面通过课后作业补上!

14.5 选择主成分的数量

主要成分分析是减少投射的平均均方误差

 训练集的方差为:

希望在平均均方误差与训练集方差的比例尽可能小的情况下选择尽可能小的k值。

直到找到可以使得比例小于1%的最小k值(原因 是各个特征之间通常情况存在某种相关性)

还有一些更好的方式来选择k,我们在Octave中调用“svd”函数的时候,我们获得三

个参数:[U, S, V] = svd(sigma)。(后期作用python在补充)

S是一个n×n的矩阵,只有对角线上有值,而其它单元都是0,我们可以使用这 个矩阵来计算平均均方误差与训练集方差的比例

也就是:

压缩过数据后,我们可以采用如下方法来近似地获得原有的特征

(这部分讲得这是抽象。。。)

14.6 重建的压缩表示

当我们压缩后我们希望重新回到压缩前,又叫做重建的压缩

回到原始的二维空间:

如图, 这是一个漂亮的与原始数据相当。我们也把这个过程称为重建原始 数据。

重建从压缩表示 x 的初始值,现在也知道 如何采取这些低维表示 z,映射到备份到一个近似你原有的高维数据。

未完待续,通过课后作业进行完善。

这部分学习还是通过课后作业去理解会比较好

课后作业:

https://blog.csdn.net/qq_37457202/article/details/107211428

未完待续

参考:
黄海广博士的机器学习笔记

Andrew Ng b站视频教学