奇异值分解SVD

矩阵分解在机器学习领域有着广泛应用,是降维相关算法的基本组成部分。常见的矩阵分解方式有以下两种

1. 特征分解Eigendecomposition, 也叫作谱分解Spectral decomposition

2. 奇异值分解Singular Value decompositon

特征分解建立在特征值和特征向量的基础上,适合行列数目相等的方阵,其分解的结果如下

将一个方阵A, 拆分成3个矩阵的乘积,其中Q是矩阵A的特征向量构成的矩阵,∧是对角线为特征值的方阵,最后一个为Q的逆矩阵。下面通过numpy来验证下特征分解的过程

>>> import numpy as np
>>> A = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 原始方阵A
>>> A
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
>>> eigenvalues, eigenvectors = np.linalg.eig(A)
# 特征值
>>> eigenvalues
array([ 1.61168440e+01, -1.11684397e+00, -1.30367773e-15])
# 特征向量
>>> eigenvectors
array([[-0.23197069, -0.78583024, 0.40824829],
       [-0.52532209, -0.08675134, -0.81649658],
       [-0.8186735 , 0.61232756, 0.40824829]])
# 对角线为特征值的矩阵
>>> np.diag(eigenvalues)
array([[ 1.61168440e+01, 0.00000000e+00, 0.00000000e+00],
       [ 0.00000000e+00, -1.11684397e+00, 0.00000000e+00],
       [ 0.00000000e+00, 0.00000000e+00, -1.30367773e-15]])
# 特征向量矩阵的逆矩阵
>>> np.linalg.inv(eigenvectors)
array([[-0.48295226, -0.59340999, -0.70386772],
       [-0.91788599, -0.24901003, 0.41986593],
       [ 0.40824829, -0.81649658, 0.40824829]])
# 三个矩阵的乘积是原始方阵A
>>> eigenvectors.dot(np.diag(eigenvalues)).dot(np.linalg.inv(eigenvectors))
array([[1., 2., 3.],
       [4., 5., 6.],
       [7., 8., 9.]])
特征分解求解方便,但是只适用于方阵。当矩阵的行数和列数不相等时,就只能采用奇异值分解了。SVD也是同样将矩阵拆分成3个子矩阵的乘积,图示如下

对于m行n列的矩阵A, 通过SVD分解之后,拆分成了3个子矩阵,其中U矩阵为m行m列的方阵,V为n行n列的方阵,∑为只有对角线有值的矩阵,其中的值称之为奇异值。

看一个维基百科的例子,原始矩阵如下

奇异值分解的结果如下

对于矩阵U和V而言,其乘以对应的转置矩阵,都会得到一个单位矩阵,这样的矩阵称之为酉矩阵

在奇异值分解中,矩阵的奇异值是按照从大到小的顺序排列的,而且减少的特别快,经常前10%的奇异值就占据了全部奇异值99%以上的比例。基于这个性质,我们可以只提取前几个奇异值及其对应的矩阵来近似的描述原来的矩阵,图示如下

这个性质和PCA算法完美契合,所以在scikit-learn的PCA求解中,就是通过SVD分解来求取最大的K个特征。

·end·
(0)

相关推荐

  • 机器学习数学基础:从奇异值分解 SVD 看 PCA 的主成分

    今天我们来看一个在数据分析和机器学习领域中常用的降维方法,即主成分分析(PCA).它是探索性数据分析(EDA)和机器学习算法对数据的基本处理方法. 1引言 首先,我们来看一下机器学习中数据的表示形式. ...

  • 矩阵与矩阵乘积简介

    向量是存储和操作数据的一种有用的方法,可以用箭头或数字数组来表示它们.然而,创建更复杂的数据结构是有帮助的,这正是需要引入矩阵的地方. 介绍 矩阵是正方形或矩形数组,包含两个维度:行和列,我们可以把它 ...

  • (9条消息) Backtrader量化平台教程(四)SSA策略实际案例

    AD:(本人录制的backtrader视频课程,大家多多支持哦~ https://edu.csdn.net/course/detail/9040) 无意中发现了一个巨牛的人工智能教程,忍不住分享一下给 ...

  • 矩阵相乘

    import numpy as np arr1 = np.array(((1,4),(2,5),(3,2))) arr2 = np.array((3,4)) print('第一个矩阵:\n',arr1 ...

  • 奇异值分解(SVD)原理总结

    前言 奇异值分解(SVD)在降维,数据压缩,推荐系统等有广泛的应用,任何矩阵都可以进行奇异值分解,本文通过正交变换不改变基向量间的夹角循序渐进的推导SVD算法,以及用协方差含义去理解行降维和列降维,最 ...

  • 通俗易懂的讲解奇异值分解(SVD)和主成分分析(PCA)

    图片来自Unsplash上的Dave 0.本教程包含以下内容 特征分解 对称矩阵的特征分解 奇异值分解(The Singular Value Decomposition,SVD) 主成分分析(Prin ...

  • R语言矩阵特征值分解(谱分解)和奇异值分解(SVD)特征向量分析有价证券数据

    原文链接:http://tecdat.cn/?p=23973 R语言是一门非常方便的数据分析语言,它内置了许多处理矩阵的方法. 作为数据分析的一部分,我们要在有价证券矩阵的操作上做一些工作,只需几行代 ...

  • 罗马尼亚PSL狙击步枪,这不是SVD,这是个大AK

    在之前介绍苏联德拉贡诺夫SVD狙击步枪的时候,有多位读者老爷提到罗马尼亚的PSL狙击步枪,该枪外观与SVD很相似,但内部结构差异较大,是一个放大的AK步枪.今天彩云就来说一说罗马尼亚PSL狙击步枪. ...

  • 真正理解SVD直观的核心理念

    今天,奇异值分解已经通过许多科学分支传播,特别是心理学和社会学.气候和大气科学以及天文学.它在机器学习以及描述性和预测性统计中也非常有用. 历史 奇异值分解技术(简称SVD)具有长期且有些令人惊讶的历 ...

  • 推荐系统与协同过滤、奇异值分解

    昨天我从Youtube上把PyCon2018和PyData2018两个会议对自己比较有用的视频下载下来,昨天分享的<使用pandas做更好的数据科学>来自PyData2018.受到该演讲者 ...

  • 一文让你通俗理解奇异值分解

    本文转自3D视觉工坊 特征值和奇异值在大部分人的印象中,往往是停留在纯粹的数学计算中.而且线性代数或者矩阵论里面,也很少讲任何跟特征值与奇异值有关的应用背景. 奇异值分解是一个有着很明显的物理意义的一 ...

  • 【Hello NLP】CS224n学习笔记[3]:共现矩阵、SVD与GloVe词向量

    相比于计算机视觉,NLP可能看起来没有那么有趣,这里没有酷炫的图像识别.AI作画.自动驾驶,我们要面对的,几乎都是枯燥的文本.语言.文字.但是,对于人工智能的征途来说,NLP才是皇冠上的那颗珍珠,它美 ...