特征值分解与奇异值分解(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 ...
 
随机推荐
- Hash(哈希)
			
一.基本概念 Hash,一般翻译做"散列",也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的 ...
 - ASP.NET中把xml转为dataset与xml字符串转为dataset及dataset转为xml的代码
			
转自:http://www.cnblogs.com/_zjl/archive/2011/04/08/2009087.html XmlDatasetConvert.csusing System;usin ...
 - JVM值内存垃圾回收监控之jstat
			
如何判断JVM垃圾回收是否正常?一般的top指令基本上满足不了这样的需求,因为top主要监控的是总体的系统资源,很难定位到java应用程序. Jstat是JDK自带的一个轻量级小工具.全称“Java ...
 - 面向连接的Socket Server的简单实现(简明易懂)
			
一.基本原理 有时候我们需要实现一个公共的模块,需要对多个其他的模块提供服务,最常用的方式就是实现一个Socket Server,接受客户的请求,并返回给客户结果. 这经常涉及到如果管理多个连接及如何 ...
 - 沙盒密探——可实现的js缓存攻击
			
我们描述了第一次完全运行在浏览器端的微结构单通道攻击.与其他参和这种类型的相反,这种攻击不再需要攻击者在肉鸡上安装任何软件,为了让攻击更容易,肉鸡仅仅需要浏览哪些攻击者控制的不被信任的网页内容.这会让 ...
 - codeforces round367 div2.C  (DP)
			
题目链接:http://codeforces.com/contest/706/problem/C #include<bits/stdc++.h> using namespace std; ...
 - Android RecyclerView(瀑布流)水平/垂直方向分割线
			
 Android RecyclerView(瀑布流)水平/垂直方向分割线 Android RecyclerView不像过去的ListView那样随意的设置水平方向的分割线,如果要实现Recycle ...
 - Android开发指南-框架主题-安全和许可
			
概述:Android操作系统是一个安全便捷的Linux系统,遵循Linux系统机制,允许多进程.为了进程间的数据共享和交互共用,设计"权限"这个名词,声明权限代表可使用此权限,未声 ...
 - 17、SQL基础整理(事务)
			
事务 事务==流程控制 确保流程只能成功或者失败,若出现错误会自动回到原点 例: begin tran insert into student values('111','王五','男','1999- ...
 - 机器学习技法-随机森林(Random Forest)
			
课程地址:https://class.coursera.org/ntumltwo-002/lecture 重要!重要!重要~ 一.随机森林(RF) 1.RF介绍 RF通过Bagging的方式将许多个C ...