首先说明一下特征值:设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. Python实现多线程调用GDAL执行正射校正

    python实现多线程参考http://www.runoob.com/python/python-multithreading.html #!/usr/bin/env python # coding: ...

  2. 深入理解Java虚拟机读书笔记9----线程完全与锁优化

    九 线程完全与锁优化   1 Java语言中的线程完全         ---线程安全:当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用 ...

  3. Could not read document: Can not deserialize instance of java.lang.String out of START_ARRAY

    线上问题: { "timestamp": "1544510665", "status": 400, "error": & ...

  4. js导出excel文件

    <div id="tablesDiv"> <table id="tabDiv1"> <tbody><tr> &l ...

  5. MongoDB主从复制和副本集

    MongoDB有主从复制和副本集两种主从复制模式,主从复制最大的问题就是无法自动故障转移,MongoDB副本集解决了主从模式无法自动故障转义的特点,因此是复制的首选.对于简单的主从复制无法自动故障转移 ...

  6. 程序配置的原则和实践以及 Spring Boot 支持方式

    原则 软件需要在不同的环境中部署,代码是保持不变的,但是不同的运行环境存在差异,所以需要使用配置适应不同的环境.比如: 数据库,Redis,以及其他 后端服务 的配置: 第三方服务的证书,如 oAut ...

  7. Kickstart自动化安装平台

    PXE(preboot execute environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并 ...

  8. java 与 CDH kafka集成

    本文主要是通过在网上找到的例子进行演示: 一.说明      开发环境如下:      idea + jdk 1.8 + maven      maven 中引用的架包如下: 二. 生产者 impor ...

  9. Node.js 薄荷网爬取

    Node.js:是一个基于前端的服务器,主要的特点:单线程,异步I/O(对这个没有了解,开发起来真的会踩很多坑),事件驱动 前言:本人主要是一个以使用.Net平台下的语言,进行开发的一个菜鸡,之前面试 ...

  10. 写一个小CTF平台

    0x00.前言 协会要举办信息安全大赛了,初赛的web+crypto+misc主要由我来出题,注册.比赛的平台也都要由我来写    上周日完成了注册页面的后端(前端由另一个女生写的),前天下午大概完成 ...