简单易学的机器学习算法—SVD奇异值分解
一、SVD奇异值分解的定义
   
假设M是一个 的矩阵,如果存在一个分解:
的矩阵,如果存在一个分解:

其中 的酉矩阵,
的酉矩阵, 的半正定对角矩阵,
的半正定对角矩阵, 的共轭转置矩阵,且为
的共轭转置矩阵,且为 的酉矩阵。这样的分解称为M的奇异值分解,
的酉矩阵。这样的分解称为M的奇异值分解, 对角线上的元素称为奇异值,
对角线上的元素称为奇异值, 称为左奇异矩阵,
称为左奇异矩阵, 称为右奇异矩阵。
称为右奇异矩阵。
二、SVD奇异值分解与特征值分解的关系
特征值分解与SVD奇异值分解的目的都是提取一个矩阵最重要的特征。然而,特征值分解只适用于方阵,而SVD奇异值分解适用于任意的矩阵,不一定是方阵。

这里, 是方阵,
是方阵, 为单位矩阵,
为单位矩阵, 的特征向量,
的特征向量, 的特征向量。
的特征向量。 的特征值为M的奇异值的平方。
的特征值为M的奇异值的平方。
三、SVD奇异值分解的作用和意义
   
奇异值分解最大的作用就是数据的降维,当然,还有其他很多的作用,这里主要讨论数据的降维,对于 的矩阵m,进行奇异值分解
的矩阵m,进行奇异值分解

取其前r个非零奇异值,可以还原原来的矩阵M,即前R个非零奇异值对应的奇异向量代表了M矩阵的主要特征。可以表示为

五、实验的仿真
   
我们在手写体上做实验,原始矩阵为

原始矩阵
对应的图像为

对应图像
经过SVD分解后的奇异值矩阵为

部分奇异值矩阵
取前14个非零奇异值

前14个非零奇异值
还原原始矩阵B,还原后的图像为

还原后的图像
对比图像

对比图像
MATLAB代码
[plain] view plain copy
%% 测试奇异值分解过程  
load data.mat;%该文件是做好的一个手写体的图片  
B = zeros(28,28);%将行向量重新转换成原始的图片  
  数据分析师培训
for i = 1:28  
    j = 28*(i-1)
1;  
    B(i,:) =
A(1,j:j 27);  
end  
 
%进行奇异值分解  
[U S V] = svd(B);  
 
%选取前面14个非零奇异值  
for i = 1:14  
    for j = 1:14
 
       
S_1(i,j) = S(i,j);  
    end
 
end  
 
%左奇异矩阵  
for i = 1:28  
    for j = 1:14
 
       
U_1(i,j) = U(i,j);  
    end
 
end  
 
%右奇异矩阵  
for i = 1:28  
    for j = 1:14
 
       
V_1(i,j) = V(i,j);  
    end
 
end  
 
B_1 = U_1*S_1*V_1';  
 
%同时输出两个图片  
subplot(121);imshow(B);  
subplot(122);imshow(B_1);
简单易学的机器学习算法—SVD奇异值分解的更多相关文章
- 简单易学的机器学习算法——EM算法
		简单易学的机器学习算法——EM算法 一.机器学习中的参数估计问题 在前面的博文中,如“简单易学的机器学习算法——Logistic回归”中,采用了极大似然函数对其模型中的参数进行估计,简单来讲即对于一系 ... 
- 简单易学的机器学习算法—基于密度的聚类算法DBSCAN
		简单易学的机器学习算法-基于密度的聚类算法DBSCAN 一.基于密度的聚类算法的概述 我想了解下基于密度的聚类算法,熟悉下基于密度的聚类算法与基于距离的聚类算法,如K-Means算法之间的区别. ... 
- 简单易学的机器学习算法——基于密度的聚类算法DBSCAN
		一.基于密度的聚类算法的概述 最近在Science上的一篇基于密度的聚类算法<Clustering by fast search and find of density peaks> ... 
- 简单易学的机器学习算法——神经网络之BP神经网络
		一.BP神经网络的概念 BP神经网络是一种多层的前馈神经网络,其基本的特点是:信号是前向传播的,而误差是反向传播的.详细来说.对于例如以下的仅仅含一个隐层的神经网络模型: watermark/ ... 
