SVD分解及其应用
来源:互联网 发布:linux增加局域网ip段 编辑:程序博客网 时间:2024/05/19 01:33
SVD分解及其应用
版权声明:本文为博主原创文章,未经博主允许不得转载。
目录(?)[+]
- SVD起源
- 对角化概述
- SVD
- SVD应用
- 图像压缩2
- 数据去噪
- LSA
- 推荐系统
- 注意
- 参考资料
SVD
可谓线性代数的登峰造极者。
其本质就是找到将任何一个矩阵对角化分解的两组标准正交的基底,同时对应的奇异值反映了对应基底变换的性质,为0表示对应的维度缺少信息,越大表明对应的维度容纳的信息方差越大。
SVD起源
认识一个问题总要追根究底,为什么要有SVD
这个东西呢?
要了解这一点,必须知道矩阵对角化
是个奇妙的东西,以及并不是所有的矩阵都可以对角化。同时引出了今天的重点——如何让每个矩阵都可以对角化?
对角化概述
矩阵分析中,我们都想要好的矩阵,好的矩阵的一大特点就是可以对角化。
对角化的对象矩阵有两类:
- 方矩阵的对角化
- 长方形矩阵的对角化
对角化的方法也有两类:
- 输入和输出空间的基完全一样,对应的特征值特征向量分解
A=SΛS−1 。但是这种情况下S 基中的向量不一定是正交的。当A 是对称矩阵的话S 中的基可以是标准正交的。同时基也不是一定存在的,只有有足够的特征向量,比如n×n 的矩阵对角化的充要条件是有n 个不相关的特征向量。 - 输入空间和输出空间的基不一样,这就对应了
SVD ,也就是AV=US ,V,U 分别是输入和输出空间的基,这种情况下的对角化总是存在的。
所以,综合对角化对象矩阵的形状以及对角化的方法,有以下结论:
- 如果矩阵是
n 阶方阵,可以尝试同一组基下面的对角化,也就是特征值特征向量分解。这种情况下对角化存在当且仅当存在n 个线性无关的特征向量。如果不存在的话说明不能找到同一组基使矩阵对角化。同时如果矩阵是对称矩阵的话,那么特征值肯定存在,肯定存在标准正交的特征向量。 - 其他矩阵可以采用不同的两组基底实现
SVD 对角化。 - 对于
n 阶方阵来说,eig 分解与svd 分解相等当且仅当矩阵是半正定矩阵,也就是方阵在同一组标准正交基上对角化并且特定维度上的方向不变。 - 特征值和奇异值分别表示对角化解耦后对应的基底的长度,从线性变换的角度上是对不同的基的延伸程度,从方差的角度上来说是方差的大小信息的多少。
- 特征值或奇异值如果等于0,说明矩阵存在某一个维度上的信息缺失。因此可以得到如果矩阵
Amn 的秩为r ,那么它肯定有r 个不等于0的特征值和奇异值。
对角化的优点是(以特征值分解举例):
- 可以进行对角化分解,
A=SΛS−1 - 矩阵的
k 次方Ak=SΛkS−1 - 从对角化的矩阵中可以知道矩阵是不是缺失了某些维度的信息(特征值或者奇异值等于0),如果存在0的话那么矩阵不可逆(因为损失信息回不到以前了)。
- 如果基底是标准正交基,那么从特征值或者奇异值的绝对值上可以找到哪个维度上的方差最大,利用这个思路可以实现数据压缩。
那么,具体如何将一个矩阵分解成对角矩阵和标准正交矩阵的乘积?
SVD
## 公式描述SVD的几何意义是对于特定的矩阵
同时,如果矩阵的秩为
采用matlab
中的eigshow
函数,可以得到类似的解释:
通过选择一组合适的正交基
SVD应用
##图像压缩 我们的目标就是这位美女——蒋勤勤,将对这幅图片实现压缩。首先,先来看看原来的RGB图片以及RGB分量的灰度图片:
SVD之后,先来看看SVD的奇异值大小的分布情况和累计分布比率:
接着,看一看选择不同数量的奇异值的结果。
最后,看一看图像的压缩比,原图像是
具体代码如下:
<code class="language-matlab hljs has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">% 读入图像RGB数据,并从Uint8转换成double类型方便之后的处理。</span>p = imread(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'/Users/yangguangyao/Desktop/test/p.jpg'</span>);pr = p(:,:,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>);pg = p(:,:,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>);pb = p(:,:,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3</span>);pr = double(pr);pg = double(pg);pb = double(pb);<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">% 可视化图像</span>figure()subplot(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>);imshow(p)title(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'原来的RGB图像'</span>)subplot(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>);imshow(mat2gray(pr))title(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'R分量的灰度图像'</span>)subplot(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3</span>);imshow(mat2gray(pg))title(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'G分量的灰度图像'</span>)subplot(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">4</span>);imshow(mat2gray(pb))title(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'B分量的灰度图像'</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">% SVD分解</span><span class="hljs-matrix" style="box-sizing: border-box;">[Ur,Sr,Vr]</span> = svd(pr);<span class="hljs-matrix" style="box-sizing: border-box;">[Ug,Sg,Vg]</span> = svd(pg);<span class="hljs-matrix" style="box-sizing: border-box;">[Ub,Sb,Vb]</span> = svd(pb);<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">% 分析SVD,计划选取1 3 5 10 30 50 100 150</span>svdD = <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">diag</span>(Sr);cumsumD = cumsum(svdD);plot(svdD,<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'LineWidth'</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>)plot(cumsumD,<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'LineWidth'</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">% 分解后按照singular value从大到小选择</span>fr = @(n) Ur(:,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>:n)*Sr(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>:n,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>:n)*Vr(:,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>:n)<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">';fg = @(n) Ug(:,1:n)*Sg(1:n,1:n)*Vg(:,1:n)'</span>;fb = @(n) Ub(:,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>:n)*Sb(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>:n,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>:n)*Vb(:,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>:n)<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">';param = [1,3,5,10,30,50,100,150];figure()for i = 1:8 subplot(2,4,i); n = param(i); pnew(:,:,1) = fr(n); pnew(:,:,2) = fg(n); pnew(:,:,3) = fb(n); pnew = uint8(pnew); imshow(pnew) title(strcat(num2str(param(i)),'</span>个奇异值<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'))end</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li><li style="box-sizing: border-box; padding: 0px 5px;">36</li><li style="box-sizing: border-box; padding: 0px 5px;">37</li><li style="box-sizing: border-box; padding: 0px 5px;">38</li><li style="box-sizing: border-box; padding: 0px 5px;">39</li><li style="box-sizing: border-box; padding: 0px 5px;">40</li><li style="box-sizing: border-box; padding: 0px 5px;">41</li><li style="box-sizing: border-box; padding: 0px 5px;">42</li><li style="box-sizing: border-box; padding: 0px 5px;">43</li><li style="box-sizing: border-box; padding: 0px 5px;">44</li><li style="box-sizing: border-box; padding: 0px 5px;">45</li><li style="box-sizing: border-box; padding: 0px 5px;">46</li><li style="box-sizing: border-box; padding: 0px 5px;">47</li><li style="box-sizing: border-box; padding: 0px 5px;">48</li><li style="box-sizing: border-box; padding: 0px 5px;">49</li><li style="box-sizing: border-box; padding: 0px 5px;">50</li><li style="box-sizing: border-box; padding: 0px 5px;">51</li><li style="box-sizing: border-box; padding: 0px 5px;">52</li><li style="box-sizing: border-box; padding: 0px 5px;">53</li></ul>
图像压缩2
上图是一个
这个矩阵的特征值有3,对应了三种的模式,选择最大的三个奇异值进行SVD后的结果是:
代码如下:
<code class="language-matlab hljs has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">% 构建目标图像矩阵X</span>x1 = <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">ones</span>(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">25</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>);x2 = <span class="hljs-matrix" style="box-sizing: border-box;">[ones(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">5</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>);zeros(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">15</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>);ones(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">5</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>);]</span>;x3 = <span class="hljs-matrix" style="box-sizing: border-box;">[ones(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">5</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>);zeros(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>);ones(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">9</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>);zeros(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>);ones(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">5</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>);]</span>;X = <span class="hljs-matrix" style="box-sizing: border-box;">[repmat(x1,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>),repmat(x2,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3</span>),repmat(x3,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">5</span>),repmat(x2,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3</span>),repmat(x1,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>)]</span>;<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">% 查看矩阵的秩</span>r = rank(X);<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">% 进行SVD</span><span class="hljs-matrix" style="box-sizing: border-box;">[U,S,V]</span> = svd(X);Xnew = U(:,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>:r)*S(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>:r,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>:r)*V(:,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>:r)<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">';% 分析画图figure()subplot(1,2,1)imshow(X)title('</span>原始的图像<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">')subplot(1,2,2)imshow(Xnew)title('</span>选择秩数量<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3</span>的奇异值分解<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">')</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li></ul>
数据去噪
SVD总能找到标准化正交基后方差最大的维度,因此可以用它进行降维去噪等等。
下面分别用SVD
和linear regression
去拟合直线,结果如下,看来效果还不错哦。
代码如下:
<code class="language-matlab hljs has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">% 模拟线性数据,加上一定的高斯噪声</span>X = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">10</span>;Xb = <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">ones</span>(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">10</span>);Y = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>*X + random(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'Normal'</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">10</span>);<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">% 进行SVD分解并选择原输入空间的一个奇异值比较大的基,实现了数据降维</span>M = <span class="hljs-matrix" style="box-sizing: border-box;">[X;Y]</span>;<span class="hljs-matrix" style="box-sizing: border-box;">[U,S,V]</span> = svd(M);U1 = U(:,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>);u1 = U1(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>);u2 = U1(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>);k = (u2/u1);<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">% 进行线性回归</span>w = pinv(<span class="hljs-matrix" style="box-sizing: border-box;">[X;Xb]</span>)<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'*Y'</span>;<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">% 分别是SVD和线性回归拟合的数据</span>Y1 = k*X;Y2 = w(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>)*X+w(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>);<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">% 画图并比较</span>figure()<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">% 注释蛮方便的函数ezplot('y-2*x-1')</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">% refline(u2/u1,0) </span>hold onplot(X,Y,<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'ko'</span>,<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'LineWidth'</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>)plot(X,Y1,<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'r-'</span>,<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'LineWidth'</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>)plot(X,Y2,<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'b-'</span>,<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'LineWidth'</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>)legend(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'数据点'</span>,<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'SVD拟合'</span>,<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'线性回归拟合'</span>)</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li></ul>
LSA
LSA(Latent Semantic Analysis
也叫作Latent Semantic Indexing
)分析文档发现潜在的概念意义。
推荐系统
注意
USVT 分解和SΛS−1 分解等价当且仅当矩阵是半正定(对称矩阵,有大于等于0的特征值)。介绍下几种矩阵分解
A=USVT ,U,V 都是标准正交的,S是对角化的上面按照由大到小的顺序存放着奇异值。A=QHR ,Q 是标准正交的,R 对角线上是1,H 是对角化的上面存放着高度hi 。A=LDU ,L,U 的对角线上是1,主元存放在D 中。
A的行列式的绝对值等于奇异值的乘积,等于主元乘积的绝对值,等于高度
参考资料
- 关于SVD很棒的包含几何解释的资料
- 关于LSA的很棒的文章
- SVD分解及其应用
- SVD分解及其应用
- SVD分解算法及其应用
- SVD分解算法及其应用
- 矩阵奇异值分解(SVD)及其应用
- 矩阵奇异值分解(SVD)及其应用
- 矩阵奇异值分解(SVD)及其应用
- 奇异值分解(SVD)详解及其应用
- 矩阵奇异值分解(SVD)及其应用
- 奇异值分解(SVD)详解及其应用
- 矩阵奇异值分解(SVD)及其应用
- 强大的矩阵奇异值分解(SVD)及其应用
- 矩阵的奇异值分解(SVD)及其应用
- 矩阵的奇异值分解(SVD)及其应用
- 强大的矩阵奇异值分解(SVD)及其应用
- 强大的矩阵奇异值分解(SVD)及其应用
- 强大的矩阵奇异值分解(SVD)及其应用
- 强大的矩阵奇异值分解(SVD)及其应用
- 费解的c++
- 事件函数的执行顺序
- hdu5887Herbs Gathering【大数据01背包:搜索后缀+剪枝】
- Android开发之Intent.Action
- iOS开发笔记14:微博/微信登录与分享、微信/支付宝支付
- SVD分解及其应用
- C/C++常用头文件及函数汇总
- Copy List with Random Pointer -- LeetCode
- 陈皓:什么是工程师文化?
- iOS开发- 关于Block的几种应用
- 多个div彼此包含时,小的div内容过多,会出现大的content_div装不下小的item_div,请问此时怎么装下呢?
- C# socket主动给指定客户端发送数据的方法
- TextView属性大全
- 解决android6.0系统无法读写SD的问题