日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Python机器学习笔记:奇异值分解(SVD)算法

發(fā)布時間:2023/12/4 综合教程 42 生活家
生活随笔 收集整理的這篇文章主要介紹了 Python机器学习笔记:奇异值分解(SVD)算法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

完整代碼及其數(shù)據(jù),請移步小編的GitHub

  傳送門:請點擊我

  如果點擊有誤:https://github.com/LeBron-Jian/MachineLearningNote

  奇異值分解(Singular Value Decomposition,后面簡稱 SVD)是在線性代數(shù)中一種重要的矩陣分解,它不光可用在降維算法中(例如PCA算法)的特征分解,還可以用于推薦系統(tǒng),以及自然語言處理等領(lǐng)域,在機器學(xué)習(xí),信號處理,統(tǒng)計學(xué)等領(lǐng)域中有重要應(yīng)用。

  比如之前的學(xué)習(xí)的PCA,掌握了SVD原理后再去看PCA是非常簡單的,因為我最近在整理學(xué)習(xí)線性代數(shù)基礎(chǔ),并溫習(xí)了一遍特征值與特征向量,所以這里同時也溫習(xí)一下SVD算法,如果想看我之前的PCA降維的文章,可以參考下面:

Python機器學(xué)習(xí)筆記:主成分分析(PCA)算法

Python機器學(xué)習(xí)筆記:使用scikit-learn工具進行PCA降維

  好了,話不多說,這里再對SVD算法做一個總結(jié)(這里總結(jié)主線是參考劉建平大佬和老師的網(wǎng)課視頻學(xué)習(xí),首先在這里提出感謝)

1,基變換與特征值分解

1.1 向量的表示與基變換

  首先看看向量,向量可以表示為(3, 2),實際上表示線性組合:

  基表示:(1, 0) 和 (0, 1) 叫做二維空間中的一組基。

  一組基就確定了對向量進行表示的空間,而向量的表示就是基于這組基進行坐標表示。選定的基不同,空間自然不同,那么向量表示的坐標自然也不同。一般情況下,我們會默認傳統(tǒng)的正交坐標系為標準的基選擇,但其實對傳統(tǒng)正交坐標系進行選擇,放縮或剪切變換后得到的依然是一個坐標系。

  基變換:數(shù)據(jù)與一個基做內(nèi)積運算,結(jié)果作為第一個新的坐標分量,然后與第二個基做內(nèi)積運算,結(jié)果作為第二個新坐標的分量。

  將一組基A下的坐標轉(zhuǎn)換成另一組集B下的坐標——核心思想就是將A中的基用B對應(yīng)的坐標系進行表示,將該向量在A下的坐標表示變換成關(guān)于基A的線性組合,進行代換即可。

  數(shù)據(jù)(3, 2)映射到基中坐標為:

1.2 特征值分解

  首先回歸下特征值和特征向量的定義,其定義如下:

  其中A是一個 n * n 的矩陣,x 是一個 n 維向量,則我們說λ 是矩陣A的一個特征值,而 x 是矩陣A的特征值 λ 所對應(yīng)的特征向量。

  求出特征值和特征向量有什么好處呢?就是我們可以將矩陣 A 特征分解。如果我們求出了矩陣 A 的 n 個特征值λ1 <= λ2 <= λn ,以及這 n 個特征值所對應(yīng)的特征向量 {W1, W2, ...Wn},如果這 n 個特征向量線性無關(guān),那么矩陣 A 就可以用下式的特征分解表示:

  其中 W 是這 n 個特征向量所長成的 n * n 維矩陣,而 Σ 為這個 n 個特征值為主對角線的 n * n 維矩陣。

  一般我們會把 W 的這 n 個特征向量標準化,即滿足 ||wi||2 = 1,或者說 wiTwi=1,此時 W 的 n 個特向量為標準正交基,滿足WTW = I,即 WT = W-1。

  這樣我們特征分解表達式可以寫成:

  注意到要進行特征分解,矩陣A必須為方陣。那么如果A不是方陣,即行和列不相同時,我們還可以對矩陣進行分解嗎?答案是可以,就是下面我們要學(xué)習(xí)的SVD算法。

