吴恩达机器学习笔记:第 8 周-14降维(Dimensionality Reduction) 14.3-14.5

news/2024/5/16 22:19:15

目录

  • 第 8 周 14、 降维(Dimensionality Reduction)
    • 14.3 主成分分析问题
    • 14.4 主成分分析算法
    • 14.5 选择主成分的数量

第 8 周 14、 降维(Dimensionality Reduction)

14.3 主成分分析问题

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

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

在这里插入图片描述
下面给出主成分分析问题的描述:
问题是要将𝑛维数据降至𝑘维,目标是找到向量 u ( 1 ) , u ( 2 ) , . . . , u ( k ) u^{(1)} ,u^{(2)} ,...,u^{(k)} u(1),u(2),...,u(k)使得总的投射误差最小。

主成分分析与线性回顾的比较:
主成分分析与线性回归是两种不同的算法。主成分分析最小化的是投射误差(Projected Error),而线性回归尝试的是最小化预测误差。线性回归的目的是预测结果,而主成分分析不作任何预测。

PCA 将𝑛个特征降维到𝑘个,可以用来进行数据压缩,如果 100 维的向量最后可以用 10维来表示,那么压缩率为 90%。同样图像处理领域的 KL 变换使用 PCA 做图像压缩。但 PCA要保证降维后,还要保证数据的特性损失最小。

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

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

但是,这一点同时也可以看作是缺点。如果用户对观测对象有一定的先验知识,掌握了数据的一些特征,却无法通过参数化等方法对处理过程进行干预,可能会得不到预期的效果,效率也不高。

14.4 主成分分析算法

PCA 减少𝑛维到𝑘维:

  1. 第一步是均值归一化。我们需要计算出所有特征的均值,然后令 x j = x j − μ j x_j= x_j − μ_j xj=xjμj。如果特征是在不同的数量级上,我们还需要将其除以标准差 σ 2 σ^2 σ2
  2. 第二步是计算协方差矩阵(covariance matrix)𝛴:
    Σ = 1 m ∑ i = 1 n ( x ( i ) ) ( x ( i ) ) T Σ = \frac{1}{m}\sum_{i=1}^{n}{(x^{(i)}) (x^{(i)})^T} Σ=m1i=1n(x(i))(x(i))T
  3. 第三步是计算协方差矩阵𝛴的特征向量(eigenvectors):在 Octave 里我们可以利用奇异值分解(singular value decomposition)来求解,[U, S, V]= svd(sigma)。

在这里插入图片描述
对于一个 n × n维度的矩阵,上式中的𝑈是一个具有与数据之间最小投射误差的方向向量构成的矩阵。如果我们希望将数据从𝑛维降至𝑘维,我们只需要从𝑈中选取前𝑘个向量,获得一个𝑛 × 𝑘维度的矩阵,我们用𝑈𝑟𝑒𝑑𝑢𝑐𝑒表示,然后通过如下计算获得要求的新特征向量𝑧(𝑖):
z ( i ) = U r e d u c e T ∗ x ( i ) z^{(i)} = U_{reduce}^T∗ x^{(i)} z(i)=UreduceTx(i)

其中𝑥是𝑛 × 1维的,因此结果为𝑘 × 1维度。注,我们不对方差特征进行处理。

14.5 选择主成分的数量

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

训练集的方差为: 1 m ∑ i = 1 m ∣ ∣ x ( i ) ∣ ∣ 2 \frac{1}{m}\sum_{i=1}^m{||x^{(i)}||^2} m1i=1m∣∣x(i)2

我们希望在平均均方误差与训练集方差的比例尽可能小的情况下选择尽可能小的𝑘值。如果我们希望这个比例小于 1%,就意味着原本数据的偏差有 99%都保留下来了,如果我们选择保留 95%的偏差,便能非常显著地降低模型中特征的维度了。

我们可以先令𝑘 = 1,然后进行主要成分分析,获得𝑈𝑟𝑒𝑑𝑢𝑐𝑒和𝑧,然后计算比例是否小于1%。如果不是的话再令𝑘 = 2,如此类推,直到找到可以使得比例小于 1%的最小𝑘 值(原因是各个特征之间通常情况存在某种相关性)。

