怎么做加盟美容院网站完美代码网站
怎么做加盟美容院网站,完美代码网站,关键一招,简历电子模版免费下载注#xff1a; 在《SVD(异值分解)小结 》中分享了SVD原理#xff0c;但其中只是利用了numpy.linalg.svd函数应用了它#xff0c;并没有提到如何自己编写代码实现它#xff0c;在这里#xff0c;我再分享一下如何自已写一个SVD函数。但是这里会利用到SVD的原理#xff0c;…注 在《SVD(异值分解)小结 》中分享了SVD原理但其中只是利用了numpy.linalg.svd函数应用了它并没有提到如何自己编写代码实现它在这里我再分享一下如何自已写一个SVD函数。但是这里会利用到SVD的原理如何大家还不明白它的原理可以去看看《SVD(异值分解)小结 》或者自行百度/google。1、SVD算法实现1.1 SVD原理简单回顾有一个\(m \times n\)的实数矩阵\(A\)我们可以将它分解成如下的形式\[A U\Sigma V^T\tag{1-1}\]其中\(U\)和\(V\)均为单位正交阵即有\(UU^TI\)和\(VV^TI\)\(U\)称为左奇异矩阵\(V\)称为右奇异矩阵\(\Sigma\)仅在主对角线上有值我们称它为奇异值其它元素均为0。上面矩阵的维度分别为\(U \in \mathbf{R}^{m\times m},\ \Sigma \in \mathbf{R}^{m\times n}\),\(\ V \in \mathbf{R}^{n\times n}\)。正常求上面的\(U,V,\Sigma\)不便于求我们可以利用如下性质\[AA^TU\Sigma V^TV\Sigma^TU^TU\Sigma \Sigma^TU^T\tag{1-2}\]\[A^TAV\Sigma^TU^TU\Sigma V^TV\Sigma^T\Sigma V^T\tag{1-3}\]1.2 SVD算法据1.1小节对式(1-3)和式(1-4)做特征值分解即可得到奇异值分解的结果。但是样分开求存在一定的问题由于做特征值分解的时候特征向量的正负号并不影响结果比如我们利用式(1-3)和(1-4)做特征值分解\[AA^T\mathbf{u}_i \sigma_i \mathbf{u}_i\quad \text{or} \quad AA^T(-\mathbf{u}_i) \sigma_i (-\mathbf{u}_i)\\A^TA\mathbf{v}_i \sigma_i \mathbf{v}_i\quad \text{or} \quad A^TA(-\mathbf{v}_i) \sigma_i (-\mathbf{v}_i)\]如果在计算过程取取上面的\(\mathbf{u}_i\)组成左奇异矩阵\(U\)取\(-\mathbf{v}_i\)组成右奇异矩阵\(V\)此时\(A\ne U\Sigma V^T\)。因此求\(\mathbf{v}_i\)时要根据\(\mathbf{u}_i\)来求这样才能保证\(A U\Sigma V^T\)。因此我们可以得出如下1.1计算SVD的算法。它主要是先做特性值分解再根据特征值分解得到的左奇异矩阵\(U\)间接地求出部分的右奇异矩阵\(V\in \mathbf{R}^{m\times n}\)。算法1.1SVD输入样本数据输出左奇异矩阵奇异值矩阵右奇异矩阵计算特征值 特征值分解\(AA^T\)其中\(A \in \mathbf{R}^{m\times n}\)为原始样本数据\[AA^TU\Sigma \Sigma^TU^T\]得到左奇异矩阵\(U \in \mathbf{R}^{m \times m}\)和奇异值矩阵\(\Sigma \in \mathbf{R}^{m \times m}\)间接求部分右奇异矩阵 求\(V \in \mathbf{R}^{m \times n}\)利用\(AU\SigmaV\)可得\[V (U\Sigma)^{-1}A (\Sigma)^{-1}U^TA\tag{1-4}\]返回\(U,\ \Sigma,\ V\)分别为左奇异矩阵奇异值矩阵右奇异矩阵。注 这里得到的\(\Sigma\)和\(V\)与式(1-2)所得到的\(\Sigma,\ V\)有区别它们的维度不一样。\(\Sigma\)是只取了前\(m\)个奇异值形成的对角方阵即\(\Sigma \in \mathbf{R}^{m \times m}\)\(V\)不是一个方阵它只取了\(V \in \mathbf{R}^{m \times n}\)的前\(m\)行(假设\(m n\))即有\(V V(:m,\cdot)\)。这样一来我们同样有类似式(1-1)的数学关系成立即\[A U\Sigma (V)^T\tag{1-5}\]我们可以利用此关系重建原始数据。2、SVD的Python实现以下代码的运行环境为python3.6jupyter5.4。2.1 SVD实现过程读取数据这里面的数据集大家随便找一个数据就好如果有需要我的数据集可以下在面留言。import numpy as npimport pandas as pdfrom scipy.io import loadmat# 读取数据使用自己数据集的路径。train_data_mat loadmat(../data/train_data2.mat)train_data train_data_mat[Data]print(train_data.shape)特征值分解# 数据必需先转为浮点型否则在计算的过程中会溢出导致结果不准确train_dataFloat train_data / 255.0# 计算特征值和特征向量eval_sigma1,evec_u np.linalg.eigh(train_dataFloat.dot(train_dataFloat.T))计算右奇异矩阵#降序排列后逆序输出eval1_sort_idx np.argsort(eval_sigma1)[::-1]# 将特征值对应的特征向量也对应排好序eval_sigma1 np.sort(eval_sigma1)[::-1]evec_u evec_u[:,eval1_sort_idx]# 计算奇异值矩阵的逆eval_sigma1 np.sqrt(eval_sigma1)eval_sigma1_inv np.linalg.inv(np.diag(eval_sigma1))# 计算右奇异矩阵evec_part_v eval_sigma1_inv.dot((evec_u.T).dot(train_dataFloat))上面的计算出的evec_u, eval_sigma1, evec_part_v分别为左奇异矩阵所有奇异值右奇异矩阵。2.2 SVD降维后重建数据取不同个数的奇异值重建图片计算出均方误差如图2-1所示。从图中可以看出随着奇异值的增加均方误差(MSE)在减小且奇异值和的比率正快速上升在100维时奇异值占总和的53%。图2-1 奇值分解维度和均方误差变化图注 均方误差MSE有如下计算公式\[\text{MSE} \frac{1}{n}\left((y_1-y_1)^2(y_2-y_2)^2\cdots(y_n-y_n)^2\right)\]我们平时听到的\(\text{RMSE}\sqrt{\text{MSE}}\)。将图和10、50、100维的图进行比较如图3-2所示。在直观上100维时能保留较多的信息此时能从图片中看出车辆形状。图2-2 原图与降维重建后的图比较总结SVD与特征值分解(EVD)非常类似应该说EVD只是SVD的一种特殊怀况。我们可以通这它们在实际的应用中返过来理解特征值/奇异值的含义它代表着数据的信息量它的值越大信息越多。最近作业是真的多呀冒着生命危险来分享希望能给大家带来帮助By © 2017 likecs 版权所有.粤ICP备12038626号-2Powered By WordPress . Theme by Luju
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/87619.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!