2,特征分解和奇異值分解(SVD)的區(qū)別

  特征值分解和奇異值分解的目的都是一樣,就是提取出一個矩陣最重要的特征

  所有的矩陣都可以進行奇異值分解,但只有方陣才可以進行特征值分解。當(dāng)所給的矩陣是對稱的方陣,AT=A,二者的結(jié)果是相同的。也就是說對稱矩陣的特征值分解是所有奇異值分解的一個特例。但是二者還是存在一些小的差異,奇異值分解需要對奇異值進行從大到小的排序,而且全部是大于等于零。

  對于如上的奇異值分解公式,我們可以看到奇異值分解同時包含了旋轉(zhuǎn),縮放和投影三種作用,并且U和V都起到了對A進行旋轉(zhuǎn)的作用,而 Σ 起到了對 A 縮放的作用,特征值分解只有縮放的效果。

  在應(yīng)用上,奇異值分解主要用于數(shù)據(jù)矩陣,而特征值分解主要用于方型的相關(guān)矩陣。

3, 奇異值分解的定義

  特征值分解釋一個提取矩陣特征很不錯的方法,但是它只適用于方陣,而在現(xiàn)實的世界中,我們看到的大部分矩陣都不是方陣,比如說有M個學(xué)生,每個學(xué)生有N個成績,這樣就形成了一個M*N的矩陣就可能不是方陣了,我們怎么樣才能像描述特征值一樣描述這樣一般矩陣的重要特征呢?奇異值分解就是干這個事情,奇異值分解是一個能適用于任何的矩陣的一種分解的方法。

3.1 SVD的理論描述

  假設(shè) A 是一個 m*n 階矩陣,其中的元素全部屬于域 K,也就是實數(shù)域或復(fù)數(shù)域。如此則存在一個分解使得:

  其中 U 是 m*m 階酋矩陣,Σ 是半正定 m*n 階對角矩陣,而 V* 是V的共軛轉(zhuǎn)置,是 n*n 階酋矩陣,這樣的分解就稱作 M 的奇異值分解。Σ(是對角矩陣,但不一定是方陣) 對角線上的元素 Σi 即為 M 的奇異值。

  一般的 Σ 有如下形式:

  上述分解中會構(gòu)建出一個矩陣 Σ ,該矩陣只有對角元素,其他元素均為0,另一個慣例是,Σ 的對角元素是從大到小排列的。這些對角元素稱為奇異值。在科學(xué)和工程中,一直存在這個一個普遍事實:在某個奇異值的數(shù)目(r個)之后,其他奇異值都置為零,這就意味著數(shù)據(jù)集中僅有 r 個重要特征,其余的都是噪聲或冗余數(shù)據(jù)。

  從下圖可以形象的看出上面SVD的定義:

  那么我們?nèi)绾吻蟪鯯VD分解后的 U,Σ,V 這三個矩陣呢?

  如果我們將 A 的轉(zhuǎn)置和 A 做矩陣乘法,那么會得到 n*n 的一個方陣 ATA。既然 ATA 是方陣,那么我們就可以進行特征分解,得到的特征值和特征向量滿足下式:

  這樣我們就可以得到矩陣 ATA 的 n 個特征值和對應(yīng)的 n 個特征向量 v 了。將 ATA 的所有特征向量張成一個 n*n 的矩陣 V,就是我們SVD公式里面的V矩陣了。一般我們將 V 中的每個特征向量叫做 A 的右奇異向量。

  如果我們將 A 和 A 的轉(zhuǎn)置做矩陣乘法,那么會得到 m*m的一個方陣 AAT。 既然 AAT 是方陣,那么我們就可以進行特征分解,得到的特征值和特征向量滿足下面公式:

  這樣我們就可以得到矩陣AAT 的 m 個特征值和對應(yīng)的 m 個特征向量 u了。將 AAT 的所有特征張成一個 m*m 的矩陣 U,就是我們 SVD 公式里面的 U矩陣了。一般我們將 U 中的每個特征向量叫做 A 的左奇異向量。

  U 和 V 我們都求出來了,現(xiàn)在就剩下 奇異值矩陣 Σ 沒有求出了。

  由于 Σ 除了對角線上是奇異值其他位置都是0,所以我們只需要求出每個奇異值 σ 就可以了。

  我們注意到:

  這樣我們可以求出我們的每一個奇異值,進而求出奇異值矩陣 Σ。

  上面還有一個問題就是我們說 ATA 的特征向量組成的就是我們SVD中的 V矩陣,而 AAT的特征向量組成的就是我們 SVD中的 U矩陣,這有什么根據(jù)嗎?這個其實很容易證明,我們以V矩陣的證明為例:

  上式證明使用了:UTU = I, ΣTΣ = Σ2。可以看出 ATA 的特征向量組成的的確就是我們SVD中的 V 矩陣。類似的方法可以得到 AAT 的特征向量組成的就是我們 SVD中的 U 矩陣。

  進一步我們還可以看出我們的特征值矩陣等于奇異值矩陣的平方,也就是說特征值和奇異值滿足如下關(guān)系:

  這樣也就是說,我們可以不用上面推導(dǎo)的式子來計算奇異值,上式如下:

  我們可以直接通過求 ATA 的特征值取平方根來求奇異值。

