首先说明一下特征值:设A是n阶方阵,如果存在 λ 和n维非零向量X,使 AX = λX ,则 λ 称为方阵A的一个特征值,X为方阵A对应于或属于特征值 λ 的一个特征向量。

  AX = λX 的过程是一个从矩阵乘法到数乘操作的过程。数乘的实质是对向量X进行缩放,缩放因子为λ ,缩放只改变大小,不改变方向。找到特征值和特征向量的过程称为特征值分解,可以利用解线性方程组(λE-A)X=0 来完成。对应于不同特征值的特征向量线性无关,如果原矩阵A是对称矩阵,对应于不同特征值的特征向量必定正交 。

  如果得到了N阶对称矩阵A的N个特征值,且N个特征值均不同,那么特征向量必定正交,就可以经过标准化后(是否需要,如何做?存疑?直接除以长度么?),作为A的标准正交基。将A向N个基上投影,投影长度=特征值绝对值,特征值越大,表示了矩阵在对应的特征向量上的方差越大,功率越大,信息量越多。因此,特征值分解得到了特征值和特征向量,特征值的大小表示了对应的特征有多重要,特征向量的方向表示了特征的属性。

  既然特征值越大的方向上包含了越多的信息,就可以在特征值分解后,只保留特征值较大的方向对应的数据,删除小特征值对应方向的数据,保证了数据量减少,而有用信息基本不变,这就是PCA的思想。

  (有一个疑问:只有对称阵的特征值不同才能保证特征向量彼此正交,如果特征值相同,线性无关无法保证,如何找正交基呢?)

  注意:特征值分解要求A是方阵,如果A不是方阵,而是一个1920x1080的灰度图构成的矩阵,无法找特征值,此时可以找奇异值。

  

  奇异值:矩阵A的大小为mxn,奇异值分解将矩阵分解成若干个秩一矩阵之和,即

每个都是奇异值,按照从大到小的顺序排列,u和v分别表示列向量,uv' 是秩为1的矩阵,( 可以利用 R(A)+R(B)-n <= R(AB) <= min{R(A),R(B)} 得到R(uv')=1)。只保留较大的奇异值对应的数据,同样可以达到降维的效果。下面是对一张图片进行的实验。

Matlab代码如下:

 clear,clc;
close all; imgorigin = imread('saoirse.jpg');
imgray = double(rgb2gray(imgorigin));
subplot();imshow(imgray,[]);title('original-gray');
[m,n] = size(imgray);
[U,S,V] = svd(imgray);
%返回与imgray同大小的对角矩阵S,两个矩阵U和V,且满足imgray=U*S*V'
%若imgray大小为m×n,则U为m×m矩阵,V为n×n矩阵.S为m×n矩阵,奇异值在S的对角线上 decomp = U(:,:)*S(:,)*V(:,)';
subplot();imshow(decomp,[]);title('svd-前1个特征'); decomp = U(:,:)*S(:,:)*V(:,:)';
subplot();imshow(decomp,[]);title('svd-前5个特征'); decomp = U(:,:)*S(:,:)*V(:,:)';
subplot();imshow(decomp,[]);title('svd-前10个特征'); decomp = U(:,:)*S(:,:)*V(:,:)';
subplot();imshow(decomp,[]);title('svd-前50个特征'); decomp = U(:,:)*S(:,:)*V(:,:)';
subplot();imshow(decomp,[]);title('svd-前80个特征') decomp = U(:,:)*S(:,:)*V(:,:)';
subplot();imshow(decomp,[]);title('svd-前150个特征'); decomp = U(:,:)*S(:,:)*V(:,:)';
subplot();imshow(decomp,[]);title('svd-前220个特征'); decomp = U(:,:)*S(:,:)*V(:,:)';
subplot();imshow(decomp,[]);title('svd-前282个特征');

参考:

1. https://blog.csdn.net/index20001/article/details/73501632

2. https://www.zhihu.com/question/22237507

3. 线性代数与空间解析几何-郑宝东

