数学建模学习笔记(十二)——奇异值分解

文章目录

    • 一、综述
    • 二、奇异值分解
    • 三、使用SVD进行降维
    • 四、SVD的评价及应用

一、综述

奇异值分解是线性代数中一种重要的矩阵分解方法,它在图形的压缩等方面具有重要的意义及作用。

二、奇异值分解

  1. 三个引理:
    1. AB 和 BA 非零的特征值完全相同;
    2. 实对称矩阵的特征值一定为实数,且一定可以相似对角化,特征向量构成的矩阵可通过施密特正交化变为正交矩阵。
    3. AATAA^TAAT 一定是半正定矩阵,因此其特征值不可能为负数。
  2. 奇异值分解
    Am×n=Um×m∑m×nVn×nTA_{m \times n} = U_{m \times m}\sum_{m \times n}V^T_{n \times n}Am×n=Um×mm×nVn×nT,其中 UUUVVV 都是正交矩阵,且 ∑\sum 是奇异值矩阵(对角元素从大到小排列,这些元素称为奇异值。其他元素为0)
    1. U的计算
      先计算 AATAA^TAAT,它是一个 mmm 阶的对称矩阵,从而可以对 AATAA^TAAT 进行相似对角化,同时将特征值从大到小排列,从而 AAT=UΛ1UTAA^T = U\Lambda_1U^TAAT=UΛ1UT,从而可以求出矩阵 UUU
    2. V的计算
      先计算 ATAA^TAATA,它是一个 nnn 阶的对称矩阵,那么我们可以对 ATAA^TAATA 相似对角化,同时也将特征值按从大到小排列,从而 ATA=VΛ2VTA^TA = V\Lambda_2V^TATA=VΛ2VT,从而可以求出矩阵 VVV
    3. ∑\sum 的计算
      取出 AATAA^TAAT(或者 ATAA^TAATA,二者特征值相同)的非零特征值并开方,便得到了奇异值。然后将这些奇异值按照从大到小填充到 ∑\sum 的主对角线上,其他位置为0,从而便得到了矩阵 ∑\sum

三、使用SVD进行降维

所谓的使用SVD来进行降维,就是使矩阵的秩减小,矩阵的大小不变。
下面来看一个例子:
在这里插入图片描述
该分解保留原矩阵的特征比例 = 8.45+4.948.45+4.94+1.11×100%=92.34%\frac{8.45 + 4.94}{8.45 + 4.94 + 1.11} \times 100\% = 92.34\%8.45+4.94+1.118.45+4.94×100%=92.34%
除此之外,我们还可以自定义需要保留的特征比例,从而保留对应比例的矩阵。

四、SVD的评价及应用

  1. 评价
    1. 优点:简化数据,去除噪声点,对数据进行降维。
    2. 缺点:数据的转换难以理解
  2. 应用:
    1. 对图片和视频数据进行压缩(图片主要是像素点以及RGB色彩混合而形成的图像,可以对其进行SVD分解,从而达到压缩目的)。
    2. 潜在语义索引
    3. 推荐系统

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

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

相关文章

python基础入门(5)之运算符