注意1:通過ATA的特征值取平方根求解奇異值的注意點

  我們知道,正常求 U,V,Σ 不便求,所以,我們利用如下性質(zhì)(公式上面有提到,這里再復(fù)述一下):

  需要注意的是:這里的 ΣΣT 和 ΣTΣ 在矩陣的角度上來講,他們是不相等的,因為他們的維度不同 ΣΣT €Rm*m,而 ΣTΣ€Rn*n ,但是他們在主對角線的奇異值是相等的,即有:

  所以對于 ΣΣT 和 ΣTΣ 中的特征值開方,可以得到所有的奇異值。

注意2:酋矩陣的定義

  若n行n列的復(fù)數(shù)矩陣 U滿足:

  其中 In 為 n 階單位矩陣,UT 為 U的共軛轉(zhuǎn)置,則U為酋矩陣(即矩陣U為酋矩陣,當(dāng)且僅當(dāng)其共軛轉(zhuǎn)置UT 為其逆矩陣:U-1 = UT

3.2 SVD的幾何層面理解

  下面從幾何層面上去理解二維的SVD:對于任意的 2*2 矩陣,通過 SVD 可以將一個互相垂直的網(wǎng)絡(luò)(orthogonal grid)變換到另外一個互相垂直的網(wǎng)絡(luò)。

  我們可以通過向量的方式來描述這個事實:首先,選擇兩個互相正交的單位向量 v1 和 v2,向量 Mv1 和 Mv2 正交。

  u1 和 u2 分別表示 Mv1 和 Mv2 的單位向量,σ1*u1=Mv1 和 σ2*u2=Mv2,σ1 和 σ2分別表示這不同方向向量上的模,也稱為作為矩陣 M 的奇異值。

  這樣就有了如下關(guān)系式:

  我們現(xiàn)在可以簡單描述下經(jīng)過 M 線性變換后的向量 x 的表達形式。由于向量 v1 和 v2 是正交的單位向量,我們可以得到如下式子:

  這就意味著:

  向量內(nèi)積可以用向量的轉(zhuǎn)置來標色,如下所示:

  最終的式子為:

  上述的式子經(jīng)常表示為:

  u 矩陣的列向量分別是 u1 和 u2,Σ 是一個對角矩陣,對角元素分別是對應(yīng)的 σ1 和 σ2,v 矩陣的列向量分別為 v1 和 v2。

  這就表明了任意的矩陣 M 是可以分解成三個矩陣,v 表示原始域的標準正交基, u 表示經(jīng)過 M 變換后的 co-domain 的標準正交基,Σ 表示了 v 中的向量與 u 中相對應(yīng)向量之間的關(guān)系。

3.3 SVD的推導(dǎo)

  這里直接拿了百度百科的內(nèi)容。

3.3 SVD的一些性質(zhì)

  上面我們對SVD的定義和計算做了詳細的描述,下面對其一些性質(zhì)進行分析。

  對于奇異值,它和我們特征分解中的特征值類似,在奇異值矩陣中也是按照從大到小排列,而且奇異值的減少特別的塊,在很多情況下,前10%甚至1%的奇異值的和就占了全部的奇異值之和的99%以上的比例。也就是說,我們可以用最大的k個奇異值和對應(yīng)的左右奇異值向量來近似描述矩陣。也就是說:

  其中 k 要比 n 小很多,也就是一個大的矩陣 A 可以用三個小的矩陣來標色,如下圖所示,現(xiàn)在我們的矩陣 A 只需要灰色的部分的三個小矩陣就可以近似描述了。

  由于奇異值的特點就是衰減特別快,也就是說僅僅有前幾個奇異值特別大,后面的值都很小,這一點可以用于數(shù)據(jù)壓縮和去噪,PCA降維,也可以用于推薦算法,將用戶和喜好對應(yīng)的矩陣分解,進而得到隱含的用戶需求來做推薦。

4,SVD算法的應(yīng)用

4.1 矩陣近似值

  奇異值分解在統(tǒng)計中的主要應(yīng)用為主成分分析(PCA),一種數(shù)據(jù)分析方法,用來找出大量數(shù)據(jù)中所隱含的“模式”,PCA算法的作用是把數(shù)據(jù)集映射到低維空間中去。數(shù)據(jù)集的特征值(在SVD中用奇異值表征)按照重要性排列,降維的過程就是舍棄不重要的特征向量的過程,而剩下的特征向量組成的空間即為降維后的空間。

  在PCA降維中,需要找到樣本協(xié)方差矩陣 XTX 的最大的 d 個特征向量,然后用這最大的 d 個特征向量張成的矩陣來做低維投影降維??梢钥闯觯谶@個過程中需要先求出協(xié)方差矩陣 XTX,當(dāng)樣本數(shù)多樣本特征數(shù)也多的時候,這個計算量是很大的。

  注意到SVD也可以得到協(xié)方差矩陣 XTX 最大的 d 個特征向量張成的矩陣,但是SVD有個好處,有一些SVD的實現(xiàn)算法可以不先求出協(xié)方差矩陣 XTX ,也能求出我們的右奇異矩陣 V。也就是說,我們的 PCA算法可以不用做特征分解,而是做 SVD來完成。這個方法在樣本量很大的時候很有效。實際上,scikit-learn 算法的背后真正的實現(xiàn)就是SVD,而不是我們認為的暴力特征分解。

  另一方面,注意到 PCA僅僅使用了我們 SVD的右奇異矩陣,沒有使用左奇異矩陣,那么左奇異矩陣有什么用呢?

  假設(shè)我們那的樣本是 m*n 的矩陣 X,如果我們通過 SVD找到了 矩陣 XXT 最大的 d 個特征向量張成的 m*d 維矩陣 U,則我們?nèi)绻M行如下處理:

  可以得到一個 d*n 的矩陣 X',這個矩陣和我們原來的 m*n 維樣本矩陣 X 相比,行數(shù)從 m 減到了 d,可見對行數(shù)進行了壓縮,也就是說,左奇異矩陣可以用于行數(shù)的壓縮。相對的,右奇異矩陣可以用于列數(shù)集特征維度的壓縮,也就是我們的PCA降維。

  舉個例子,我們搜集的數(shù)據(jù)中總是存在噪聲:無論采用的設(shè)備多精密,方法有多好,總是會存在一些誤差的。大的奇異值對應(yīng)了矩陣中的主要信息的話,運用SVD進行數(shù)據(jù)分析,提取其中的主要部分的話,還是相當(dāng)合理的。

  作為例子,假設(shè)我們搜集的數(shù)據(jù)如下所示:

  我們將數(shù)據(jù)用矩陣的形式表示:

  經(jīng)過奇異值分解后,得到:

  由于第一個奇異值遠比第二個要大,數(shù)據(jù)中有包含一些噪聲,第二個奇異值在原始矩陣分解相對應(yīng)的部分可以忽略。經(jīng)過SVD分解后,保留了主要樣本點如圖所示:

  就保留主要數(shù)據(jù)來看,該過程與PCA降維有一些聯(lián)系,PCA 也是要了SVD去檢測數(shù)據(jù)間依賴和冗余信息。

