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演算法實現求二分圖的最佳匹配。方...