还有一些更好的方式来选择𝑘,当我们在 Octave 中调用“svd”函数的时候,我们获得三个参数:[U, S, V] = svd(sigma)。
在这里插入图片描述
其中的𝑆是一个𝑛 × 𝑛的矩阵,只有对角线上有值,而其它单元都是 0,我们可以使用这个矩阵来计算平均均方误差与训练集方差的比例:
在这里插入图片描述


http://www.mrgr.cn/p/64412604

相关文章

认识Linux及一些基本

目录 linux简介: 1. 发展史 UNIX发展的历史 Linux发展历史 2. 开源 3. 企业应用现状 Linux在服务器领域的发展 Linux在桌面领域的发展 Linux在移动嵌入式领域的发展 Linux在云计算/大数据领域的发展 4. 发行版本 Debian Ubuntu 红帽企业级Linux Cent…

mongodb 分片集群认证

增加认证 副本间认证外部使用认证 如果是开启状态,先关闭路由,再关闭配置服务,最后关闭分片数据复本集中的每个mongod,从次节点开始。直到副本集的所 有成员都离线,包括任何仲裁者。主节点必须是最后一个成员关闭以避免潜在的回滚.最好通过 db.shutdow…

mysql面试题九(SQL优化)

目录 1.一条 SQL 是如何执行的 2.索引失效的几种情况 3.EXPLAIN 4.Where 子句如何优化 5.超大分页或深度分页如何处理 6.大表查询如何优化 7.分库分表 基本概念 分库分表方法 水平拆分 垂直拆分 分库分表后的注意事项 1.一条 SQL 是如何执行的 在MySQL中&#xff0…

【C】---- T5:天数转换成周数