4.2 平行奇異值

  把頻率選擇性衰落信道進行分解。

4.3 求偽逆

  奇異值分解可以被用來計算矩陣的偽逆,若矩陣 M 的奇異值分解為 M = UΣV*,那么 M 的偽逆為: M+ = VΣ+U*。

  其中 Σ+ 是 Σ 的偽逆,并將其主對角線上每個非零元素都求導(dǎo)數(shù)之后再轉(zhuǎn)置得到的。求偽逆通常用來求解線性最小平方,最小二乘法問題。

4.4 在數(shù)據(jù)表達上的應(yīng)用

  下面我們來看一個奇異值分解在數(shù)據(jù)表達上的應(yīng)用,假設(shè)我們有如下一張 15*25的圖像數(shù)據(jù):

  如圖所示,該圖像主要由下面三部分構(gòu)成:

  我們將圖像表示為 15*25 的矩陣,矩陣的元素對應(yīng)著圖像不同像素,如果像素是白色的話,就取1,黑色的話就取0,我們得到了一個具有 375個元素的矩陣,如下圖所示:

  如果我們對矩陣 M 進行奇異值分解以后,得到的奇異值分別是:

  矩陣 M 就可以表示成:

  vi 具有 15個元素, ui 具有 25 個元素,σi 對應(yīng)不同的奇異值,如上圖所示,我們就可以用 123個元素來表示具有 375個元素的圖像數(shù)據(jù)了。