目录 一、python运算符 1)算术运算符 2)赋值运算符 一、python运算符 1)算术运算符 自己赋值粘贴运行下就懂了! 加减法:( -) a2 b3 ca-b da-b print(c,d)乘除法:(* /) a(50-5*6)/4 print(…

Python实例 61,62

61.题目:打印出杨辉三角形 程序设计: 第一步:先找规律,抽象化问题: 首先我们观察到,第一行为[1],我们直接赋给一个变量:初始化数列 p [1] 其次我们观察到,下面的每一…

数学建模学习笔记(十三)——主成分分析

文章目录一、综述二、主成分分析三、主成分分析的计算步骤(可在Matlab实现)四、对于主成分的解释五、主成分分析的应用一、综述 主成分分析的本质是降维,她能够将多个指标转换为少数几个主成分。这些主成分之间互不相关,且是原变…

C语言逻辑运算符详解

情景模式&#xff1a;现在研发出了一款新的软件&#xff0c;要求使用者必须成年&#xff0c;并且成绩大于等于60&#xff0c;该怎么办呢&#xff1f; 或许你会想到使用嵌套的 if 语句&#xff0c;类似下面这样的代码&#xff1a; #include <stdio.h> int main() {int a…

C语言switch case语句详解

当分支比较少的时候我们使用if else语句解决&#xff0c;当分支比较多的时候&#xff0c;我们要使用switch case语句解决&#xff0c;针对分支的复杂性选择合适的程序解决。 当分支过多时&#xff0c;用 if else 处理会不太方便&#xff0c;而且容易出现 if else 配对出错的情…

Python实例 63,64

目录 63.题目&#xff1a;画椭圆 1.tkinter画椭圆 2.turtle画椭圆 64.题目&#xff1a;利用ellipse 和 rectangle 画图 63.题目&#xff1a;画椭圆 1.tkinter画椭圆 #63 from tkinter import * x 360 y 160 top y - 30 bottom y - 30canvas Canvas(width 500,height …

HTML学习笔记(一)

HTML5语法 文档类型 DOCTYPE声明文档类型 &#xff0c;必须位于第一行。 DOCTYPE不区分大小写以及单双引号。 DOCTYPE会触发浏览器以标准模式显示页面。 <!DOCTYPE HTML>字符编码 HTML5中简化了字符编码的写法&#xff0c;直接用 meta 即可 <meta charset "UTF-…

C语言条件运算符详解

如果希望获得两个数中最大的一个&#xff0c;可以使用 if 语句&#xff0c;例如&#xff1a; if(a>b){max a; }else{max b; }不过&#xff0c;C语言提供了一种更加简单的方法&#xff0c;叫做条件运算符&#xff0c;语法格式为&#xff1a; 表达式1 ? 表达式2 : 表达式…

C++ PAT 乙级 1007——素数对猜想

题目详情 让我们定义 dnd_ndn​ 为 dnpn1−pnd_n p_{n 1} - p_ndn​pn1​−pn​&#xff0c;其中 pip_ipi​ 是第 i 个素数。显然有 d11d_1 1d1​1&#xff0c;且对于 n > 1有 dnd_ndn​ 是偶数。 “素数对猜想”认为“存在无穷多对相邻且差为2的素数”&#xff0c;现给…

python实例 65,66

65.题目&#xff1a;一个最优美的图案 #65 import math class PTS:def __init__(self):self.x 0self.y 0 points []def LineToDemo():import tkinter screenx 400screeny 400canvas Canvas(width screenx,height screeny,bg white)AspectRatio 0.85MAXPTS 15h scr…

C语言while循环和do while循环详解

在C语言中&#xff0c;共有三大常用的程序结构&#xff1a; 顺序结构&#xff1a;代码从前往后执行&#xff0c;没有任何“拐弯抹角”&#xff1b; 选择结构&#xff1a;也叫分支结构&#xff0c;重点要掌握 if else、switch 以及条件运算符&#xff1b; 循环结构&#xff1…

C语言for循环详解

for 循环的使用更加灵活&#xff0c;在日常的程序开发过程中我们会使用的更多一些。 使用 while 循环来计算1加到100的值&#xff0c;代码如下&#xff1a; #include <stdio.h> int main(){int i, sum0;i 1; //语句①while(i<100 /*语句②*/ ){sumi;i; //语句③}…

python基础入门(6)之列表

目录 一、Python列表 一.列表基本知识 1)创建列表 2&#xff09;列出表值 3&#xff09;列表长度 4&#xff09;列表项 - 数据类型 5&#xff09;Python 集合&#xff08;数组&#xff09; 二.访问列表 1.正常索引 2)负索引 3)索引范围 4&#xff09;负指数范围 5…

山东大学 2020级数据库系统 实验一

What’s more? 山东大学 2020级数据库系统 实验一 山东大学 2020级数据库系统 实验二 山东大学 2020级数据库系统 实验三 山东大学 2020级数据库系统 实验四 山东大学 2020级数据库系统 实验五 山东大学 2020级数据库系统 实验六 山东大学 2020级数据库系统 实验七 山东大学 …

C语言break和continue用法详解

使用while或for循环时&#xff0c;如果想提前结束循环&#xff08;在不满足结束条件的情况下结束循环&#xff09;&#xff0c;可以使用break或continue关键字。 break关键字 我们使用break来跳出 switch 语句。 当 break 关键字用于 while、for 循环时&#xff0c;会终止循…

python基础入门(7)之元组

目录 Python元组 一、元组理解 1.1&#xff09;基本定义 1.2&#xff09;元组长度 1.3&#xff09;数据类型 二、访问元组 2.1&#xff09;正常访问 2.2&#xff09;负索引 2.3&#xff09;范围性索引 三、更新元组 3.1&#xff09;替换 ​3.2&#xff09;添加项目…

山东大学 2020级数据库系统 实验二

What’s more 山东大学 2020级数据库系统 实验一 山东大学 2020级数据库系统 实验二 山东大学 2020级数据库系统 实验三 山东大学 2020级数据库系统 实验四 山东大学 2020级数据库系统 实验五 山东大学 2020级数据库系统 实验六 山东大学 2020级数据库系统 实验七 山东大学 20…

C语言嵌套循环详解

在C语言中&#xff0c;if-else、while、do-while、for 都可以相互嵌套。**所谓嵌套&#xff08;Nest&#xff09;&#xff0c;就是一条语句里面还有另一条语句&#xff0c;**例如 for 里面还有 for&#xff0c;while 里面还有 while&#xff0c;或者 for 里面有 while&#xff…

jupyter(Anaconda)设置默认打开文件夹

win r 输入 cmd 回车 再输入如下命令回车&#xff1a; jupyter notebook --generate-config然后&#xff1a;打开生成的文件路径 进去后&#xff1a;编辑这个py ctrl f 搜索&#xff1a;notebook_dir定位 去掉# &#xff0c;引号后改为你要打开的文件路径&#xff08;路径…

山东大学 2020级数据库系统 实验三

What’s more 山东大学 2020级数据库系统 实验一 山东大学 2020级数据库系统 实验二 山东大学 2020级数据库系统 实验三 山东大学 2020级数据库系统 实验四 山东大学 2020级数据库系统 实验五 山东大学 2020级数据库系统 实验六 山东大学 2020级数据库系统 实验七 山东大学 20…