特征值分解与奇异值分解(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 ...
随机推荐
- poj2429 大数分解+dfs
//Accepted 172 KB 172 ms //该程序为随机性算法,运行时间不定 #include <cstdio> #include <cstring> #includ ...
- (转)mysql账号权限密码设置方法
原文:http://www.greensoftcode.net/techntxt/2013410134247568042483 mysql账号权限密码设置方法 我的mysql安装在c:\mysql 一 ...
- 【Zhejiang University PATest】02-1. Reversing Linked List
Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elem ...
- context理解
官方文档的解释是:Context提供了关于应用环境全局信息的接口.它是一个抽象类,它的执行被Android系统所提供.它允许获取以应用为特征的资源和类型.同时启动应用级的操作,如启动Activity, ...
- Redis - list类型操作
list类型操作 设置操作:lpush: lpush key value 在list左侧插入value rpush: rpush key value ...
- 【转】使用Xcode 6将你的项目本地化
原文转自:http://www.cocoachina.com/ios/20141004/9827.html iOS和OSX支持40种语言的本地化,Xcode无疑为这一过程提供了强有力的支持.苹果将这一 ...
- navicat MySQL 只有1000条记录
/*************************************************************************** * navicat MySQL 只有1000条 ...
- 不要在类的函数中使用static字段
昨天在做存储服务的压力测试,后台是采用多线程根据玩家唯一标识做线程划分的,在测试的过程中发现,进行存储的时候,会发生玩家数据错乱的情况. 一开始怀疑是上层逻辑在处理数据的时候发生了错乱,导致保存的时候 ...
- 用UltralSO安装CentOS 和 Ubuntu
UltralSO是一个U盘制作工具,这几天用UltralSO安装了CentOS和Ubuntu 制作这两个U盘启动程序的区别是,CentOS安装完后,需要把.iso文件拷贝到U盘中,而且CentOS文件 ...
- CentOS下启动Tomcat
http://tianlihu.iteye.com/blog/2010028 1. Tomcat的部署包存放的路径 /var/lib/tomcat6/webapps/ 2. Tomcat的配置文件路 ...