4.5 降噪(noise reduction)

  前面例子的奇異值都不為零,或者都還算比較大,下面我們來探索一下?lián)碛辛慊蛘叻浅P〉钠娈愔档那闆r。通常來講,大的奇異值對應(yīng)的部分會包含更多的信息。比如,我們有一張掃描,帶有噪聲的圖像,如下圖所示:

  我們采用跟實例二相同的處理方式處理該掃描圖像,得到圖像矩陣的奇異值:

  很明顯,前面三個奇異值遠遠比后面的奇異值要大,這樣矩陣 M 的分解方式就可以如下:

  經(jīng)過奇異值分解后,我們得到了一張降噪后的圖像。

5, SVD計算實例

5.1 實例1

  對M進行奇異值分解,M矩陣如下:

  我們看一下 M 矩陣變換后的效果,如下圖所示:

  在這個例子中,第二個奇異值為0,因此經(jīng)過變換后只有一個方向上有表達。

  換句話說,如果某些奇異值非常小的話,其相對應(yīng)的幾項就可以不同出現(xiàn)在矩陣 M 的分解式中。因此,我們可以看到矩陣 M 的秩大小等于非零奇異值的個數(shù)。

5.2 實例2

  這里我們用一個例子來說明矩陣是如何進行奇異值分解的。

  我們需要進行奇異值分解的矩陣A如下:

  我們首先求出 ATA和 AAT

  進行求出 ATA 的特征值和特征向量(此處的特征向量取的是單位向量):

  則 V 為:

  接著求 AAT 的特征值和特征向量(此處的特征向量取的是單位向量):

  則 U 為:

  利用 Aviiui,i=1,2 求奇異值:

  當(dāng)然,我們也可以用 σi = √λi 直接求出奇異值為 √3 和 1。

  即通過 :

  我們代數(shù)矩陣即可求出奇異值。

  最終得到 A 的奇異值分解為:

6,利用Python實現(xiàn)SVD降維

6.1 Python中SVD的函數(shù)

  Python中的 Numpy 包內(nèi)有一個 linalg 的線性工具,可以使用它來直接計算 SVD 的結(jié)果,不需要專門研究對應(yīng)的線性代數(shù)的知識,我們拿上面 5.2 的實例來看,矩陣如下:

  我們使用該函數(shù)來計算它的SVD。

  得到如下結(jié)果:

  可以看到 Σ 是以行向量的形式出現(xiàn),因為該矩陣除了對角元素以外其他元素均為0,這樣的格式更節(jié)省空間。

  我們和之前計算的結(jié)果進行比對:

  我們發(fā)現(xiàn) Σ 和我們計算出來的是一致的。

  當(dāng)然人可以計算2*2, 3*3的,但是當(dāng)矩陣的維度越來越大呢?

  接下來再看一個大的數(shù)據(jù)集,我們建立如下的數(shù)據(jù)集:

  我們求出奇異值為:

  我們發(fā)現(xiàn)它后面兩個值接近于0,所以我們就可以將最后兩個值去掉了,接下來我們就可以去掉一部分元素的矩陣近似表示原始數(shù)據(jù):

  這樣我們重構(gòu)的近似矩陣如下:

