html5 服装网站,做暖暖视频免费观看免费网站,wordpress 付费主题 时间,关键词网站建设摘要#xff1a; 特征分解#xff0c;奇异值分解#xff0c;Moore-Penrose广义逆矩阵分解特征向量和特征值我们在《线性代数》课学过方阵的特征向量和特征值。定义#xff1a;设A∈FnnA∈Fnn是n阶方阵。如果存在非零向量X∈Fn1X∈Fn1使AXλXAXλX对某个常数λ∈Fλ∈F成立 特征分解奇异值分解Moore-Penrose广义逆
矩阵分解特征向量和特征值我们在《线性代数》课学过方阵的特征向量和特征值。定义设A∈Fn×nA∈Fn×n是n阶方阵。如果存在非零向量X∈Fn×1X∈Fn×1使AXλXAXλX对某个常数λ∈Fλ∈F成立则称λλ是A的特征值(eigenvalue)X是属于特征值λλ的特征向量。设σσ是数域F上向量空间V上的线性变换如果某个非零向量u∈Vu∈V被σσ映射到自己的常数倍σ(u)λuσ(u)λu则称常数λ∈Fλ∈F是σσ的特征值向量u是属于特征值λλ的特征向量。又找λλ又找A确实不是一件容易事。好在我们可以把这事儿交给Tensorflow去解决。我们可以用tf.self_adjoint_eigvals来求特征值相当于MATLAB的eig函数只不过名字长了点。例 A1 tf.constant([[3,2,1],[0,-1,-2],[0,0,3]],dtypetf.float64)sess.run(A1)
array([[ 3., 2., 1.],[ 0., -1., -2.],[ 0., 0., 3.]])sess.run(tf.self_adjoint_eigvals(A1))
array([-1., 3., 3.])附MATLAB例: A1 [3,2,1;0,-1,-2;0,0,3]
A1 3 2 10 -1 -20 0 3 eig(A1)
ans 3-13也就是说A1矩阵有3个特征值-1,3,3。特征分解我们把用self_adjoint_eigvals求出来的向量转换成对角矩阵 sess.run(tf.diag(tf.self_adjoint_eigvals(A1)))
array([[-1., 0., 0.],[ 0., 3., 0.],[ 0., 0., 3.]])同样我们把每个特征向量组成一个矩阵假设为V. 这样我们可以得到一个公式AVdiag(λ)V−1AVdiag(λ)V−1按照上面公式方法对矩阵A所做的操作叫做A的特征分解(eigen decomposition)不是每一个矩阵都可以分解成特征值和特征向量。在某些情况下特征分解存在但是值是复数而不是实数。幸运的是机器学习中遇到的方阵基本都可以分解成AQΛQTAQΛQT,其中Q是特征向量构成的正交矩阵ΛΛ是对角矩阵。奇异值分解对于多数方阵我们可以进行特征值分解。如果对于非方阵该怎么办呢答案是我们有类似的奇异向量(Singular vector)和奇异值(singular value). 通过奇异向量和奇异值我们可以把非方阵进行奇异值分解singular value decomposition简称svd. SVD将矩阵分解为三个矩阵的乘积AUDVTAUDVT。其中U和V都定义为正交矩阵。D是对角矩阵虽然不一定是方阵。如果A是一个mn的矩阵那么U是一个mm的矩阵V是一个nn的矩阵D与A一样是mn的矩阵。我们可以通过tf.svd函数来做奇异值分解例 As tf.constant( [[1,2,3],[4,5,6]], dtypetf.float64)sess.run(As)
array([[1., 2., 3.],[4., 5., 6.]])sess.run(tf.svd(As, full_matricesTrue))
(array([9.508032 , 0.77286964]), array([[-0.3863177 , -0.92236578],[-0.92236578, 0.3863177 ]]), array([[-0.42866713, 0.80596391, 0.40824829],[-0.56630692, 0.11238241, -0.81649658],[-0.7039467 , -0.58119908, 0.40824829]]))
As矩阵是23的矩阵。所以U是22的而V是3*3的。第1个值是奇异值[9.508032 , 0.77286964]它是D的对角线上值其它位置为0.D的完整值为array([[9.508032 , 0. , 0. ],[0. , 0.77286964, 0. ]])三个矩阵的完整值为#U
array([[-0.3863177 , -0.92236578],[-0.92236578, 0.3863177 ]])
#D
array([[9.508032 , 0. , 0. ],[0. , 0.77286964, 0. ]])
#V
array([[-0.42866713, 0.80596391, 0.40824829],[-0.56630692, 0.11238241, -0.81649658],[-0.7039467 , -0.58119908, 0.40824829]])我们来验算一下这个奇异值分解是不是正确的别忘了V是要转置的 sess.run(U D tf.transpose(V))
array([[0.99999997, 1.99999999, 2.99999997],[3.99999997, 5.00000001, 5.99999996]])虽然是有点浮点计算误差但是结果还确实是我们分解前的那个。关于计算误差的问题在机器学习中也自然是重要问题后面会讨论。Moore-Penrose广义逆铺垫了这么多其实我们是在为解线性方程组奋斗。我们在第一节Tensorflow的线性回归例子还有神经网络的例子都看到求解线性方程组是重要的运算。形如Axb的线性方程组如果A有逆矩阵就好办了两边分别右乘A逆就可以解出方程组。但是问题是机器学习中有很多方程是欠定的(underdetermined)。这时候我们就需要一种类似于逆矩阵的工具 - Moore-Penrose广义逆(pseudoinverse)。Moore-Penrose广义逆定义如下Alimα→0(ATAαI)−1ATAlimα→0(ATAαI)−1AT这个定义在计算时是没法使用的我们使用另一个公式来算AVDUTAVDUT这个公式一看太熟悉了就是刚才我们学习的奇异值分解嘛。其中DDD的广义逆的计算方法是所有非0值取倒数然后矩阵转置。对于一个AXB方程组的最小二乘法解一般来讲不是唯一的。通常把它们中2-范数最小的一个称为极小最小二乘解也叫最佳逼近解。可以证明AXB必有唯一的极小最小二乘解这个解就是XABXAB广义逆简史首先复习一下逆阵的概念如果一个矩阵有逆阵条件为必须是方阵行列式不能为0美国数学家Moore于1920年逆矩阵的概念推广到任意矩阵上使用的方法是正交投影算子来定义的。1955年英国数学家Penrose用下面的方程组来定义广义逆AGAA,GAGG,(AG)HAG(GA)HGAAGAA,GAGG,(AG)HAG(GA)HGA其中H这个符号代表矩阵共轭的转置对于实数就相当于T。不久之后瑞典大地测量学家Arne Bjerhammer证明了Moore广义逆与Penrose广义逆的等价性。所以把它定义为Moore-Penrose广义逆。除了AA之外还有A−A−广义逆等。作者lusing原文链接本文为云栖社区原创内容未经允许不得转载。