- 简单易学的机器学习算法——决策树之ID3算法
		一.决策树分类算法概述 决策树算法是从数据的属性(或者特征)出发,以属性作为基础,划分不同的类.例如对于如下数据集 (数据集) 其中,第一列和第二列为属性(特征),最后一列为类别标签,1表示是 ... 
- 机器学习降维--SVD奇异值分解
		奇异值分解是有着很明显的物理意义,将一个比较复杂的矩阵用更小更简单的几个子矩阵的相乘来表示,这些小矩阵描述的是矩阵的重要的特性,让机器学会抽取重要的特征,SVD是一个重要的方法. 所以SVD不仅是一个 ... 
- 机器学习算法实现解析——word2vec源代码解析
		在阅读本文之前,建议首先阅读"简单易学的机器学习算法--word2vec的算法原理"(眼下还没公布).掌握例如以下的几个概念: 什么是统计语言模型 神经概率语言模型的网络结构 CB ... 
- paper 19 :机器学习算法(简介)
		本来看了一天的分类器方面的代码,乱乱的,索性再把最基础的概念拿过来,现总结一下机器学习的算法吧! 1.机器学习算法简述 按照不同的分类标准,可以把机器学习的算法做不同的分类. 1.1 从机器学习问题角 ... 
- 机器学习算法总结(九)——降维(SVD, PCA)
		降维是机器学习中很重要的一种思想.在机器学习中经常会碰到一些高维的数据集,而在高维数据情形下会出现数据样本稀疏,距离计算等困难,这类问题是所有机器学习方法共同面临的严重问题,称之为“ 维度灾难 ”.另 ... 
随机推荐
- CF1086F Forest Fires
			CF1086F Forest Fires 有点意思的题目 直接统计每个格子的val是非常难办的.很难知道每秒新出来多少个格子 设$F[i]$表示,前i时刻覆盖的格子的数量 则,$ans=\sum_{i ... 
- java中字符数组与字符串之间互相转换的方法
			public static void main(String[] args) { //1.字符数组 转换成 字符串 //(1)直接在构造String时转换 char[] array = new cha ... 
- bat删除多少天前的文件包含子目录
			通过 Forfiles 删除指定目录下过期的备份文件 /*-- 用法详解 D:/>forfiles /? FORFILES [/P pathname] [/M searchmask] [/S] ... 
- C++ 类设计核查表
			参考:https://www.jianshu.com/p/01601515ca31 <大规模C++程序设计> 函数接口: 1.运算符或非运算符函数? 2.自由或成员运算符? 3.虚函数或非 ... 
- MSSQLSERVER跨服务器连接(远程登录)的示例代码
			MSSQLSERVER跨服务器链接服务器创建方法如下 复制代码 代码如下: --声明变量 Declare @svrname varchar(255), @dbname varchar(255), @s ... 
- ThreadLocal简析
			简介 ThreadLocal在Java多线程开发中常见的一个类,在面试中也经见的问题,比如ThreadLocal的作用是什么,ThreadLocal的实现原理是什么等等.ThreadLocal是jav ... 
- SPOJ 1043 GSS1 - Can you answer these queries I
			题目描述 给出了序列A[1],A[2],-,A[N]. (a[i]≤15007,1≤N≤50000).查询定义如下: 查询(x,y)=max{a[i]+a[i+1]+-+a[j]:x≤i≤j≤y}. ... 
- 莫烦PyTorch学习笔记(五)——分类
			import torch from torch.autograd import Variable import torch.nn.functional as F import matplotlib.p ... 
- jquery.cookie.js时间设置
			var expiresDate= new Date(); expiresDate.setTime(expiresDate.getTime() + (120*60*1000)); $.cookie('u ... 
- 深入浅出 Java Concurrency (35): 线程池 part 8 线程池的实现及原理 (3)[转]
			线程池任务执行结果 这一节来探讨下线程池中任务执行的结果以及如何阻塞线程.取消任务等等. 1 package info.imxylz.study.concurrency.future;2 3 publ ... 