[[ 1.00000000e+00  1.00000000e+00  1.00000000e+00  7.75989921e-16
   7.71587483e-16]
 [ 2.00000000e+00  2.00000000e+00  2.00000000e+00  3.00514919e-16
   2.77832253e-16]
 [ 1.00000000e+00  1.00000000e+00  1.00000000e+00  2.18975112e-16
   2.07633779e-16]
 [ 5.00000000e+00  5.00000000e+00  5.00000000e+00  3.00675663e-17
  -1.28697294e-17]
 [ 1.00000000e+00  1.00000000e+00 -5.48397422e-16  2.00000000e+00
   2.00000000e+00]
 [ 3.21319929e-16  4.43562065e-16 -3.48967188e-16  3.00000000e+00
   3.00000000e+00]
 [ 9.71445147e-17  1.45716772e-16 -1.52655666e-16  1.00000000e+00
   1.00000000e+00]]

  四舍五入之后與原始數(shù)據(jù)基本保持一致。

  我們?nèi)绻纼H僅需要保留到前3個奇異值呢?其中一個典型的做法就是保留矩陣中的 90%的能量信息,我們將所有的奇異值取平方和,直到 加到總和的90%為止。

6.2 在圖像壓縮中的應(yīng)用

  一個圖像矩陣,我們總可以將它分解為以下形式,通過選取不同個數(shù)的 Σ 中的奇異值,就可以實現(xiàn)圖像的壓縮:

  如果只想實現(xiàn)圖像壓縮,我們可以使用python numpy 庫中的 linalg.svd 對圖像矩陣進行分解,進而提取前K個奇異值便能實現(xiàn)SVD圖像壓縮的效果,下面我們看一下代碼:

#_*_ coding:utf-8_*_
import numpy as np
import cv2

img = cv2.imread('harden.jpg')
print('origin image shape is ', img.shape)
# 表示 RGB 中各有一個矩陣,都為300*532
#  origin image shape is  (300, 532, 3)


def svd_compression(img, k):
    res_image = np.zeros_like(img)
    for i in range(img.shape[2]):
        # 進行奇異值分解, 從svd函數(shù)中得到的奇異值sigma 是從大到小排列的
        U, Sigma, VT = np.linalg.svd(img[:,:,i])
        res_image[:, :, i] = U[:,:k].dot(np.diag(Sigma[:k])).dot(VT[:k,:])

    return res_image


# 保留前 k 個奇異值
res1 = svd_compression(img, k=300)
res2 = svd_compression(img, k=200)
res3 = svd_compression(img, k=100)
res4 = svd_compression(img, k=50)

row11 = np.hstack((res1, res2))
row22 = np.hstack((res3, res4))
res = np.vstack((row11, row22))

cv2.imshow('img', res)
cv2.waitKey(0)
cv2.destroyAllWindows()

  我們這里分別提取了前300, 200, 100, 50 的奇異值,圖如下:

  可以看到,當(dāng)我們?nèi)〉角懊?00個奇異值來重構(gòu)圖片時,基本與原圖看不出來差別,甚至兩百的都是都還OK。

  所以從上面的壓縮結(jié)果來看,奇異值可以被看作是一個矩陣的代表值,或者說奇異值能夠代表這個矩陣的信息,當(dāng)奇異值越大時,它代表的信息越多。因此我們?nèi)∏懊嫒舾蓚€最大的奇異值,就可以基本還原出數(shù)據(jù)本身。

參考文獻:https://blog.csdn.net/xiahouzuoxin/article/details/41118351

http://www.ams.org/publicoutreach/feature-column/fcarc-svd

https://www.cnblogs.com/pinard/p/6251584.html

https://jingyan.baidu.com/article/9f63fb916ba5e1c8400f0eca.html

http://blog.sciencenet.cn/blog-696950-699432.html

百度百科,SVD的步驟推導(dǎo)等等

不經(jīng)一番徹骨寒 怎得梅花撲鼻香

總結(jié)

以上是生活随笔為你收集整理的Python机器学习笔记:奇异值分解(SVD)算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。