SVD演算法理解

2021-09-12 16:42:40 字數 730 閱讀 2072

svd是一種強大的降維工具,同時也用於去噪,或壓縮,本質上svd是使用奇異值分解,這是矩陣中的一種解法。

svd演算法將原始資料 data, 分解為  u

維度 data : (m, n)

u:  (m, m)  其實u是乙個正交矩陣,也是a*at的特徵向量

vt: (n, n)  其它vt也是乙個正交矩陣,也是at*a 的特徵向量

如果我們選取奇異值為前k 個那麼可以得出:

到這裡奇異值分解就完成,接下來是降維了,降維又考慮將data[m, n] 降m維度,還是將方向得維度(個人理解)

降m方向的維度是利用u來進行降維的:

newdata'[k,n] =

newdata[n,k] =  datat[n, m]u[m,k]*

降n方向的維度:

newdata`[m, k] = data[m, n] * v[n, k]*

newdata[k, m] =* vt[k,n] * datat[n,m]

程式設計上可以使用numpy庫:

import numpy as np

u,sigma, vt = np.linalg.svd(data)

#注意返回的sigma是一維陣列,這樣更節省空間

svd用途還挺廣的,一般用於推薦系統,根據使用者以往的資料對新菜品進行評分,可以使用基於協同過濾來計算,它的核心是

計算相似度,在資訊檢索中,也發揮它的作用.

A 演算法理解

廣度優先 bfs 和深度優先 dfs 搜尋 深度優先搜尋,用俗話說就是不見棺材不回頭。演算法會朝乙個方向進發,直到遇到邊界或者障礙物,才回溯。一般在實現的時候,我們採用遞迴的方式來進行,也可以採用模擬壓棧的方式來實現。如下圖,s代表起點,e代表終點。我們如果按照右 下 左 上這樣的擴充套件順序的話,...

dijkstra 演算法理解

求有向圖中乙個源點到其他頂點的最短距離 自己的理解 剛開始的時候相當於有三個集合 v 頂點集合 s 已求得的最短距離頂點集合,假設求a到其他頂點的最短距離 s 剩餘頂點集合 d 儲存的是最短距離值 求一維陣列中的最小值的下標,這個陣列不包含已經求得的頂點 找出最小值下標後,放入到s中,然後求剩餘頂點...

KM演算法理解

二分圖帶權匹配與最佳匹配 什麼是二分圖的帶權匹配?二分圖的帶權匹配就是求出乙個匹配集合,使得集合中邊的權值之和最大或最小。而二分圖的最佳匹配則一定為完備匹配,在此基礎上,才要求匹配的邊權值之和最大或最小。二分圖的帶權匹配與最佳匹配不等價,也不互相包含。我們可以使用km演算法實現求二分圖的最佳匹配。方...