奇异值分解(SVD)的更多相关文章

  1. 矩阵奇异值分解(SVD)及其应用

    机器学习中的数学(5)-强大的矩阵奇异值分解(SVD)及其应用(好文) [简化数据]奇异值分解(SVD) <数学之美> 第15章 矩阵运算和文本处理中的两个分类问题

  2. 转载:奇异值分解(SVD) --- 线性变换几何意义(下)

    本文转载自他人: PS:一直以来对SVD分解似懂非懂,此文为译文,原文以细致的分析+大量的可视化图形演示了SVD的几何意义.能在有限的篇幅把这个问题讲解的如此清晰,实属不易.原文举了一个简单的图像处理 ...

  3. 特征值分解与奇异值分解(SVD)

    1.使用QR分解获取特征值和特征向量 将矩阵A进行QR分解,得到正规正交矩阵Q与上三角形矩阵R.由上可知Ak为相似矩阵,当k增加时,Ak收敛到上三角矩阵,特征值为对角项. 2.奇异值分解(SVD) 其 ...

  4. 奇异值分解(SVD) --- 几何意义

    原文:http://blog.sciencenet.cn/blog-696950-699432.html PS:一直以来对SVD分解似懂非懂,此文为译文,原文以细致的分析+大量的可视化图形演示了SVD ...

  5. [机器学习笔记]奇异值分解SVD简介及其在推荐系统中的简单应用

    本文先从几何意义上对奇异值分解SVD进行简单介绍,然后分析了特征值分解与奇异值分解的区别与联系,最后用python实现将SVD应用于推荐系统. 1.SVD详解 SVD(singular value d ...

  6. 【转载】奇异值分解(SVD)计算过程示例

    原文链接:奇异值分解(SVD)的计算方法 奇异值分解是线性代数中一种重要的矩阵分解方法,这篇文章通过一个具体的例子来说明如何对一个矩阵A进行奇异值分解. 首先,对于一个m*n的矩阵,如果存在正交矩阵U ...

  7. 一步步教你轻松学奇异值分解SVD降维算法

    一步步教你轻松学奇异值分解SVD降维算法 (白宁超 2018年10月24日09:04:56 ) 摘要:奇异值分解(singular value decomposition)是线性代数中一种重要的矩阵分 ...

  8. 机器学习实战(Machine Learning in Action)学习笔记————10.奇异值分解(SVD)原理、基于协同过滤的推荐引擎、数据降维

    关键字:SVD.奇异值分解.降维.基于协同过滤的推荐引擎作者:米仓山下时间:2018-11-3机器学习实战(Machine Learning in Action,@author: Peter Harr ...

  9. 用 GSL 求解超定方程组及矩阵的奇异值分解(SVD)

    用 GSL 求解超定方程组及矩阵的奇异值分解(SVD) 最近在学习高动态图像(HDR)合成的算法,其中需要求解一个超定方程组,因此花了点时间研究了一下如何用 GSL 来解决这个问题. GSL 里是有最 ...

  10. 奇异值分解(SVD)原理详解及推导(转载)

    转载请声明出处http://blog.csdn.net/zhongkejingwang/article/details/43053513 在网上看到有很多文章介绍SVD的,讲的也都不错,但是感觉还是有 ...

随机推荐

  1. ReactiveX 学习笔记(28)使用 RxJS + React.js 进行 GUI 编程

    课题 程序界面由3个文本编辑框和1个文本标签组成. 要求文本标签实时显示3个文本编辑框所输入的数字之和. 文本编辑框输入的不是合法数字时,将其值视为0. 3个文本编辑框的初值分别为1,2,3. 创建工 ...

  2. Linux gzip命令

    语法: gzip [-acdfhlLnNqrtvV][-S <压缩字尾字符串>][-<压缩效率>][--best/fast][文件...] 或 gzip [-acdfhlLnN ...

  3. std::condition_variable::wait_until segment

    原因是使用了 -static 改为 -static-libstdc++ -static-libgcc

  4. Linux开始结束ping命令

    ctrl+c可以终止ping ctrl+z可以暂停ping,该暂停只是把进程放到后台去了,使用命令fg可以调出到前台来 通过以下命令可以设置次数: ping -c    10 (次数)  ip(域名) ...

  5. SpringCloud-day04-Eureka高可用集群配置

    5.4Eureka高可用集群配置 在高并发的情况下一个注册中心难以满足,因此一般需要集群配置多台. 我们再新建两个module  microservice-eureka-server-2002,  m ...

  6. 安装软件,遇到弹框Windows Installer Coordinator,一直循环卡在这个弹框处

    转载自https://www.cliftonsystems.co.uk/fixing-windows-installer-coordinator-loop/ 复制粘贴原文内容,以防将来访问不到原网页了 ...

  7. Windows下phpstudy配置tp5的nginx时遇到的奇葩问题

    nginx原来的配置: hosts已经配置好127.0.0.1 到tpdev1.net这个域名 最后结果 No input file specified. 解决方法: 找到原因了,竟然是root的分隔 ...

  8. Python学习—基础篇之常用模块

    常用模块 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要 ...

  9. Linux - Linux 终端命令格式

    Linux 终端命令格式 目标 了解终端命令格式 知道如何查阅终端命令帮助信息 01. 终端命令格式 command [-options] [parameter] 说明: command:命令名,相应 ...

  10. Django继承AbstractUser新建UserInfor Model时出现fields.E304错误

    错误详情: SystemCheckError: System check identified some issues: ERRORS:app01.UserInfo.groups: (fields.E ...