特征值分解与奇异值分解(SVD)
1.使用QR分解获取特征值和特征向量
将矩阵A进行QR分解,得到正规正交矩阵Q与上三角形矩阵R。由上可知Ak为相似矩阵,当k增加时,Ak收敛到上三角矩阵,特征值为对角项。
2.奇异值分解(SVD)
其中U是m×m阶酉矩阵;Σ是半正定m×n阶对角矩阵;而V*,即V的共轭转置,是n×n阶酉矩阵。
将矩阵A乘它的转置,得到的方阵可用于求特征向量v,进而求出奇异值σ和左奇异向量u。
- #coding:utf8
- import numpy as np
- np.set_printoptions(precision=4, suppress=True)
- def householder_reflection(A):
- """Householder变换"""
- (r, c) = np.shape(A)
- Q = np.identity(r)
- R = np.copy(A)
- for cnt in range(r - 1):
- x = R[cnt:, cnt]
- e = np.zeros_like(x)
- e[0] = np.linalg.norm(x)
- u = x - e
- v = u / np.linalg.norm(u)
- Q_cnt = np.identity(r)
- Q_cnt[cnt:, cnt:] -= 2.0 * np.outer(v, v)
- R = np.dot(Q_cnt, R) # R=H(n-1)*...*H(2)*H(1)*A
- Q = np.dot(Q, Q_cnt) # Q=H(n-1)*...*H(2)*H(1) H为自逆矩阵
- return (Q, R)
- def eig(A, epsilon=1e-10):
- '''采用QR分解法计算特征值和特征向量 '''
- (q,r_)=householder_reflection(A)
- h = np.identity(A.shape[0])
- for i in range(50):
- B=np.dot(r_,q)
- h=h.dot(q)
- (q,r)=gram_schmidt(B)
- if abs(r.trace()-r_.trace())< epsilon:
- print("Converged in {} iterations!".format(i))
- break
- r_=r
- return r,h
- def svd(A):
- '''奇异值分解'''
- n, m = A.shape
- svd_ = []
- k = min(n, m)
- v_=eig(np.dot(A.T, A))[1] #np.linalg.eig(np.dot(A.T, A))[1]
- for i in range(k):
- v=v_.T[i]
- u_ = np.dot(A, v)
- s = np.linalg.norm(u_)
- u = u_ / s
- svd_.append((s, u, v))
- ss, us, vs = [np.array(x) for x in zip(*svd_)]
- return us.T,ss, vs
- if __name__ == "__main__":
- mat = np.array([
- [2, 5, 3],
- [1, 2, 1],
- [4, 1, 1],
- [3, 5, 2],
- [5, 3, 1],
- [4, 5, 5],
- [2, 4, 2],
- [2, 2, 5],
- ], dtype='float64')
- u,s,v = svd(mat)
- print u
- print s
- print v
- print np.dot(np.dot(u,np.diag(s)),v)
特征值分解与奇异值分解(SVD)的更多相关文章
- 数学基础系列(六)----特征值分解和奇异值分解(SVD)
一.介绍 特征值和奇异值在大部分人的印象中,往往是停留在纯粹的数学计算中.而且线性代数或者矩阵论里面,也很少讲任何跟特征值与奇异值有关的应用背景. 奇异值分解是一个有着很明显的物理意义的一种方法,它可 ...
- 特征值分解,奇异值分解(SVD)
特征值分解和奇异值分解在机器学习领域都是属于满地可见的方法.两者有着很紧密的关系,我在接下来会谈到,特征值分解和奇异值分解的目的都是一样,就是提取出一个矩阵最重要的特征. 1. 特征值: 如果说一个向 ...
- matlab特征值分解和奇异值分解
特征值分解 函数 eig 格式 d = eig(A) %求矩阵A的特征值d,以向量形式存放d. d = eig(A,B) %A.B为方阵,求广义特征值d,以向量形式存放d. ...
- 讲一下numpy的矩阵特征值分解与奇异值分解
1.特征值分解 主要还是调包: from numpy.linalg import eig 特征值分解: A = P*B*PT 当然也可以写成 A = QT*B*Q 其中B为对角元为A的特征值的对 ...
- 强大的矩阵奇异值分解(SVD)及其应用
版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系wheeleast@gm ...
- 机器学习中的数学-矩阵奇异值分解(SVD)及其应用
转自:http://www.cnblogs.com/LeftNotEasy/archive/2011/01/19/svd-and-applications.html 版权声明: 本文由LeftNotE ...
- 机器学习中的数学(5)-强大的矩阵奇异值分解(SVD)及其应用
版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系wheeleast@gm ...
- 【ML】从特征分解,奇异值分解到主成分分析
1.理解特征值,特征向量 一个对角阵\(A\),用它做变换时,自然坐标系的坐标轴不会发生旋转变化,而只会发生伸缩,且伸缩的比例就是\(A\)中对角线对应的数值大小. 对于普通矩阵\(A\)来说,是不是 ...
- [机器学习笔记]奇异值分解SVD简介及其在推荐系统中的简单应用
本文先从几何意义上对奇异值分解SVD进行简单介绍,然后分析了特征值分解与奇异值分解的区别与联系,最后用python实现将SVD应用于推荐系统. 1.SVD详解 SVD(singular value d ...
随机推荐
- Android布局— — —表格布局
表格布局 以表格的形式来显示界面中的控件,表格的每一行为一个TableRow,每当一个控件添加到TableRow中,就生成一个单元格. 语法格式: <TableLayout xmlns:andr ...
- 迪士尼黑科技:爬墙机器人 VertiGo
12 月 30 日,迪士尼研发出的一款爬墙机器人曝光了一段有趣的视频.从视频里可看出这个机器人碰到墙壁时迅速地作出反应爬了上去. 据了解,这个爬墙机器人名叫 VertiGo,由迪士尼研究中心和苏黎世联 ...
- C++ Frequently asking question
http://stackoverflow.com/questions/14295884/c-new-empty-project-how-to-create-it-add-main-method-and ...
- java语法学习问题总结
No.1:EnumTest No.2:Addition 在此程序中,学习了将文本框调用出来,文本框输入的数据都是String类型,所以用于计算时需要先进行转型,然后计算. No.3:TestDoubl ...
- Ubuntu 重新设置网络
sudo service network-manager stop sudo rm /var/lib/NetworkManager/NetworkManager.state sudo service ...
- iOS应用中通过设置VOIP模式实现休眠状态下socket的长连接
如果你的应用程序需要在设备休眠的时候还能够收到服务器端发送的消息,那我们就可以借助VOIP的模式来实现这一需求.但是如果的应用程序并不是正真的VOIP应用,那当你把你的应用提交到AppStore的时候 ...
- codeforces Educational Codeforces Round 16-E(DP)
题目链接:http://codeforces.com/contest/710/problem/E 题意:开始文本为空,可以选择话费时间x输入或删除一个字符,也可以选择复制并粘贴一串字符(即长度变为两倍 ...
- 锋利的jQuery之事件
jQuery中的事件和动画 JavaScript和HTML之间的交互是通过用户和浏览器操作页面时引发的事件来处理的.当文档或者它的某些元素发生某些变化或操作时,浏览器会自动生成一个事件.例如:当浏览器 ...
- esayui-datagrid的使用
第一步:在页面上引入easyui的jQuery链接 <script src="../../Scripts/easyUI/jquery-1.7.2.min.js" type=& ...
- javascript js写特效日历
<!doctype html public "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...