分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!
@author:wepon
@blog:
奇異值分解(singular value decomposition),簡稱svd,線性代數中矩陣分解的方法。假如有乙個矩陣a,對它進行奇異值分解,可以得到三個矩陣:
這三個矩陣的大小:
矩陣sigma(即上圖u和v中間的矩陣)除了對角元素不為0,其他元素都為0,並且對角元素是從大到小排列的,前面的元素比較大,後面的很多元素接近0。這些對角元素就是奇異值。
sigma中有n個奇異值,但是由於排在後面的很多接近0,所以我們可以僅保留比較大的r個奇異值:
實際應用中,我們僅需保留著三個比較小的矩陣,就能表示a,不僅節省儲存量,在計算的時候更是減少了計算量。svd在資訊檢索(隱性語義索引)、影象壓縮、推薦系統、金融等領域都有應用。
numpy中的linalg已經實現了svd,可以直接呼叫
>>> a=mat([[1,2,3],[4,5,6]])>>>
from numpy import linalg as la>>> u,sigma,vt=la.svd(a)>>> umatrix([[-0.3863177 , -0.92236578], [-0.92236578, 0.3863177 ]])>>> sigmaarray([ 9.508032 , 0.77286964])>>> vtmatrix([[-0.42866713, -0.56630692, -0.7039467 ], [ 0.80596391, 0.11238241, -0.58119908], [ 0.40824829, -0.81649658, 0.40824829]])
有一點需要注意,sigma本來應該跟a矩陣的大小2*3一樣,但linalg.svd()只返回了乙個行向量的sigma,並且只有2個奇異值(本來應該有3個),這是因為第三個奇異值為0,捨棄掉了。之所以這樣做,是因為當a是非常大的矩陣時,只返回奇異值可以節省很大的儲存空間。當然,如果我們要重構a,就必須先將sigma轉化為矩陣。
給我老師的人工智慧教程打call!
簡化資料 奇異值分解 SVD
author wepon blog 奇異值分解 singular value decomposition 簡稱svd,線性代數中矩陣分解的方法。假如有乙個矩陣a,對它進行奇異值分解,可以得到三個矩陣 這三個矩陣的大小 矩陣sigma 即上圖u和v中間的矩陣 除了對角元素不為0,其他元素都為0,並且對...
奇異值分解 SVD
最近不小心接觸到了svd,然後認真看下去之後發現這東西真的挺強大的,把乙個推薦問題轉化為純數學矩陣問題,看了一些部落格,把乙個寫個比較具體的博文引入進來,給自己看的,所以把覺得沒必要的就去掉了,博文下面附原始部落格位址。一 基礎知識 1.矩陣的秩 矩陣的秩是矩陣中線性無關的行或列的個數 2.對角矩陣...
SVD奇異值分解
原文出處 今天我們來講講奇異值分解和它的一些有意思的應用。奇異值分解是乙個非常,非常,非常大的話題,它的英文是 singular value decomposition,一般簡稱為 svd。下面先給出它大概的意思 對於任意乙個 m n 的矩陣 m 不妨假設 m n 它可以被分解為 m udv t 其...