编写一个程序,提示用户输入天数,然后将其转换成周数和天数。通过while循环让用户重复输入天数,当用户输入一个非正值时(如0或-20),循环结束。题目 编写一个程序,提示用户输入天数,然后将其转换成周数和天数。通过while循环让用户重复输入天数,当用户输入一个非正值时(…

鸿蒙内核源码分析(内存规则篇) | 内存管理到底在管什么?

先说如果没有内存管理会怎样? 那就是个奴才们能把主子给活活踩死, 想想主奴不分,吃喝拉撒睡都在一起,称兄道弟的想干啥? 没规矩不成方圆嘛,这事业肯定搞不大,单片机时代就是这种情况. 裸机编程,指针可以…

稳扎稳打 部署丝滑 开源即时通讯(IM)项目OpenIM源码部署流程(linux windows mac)

背景 OpenIM包含多个关键组件,每个都是系统功能必不可少的一部分。具体来说,MongoDB 用于持久化存储;Redis 用作缓存;Kafka 用于消息队列;Zookeeper 用于服务发现;Minio 用于对象存储。这些组件的众多可能会增加部署的复杂性。此外,系统包含多个微服务模块,这要求有效管…

CSS Position定位(详解网页中的定位属性)

目录 一、Position介绍 1.概念 2.特点 3.作用 4.应用 二、Position用法 1.position属性 2.static定位 3.fixed定位 4.relative定位 5.absolute定位 6.sticky定位 7.重叠的元素 三、CSS定位属性 四、总结 一、Position介绍 1.概念 文档流(Document Fl…

SpringMVC基础篇(一)

文章目录 1.基本介绍1.特点2.SpringMVC跟SpringBoot的关系 2.快速入门1.需求分析2.图解3.环境搭建1.创建普通java工程2.添加web框架支持3.配置lib文件夹1.导入jar包2.Add as Library3.以后自动添加 4.配置tomcat1.配置上下文路径2.配置热加载 5.src下创建Spring配置文件applica…

ZCMU-1111

与背包和动态规划有关(我认为)采用dp数组存放吃掉i千克食物要用掉的钱 dp最开始要尽量的大方便过程中判断和最后的输出判断 实时更新dp,保留最小的钱以前不知道的printf函数可以这样用 fill函数填充数组,(开始,结束,填充值); C和C++结构体里面可以放函数 学习#include<…

JDK源码分析-TreeSet

概述 TreeSet是Java集合框架中用于存储唯一元素的树形数据结构,它实现了NavigableSet接口,这意味着TreeSet中的元素不仅是有序的,还支持一系列的导航方法。 TreeSet的内部实现主要依赖于TreeMap,通过TreeMap的键来维护元素的排序。 类图从以上类图可以看到,TreeSet 实现了…

使用逆滤波算法deconvwnr恢复图像回复图像时,产生了很多横竖条纹。解决办法

使用逆滤波算法deconvwnr恢复图像时&#xff0c;产生了很多横竖条纹。解决办法 原来的代码 % 清除工作空间并关闭所有图形窗口 clear; clc; close all;% 读取原始图像 original_image imread(pic3.jpg);% 显示原始图像 subplot(131); imshow(original_image); title(Origina…

C语言关于多源文件的调用

图片A.c // // Created by clou on 2024/4/29. // #include <stdio.h> #include "A.h"void func() {printf("hello world\n"); }A.h // // Created by clou on 2024/4/29. //#ifndef MULTIPLE_SOURCE_FILES_A_H #define MULTIPLE_SOURCE_FILES_A_Hex…

bugku_ez_java_serializd

下载附件看到依赖CC3.1,没有waf,直接CC5打了。package com.eddiemurphy;import org.apache.commons.collections.Transformer; import org.apache.commons.collections.functors.ChainedTransformer; import org.apache.commons.collections.functors.ConstantTransformer; i…

CogAgent:开创性的VLM在GUI理解和自动化任务中的突破

尽管LLMs如ChatGPT在撰写电子邮件等任务上能够提供帮助&#xff0c;它们在理解和与GUIs交互方面存在挑战&#xff0c;这限制了它们在提高自动化水平方面的潜力。数字世界中的自主代理是许多现代人梦寐以求的理想助手。这些代理能够根据用户输入的任务描述自动完成如在线预订票务…

有趣的大模型之我见 | Llama AI Model

Llama 开源吗? 我在写《有趣的大模型之我见 | Mistral 7B 和 Mixtral 8x7B》时曾犹豫,在开源这个事儿上,到底哪个大模型算鼻祖?2023 年 7 月 18 日,Meta 推出了最受欢迎的大型语言模型(LLM)的第二个版本-Llama 2,并主张可免费用于研究和商业用途。Llama 2 模型附带许可…

C语言关于头文件的使用

截图:main.c // // Created by clou on 2024/4/29. //#include <stdio.h> #include "main.h" //包含自己实现的头文件//定义全局变量 int cnt; int sum;//定义函数 int func(int x, char y) {return 0; }//定义函数 int func2(int x, int y) {return x + y; }…

Mysql锁机制与优化实践以及MVCC底层原理剖析

学习来源-图灵课堂 https://vip.tulingxueyuan.cn 锁学习参考: https://juejin.cn/post/7307889500545253395 锁机制 为了保证数据的一致性,当访问共享变量的时候我们可以针对共享数据加锁,但是加锁要时要注意加锁的成本,还有加锁的粒度,还有就是是否会发生死锁,还有就是…

[2022DASCTF Apr X FATE 防疫挑战赛] warmup-java

没错,还是java。 我就跟java杠上了。 分析 先看依赖:没有啥特别的。 审一下源码: IndexController.java:warmup路由下传参data,下面把十六进制转为字节直接反序列化了。 看下动态代理MyInvocationHandler.java:看一下Utils的hexStringToBytes方法: 下面分析来自Java专题…

设计模式01 -----单例模式

单例模式是一种常见的设计模式,用于确保类只有一个实例,并提供一个全局访问点。这种模式通常用于管理共享资源,例如数据库连接、日志文件等。单例模式的主要特点包括: 单一实例: 该模式确保类只有一个实例存在,无论何时何地都可以访问到这个实例。 全局访问点: 单例模式提…

linux网络DNS域名解析服务

DNS概述 1.DNS系统 DNS(Domain Name System),使用应用层协议,是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。 简单来说就是:把域名转换成网络可以识别的IP地址,在通过IP地址访问主机。这种由文字组成的名称,显而易…