PyTorch][chapter 13[李宏毅深度学习][Semi-supervised Linear Methods-2]

前言:

     接上篇CSDN

 这里面重点讲下面4个方面

目录:

  1.      PCA-Another Point of view(SVD)
  2.      PCA 和 AutoEncoder 的关系
  3.     PCA 的缺点
  4.      PCA Python 例子

一  PCA-Another Point of view

 

       以手写数字7的图像为例,它由不同的笔画结构组成,分别为

u^1,u^2,..u^k

     则手写数字7可以表示为

        x\approx c_1u^1+c_2u^2+..c_ku^l+\bar{x}

      上图 c_1=1,c_2=1,c_3=c_4=c_5=0

       x-\bar{x}\approx \hat{x}=c_1u^1+c_2u^2+...c_ku^k

  1.1 损失函数

    我们要找到一组向量 u^1,u^2,..u^k使得

       L=||( x-\bar{x} )- \hat{x}||_2  最小(公式1.1)

       有论文证明过,这个最优解就是SVD 奇异分解结果

 1.2 PCA 降维原理回顾

     z=Wx

    \begin{bmatrix} z_1\\ z_2 \\ ... \\ z_k \end{bmatrix}=\begin{bmatrix} w_1^T\\ w_2^T \\ ... \\ w_k^T \end{bmatrix}x

    这个特征向量W_1,W_2..W_k 是S=(x-\bar{x})(x-\bar{x})^T的特征向量
这个解可以使得损失函数L公式1.1 最小,在Bitshop chapter12.1.2 里面有证明

1.3 SVD 奇异分解

     任意矩阵X(m,n),都可以将其分解为如下的形式

     X=U\sum V^T

  • U:酉矩阵,亦称么正矩阵(单位正交),由对称矩阵XX^T的特征向量组成。(与W的奇异值的顺序一致)
  • \sum:对角矩阵,由对称矩阵XX^TX^TX的特征值的开平方组成,称为奇异值(从大到小排列,U和V^T对应的特征向量亦如此)
  • V^T:酉矩阵,亦称么正矩阵(单位正交),由对称矩阵X^TX的特征向量组成。(与\sum的奇异值的顺序一致)

1.4 PCA 和 SVD 关系

    

      假设我们有m笔数据x^1,x^2,..x^m

      第1笔数据 x^1-\bar{x}=u^1c_1^1+u^2c_2^1+..

      第2笔数据 x^2-\bar{x}=u^1c_1^2+u^2c_2^2+..

      第3笔数据 x^3-\bar{x}=u^1c_1^3+u^2c_2^3+..

      我们发现可以用SVD 求上面的解

       其中U 就是 (x-\bar{x})(x-\bar{x})^T的特征向量,跟PCA 中的协方差是一个东西

    asso = np.cov(x, rowvar=False)


二  PCA 和 AutoEncoder 的关系

​​​​​​​

     PCA 通过求解x\sim R^{n,1}的协方差矩阵的特征值,特征向量得到投影矩阵W\sim R^{k,n}

     降维得到 :

              投影:  z=Wx 

              还原:​​​​​​​x=W^Tz  因为W 每一行之间都是正交基(不同特征值之间正交)

     在神经网络里面可以通过AutoEncoder 来实现

     编码器Encoder:

                  z=W_1x,模仿投影到低维空间功能

     解码器Decoder:

                   \hat{x}=W_2z  模仿还原到高维空间的功能

     问题:

              针对重构误差
              \hat{x}=x-\bar{x}=\sum_k c_kw_k

               如果可以线性重构:

         

             

             

       


三 PCA 的缺点

    3.1  主成分选择:

     选择较少的主成分可以实现较高的压缩率,但可能会丢失一些重要信息。而选择较多的主成分可能会保留过多的冗余信息。因此,在选择主成分的数量时需要权衡

    

    比如上图,红色点核绿色点两类。降低到一维上(红线)这个时候不同类别的特征信息就丢失了

在低维度空间无法区分.

3.2  非线性问题:

        PCA是一种线性降维方法,它假设数据是线性可分的。对于非线性问题,PCA可能无法捕捉到数据的复杂结构。针对非线性问题,可以使用核PCA或其他非线性降维方法。

3,3数据预处理

      PCA对数据的预处理要求较高。标准化是必要的,因为PCA是基于特征之间的协方差矩阵进行计算的。如果数据不经过合适的预处理,可能会导致结果不准确或不可靠。

3.4  特征向量取多少个

    原数据维度为d,降维维度为k. 这个k 到底怎么取

可以设置一个重构阀 例t =95%

需要K 满足下面条件即可:

 从大到小取特征值的绝对值

a=\sum_{i=1}^K \lambda_i

b=\sum_{i=1}^d \lambda_i

 \frac{a}{b}\geq t



四 PCA Python 例子

# -*- coding: utf-8 -*-
"""
Created on Fri Feb  2 11:29:42 2024@author: chengxf2
"""import numpy as npdef calcCov(isAPI=True, data=None):'''isAPI : 是否通过直接调用API 方式data:   默认是每一行代表一个样本,每一列是一个维度,因为要降维所以做转置'''X = data.T#  m,n = np.shape(X)if True == isAPI:cov = np.cov(X,bias=False)print("\n api cov \n ",cov)else:#计算均值u = np.mean(X,axis=1,keepdims=True)m,n = np.shape(X)print(n)bias= X-u#print("\n 每一行是一个维度\n",X)#print("\n 均值 ",u)#print("\n x-u",a)cov = np.matmul(bias,bias.T)/(n-1)print("\n cov",cov)return covprint("\n API 协方差",cov)class PCA():def __init__(self, k):self.k = 0def obtain_features(self, eigVals, eigVecs,proportion):total = sum(abs(eigVals))print("\n 特征值 \n ",eigVals)m,n = np.shape(eigVecs)W= []eig_pairs = [(np.abs(eigVals[i]), list(eigVecs[:,i])) for i in range(n)]# 从大到小排序eig_pairs.sort(reverse=True)# select the top k eig_vecnumerator = 0k=0for paris in eig_pairs:val, eig = parisnumerator =numerator+valratio = numerator/totalk=k+1W.append(eig)if ratio>proportion:#每一行为一个特征向量#print("\n 特征向量",W)print("\n 特征向量维度",np.shape(W))breakW = np.array(W)return W.Tdef fit(self,data):#计算协方差矩阵cov = calcCov(True, data)#取总体能力的百分比proportion =0.8eigVals, eigVecs = np.linalg.eig(cov)self.W = self.obtain_features(eigVals, eigVecs, proportion)return self.Wdef reduction(self,data,W):#数据进行降维#data :m,n 每列为对应的属性#W: [n,k] 降到K维A = np.matmul(data, W)print(A.shape)return Adef main():data = np.random.rand(10,8)net = PCA(3)W= net.fit(data)net.reduction(data, W)if __name__ == "__main__":main()    

参考:

13: Unsupervised Learning - Linear Methods_哔哩哔哩_bilibili

CSDN

基于PyTorch的PCA简单实现 - 知乎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/662616.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RabbitMQ控制台的基本使用

启动RabbitMQ后,浏览器 http://localhost:15672 打开RabbitMQ的控制台页面后,登录默认账户guest。 一. 添加队列 控制台选择队列,然后选择添加队列,队列类型默认经典类型,然后输入队列名称,最后添加队列。…

百度输入法往选字框里强塞广告

关注卢松松,会经常给你分享一些我的经验和观点。 国内几乎100%的输入法都有广告,只是你们没发现而已!!! 百度输入法居然在输入法键盘上推送广告,近日,博主阑夕 表示,V2EX论坛上有…

2024年美国大学生数学建模竞赛F题思路分析与数据

题目 非法野生动物贸易对环境造成了负面影响,并威胁全球生物多样性。据估计,其涉及高达265亿美元的年交易额,被认为是全球所有非法交易中的第四大。[1] 你需要开发一个基于数据驱动的5年项目,旨在显著减少非法野生动物贸易。你的…

PFA氟气吸收装装置耐强酸PFA气体洗涤装置本底纯净

PFA氢气吸收装置在PFA尾气处理中扮演着重要的角色。PFA(可溶性聚四氟乙烯)是一种聚合物材料,具有良好的化学惰性和耐腐蚀性。在半导体工业过程中,PFA尾气中可能含有氢气等有害气体,需要进行处理以确保环境安全和合规性…

深度解析ScheduledThreadPoolExecutor源码之DelayedWorkQueue

文章目录 引言一、什么是二叉堆?1.1什么是最大堆、最小堆?1.2堆的基本操作1.2.1插入节点元素1.2.2删除节点元素1.2.3构建二叉堆 1.3堆特性总结 二、DelayedWorkQueue源码解析2.1 DelayedWorkQueue参数解析2.2 DelayedWorkQueue方法解析 总结 引言 该系列…

力扣之2648.生成 斐波那契数列(yield)

/*** return {Generator<number>}*/ var fibGenerator function*() {let a 0,b 1;yield 0; // 返回 0&#xff0c;并暂停执行yield 1; // 返回 1&#xff0c;并暂停执行while(true) {yield a b; // 返回 a b&#xff0c;并暂停执行[a, b] [b, a b]; // 更新 a 和 …

开发微信小程序--适配 iPhone X 总结

一、展示效果 这是正常的样式效果&#xff1a; 这是不正常的效果&#xff1a; 二、原因分析&#xff1a; 在iPhone 6/7/8型号下是正常的&#xff0c;但在iPhone X等下是不正常的。 由于在 iPhone X 屏幕顶部状态栏区域有“齐刘海”&#xff0c;以及在屏幕底部增加了“操作…

Maven dependency中的scope

Maven的一个哲学是惯例优于配置(Convention Over Configuration), Maven默认的依赖配置项中&#xff0c;scope的默认值是compile。 scope的分类 compile&#xff08;默认&#xff09; 含义&#xff1a; compile 是默认值&#xff0c;如果没有指定 scope 值&#xff0c;该元素…

Microsoft Edge 浏览器报错 提示不安全

网站提示不安全 是因为 Microsoft Edge 开了安全过滤 我们需要把这个关掉 打开浏览器的设置&#xff0c;然后 找到隐私选项 找到下边的Microsoft Defender Smartscreen 关掉 Microsoft Edge 支持 Microsoft Defender SmartScreen | Microsoft Learn win10系统下打开网页提示…

谈谈BlueFS

目录 前言数据结构标识一个文件文件系统的全局记录事务记录超级块 启动流程磁盘管理读写流程创建文件流程为文件写数据把数据下刷到磁盘读流程 参考资料 前言 BlueFS具体是个什么东西呢&#xff1f; 如上图&#xff0c;在Ceph里&#xff0c;使用BlueStore作为默认的存储引擎。…

Day06-Linux下目录命令讲解及重要文件讲解

Day06-Linux下目录命令讲解及重要文件讲解 1. Linux目录文件1.1 Linux系统目录结构介绍1.1.1 Linux与Windows目录结构对比 1.2 重要的Linux配置文件介绍1.2.1 /etc系统初始化及设置相关重要文件1.2.2 /usr目录的重要知识介绍------应用程序目录1.2.3 /var目录下的路径知识-----…

Shell中正则表达式与sed编辑器

目录 一、正则表达式 1.1.正则表达式介绍 1.2.正则表达式分类 1.3.元字符 1.4.扩展正则表达式元字符 二、sed编辑器 2.1.sed编辑器是什么 2.2.sed编辑器的工作流程 2.3.sed命令格式 一、正则表达式 1.1.正则表达式介绍 1、正则表达式---通常用于判断语句中&#xff0…

Redis单机-主从集群-哨兵集群-分片集群 搭建教程

Redis集群 本章是基于CentOS7下的Redis集群教程&#xff0c;包括&#xff1a; 单机安装RedisRedis主从Redis分片集群 1.单机安装Redis 首先需要安装Redis所需要的依赖&#xff1a; yum install -y gcc tclredis-6.2.4.tar.gz 然后将Redis安装包上传到虚拟机的任意目录&am…

Vue3 vant4 解决引入的Toast和dialog样式丢失的bug

情景再现&#xff1a; 正确做法&#xff1a; 在main.ts中单独引入 import vant/es/toast/style import vant/es/dialog/style import { Toast, Dialog } from vantapp.use(Toast) app.use(Dialog)效果如下 轻松拿下。

故障诊断 | 一文解决,CNN-SVM卷积神经网络-支持向量机组合模型的故障诊断(Matlab)

效果一览 文章概述 故障诊断 | 一文解决,CNN-SVM卷积神经网络-支持向量机组合模型的故障诊断(Matlab) 模型描述 卷积神经网络(Convolutional Neural Network,CNN)和支持向量机(Support Vector Machine,SVM)是两种常用的机器学习算法,它们在不同领域和任务中都表现出…

2023_12蓝桥杯STEMA 考试 Scratch 中级试卷解析

2023蓝桥杯STEMA 考试 Scratch 中级试卷(12 月)解析 由于没有原始文件,这里使用的角色和背景和实际题目会有所差异,已经尽量还原原题,以下代码仅供参考。吐槽一句:蓝桥杯越来越变态了!\(`Δ’)/\(`Δ’)/\(`Δ’)/孩子学习速度永远也赶不上内卷的速度。 一、选择…

重写Sylar基于协程的服务器(3、协程模块的设计)

重写Sylar基于协程的服务器&#xff08;3、协程模块的设计&#xff09; 重写Sylar基于协程的服务器系列&#xff1a; 重写Sylar基于协程的服务器&#xff08;0、搭建开发环境以及项目框架 || 下载编译简化版Sylar&#xff09; 重写Sylar基于协程的服务器&#xff08;1、日志模…

“IT行业的黄金证书:你必须了解的顶级认证“

文章目录 每日一句正能量前言一、网络方向&#xff1a;思科认证/软考二、华为认证三、系统方向&#xff1a;红帽认证四、数据库方向&#xff1a;Oracle认证五、信息安全方向&#xff1a;CISP/CISSP认证六、管理方向&#xff1a;PMP认证IT行业证书的价值和作用后记 每日一句正能…

树——二叉搜索树

二叉搜索树 概述 随着计算机算力的提升和对数据结构的深入研究&#xff0c;二叉搜索树也不断被优化和扩展&#xff0c;例如AVL树、红黑树等。 特性 二叉搜索树&#xff08;也称二叉排序树&#xff09;是符合下面特征的二叉树&#xff1a; 树节点增加 key 属性&#xff0c;用来…

手游反抓帧解决方案

随着游戏用户规模趋于稳定&#xff0c;游戏行业已迈入存量市场阶段&#xff0c;厂商之间的竞争愈发激烈&#xff0c;研发成本也随之激增。据数据统计&#xff1a;游戏研发成本占收入比约在 15%-35%&#xff0c;而研发成本中&#xff0c;美术资源投入占比达到了50-70%。 游戏厂商…