前言
最近在學習矩陣補全的方法主要是用來做藥物重定位。入門矩陣補全方法後才發現這個坑有點大,需要太多的數學基礎了。對於數學知識嚴重不足的我欲哭無淚,搞了兩周之後對這個方法的現實意義跟數學背景有了一定的了解。在這裡做個總結並用經典的svt矩陣補全演算法(《a singular value thresholding algorithm for matrix completion》)作為乙個demo(python實現),解釋一下矩陣補全的具體做法,感受一下矩陣補全到底是幹啥的。
低秩矩陣補全的現實意義
這一部分內容參考我之前的部落格
時間倉促沒大塊時間,碼字先把**貼出來,以後慢慢補解釋。
""
@date :
2020/11
/1519:
54@source 《a singular value thresholding algorithm for mc&rw》
"""import numpy as np
# creating data
svt_data = np.array([[
0,3,
0,4]
,[3,
0,4,
0],[
0,0,
2,0]
,[5,
0,3,
4],[
0,0,
4,0]
,[0,
3,3,
0]])
# changing data type into float
svt_data = svt_data.astype(
float
)# print(svt_data)
# generating omega :0 denotes none 1 denotes true
shape = svt_data.shape
omega = np.zeros(shape)
for i in
range(0
, shape[0]
):for j in
range(0
, shape[1]
):if svt_data[i, j]
>0:
omega[i, j]=1
# print(omega)
defsvt_solve
(a, omega, tau=
none
, delta=
none
, epslion=1e-
2, max_iterations=
1000):
# 矩陣初始化,生成乙個和矩陣a形狀一樣的0矩陣
y = np.zeros_like(a)
ifnot tau:
tau =
5* np.
sum(a.shape)/2
ifnot delta:
# 確定步長初始值
delta =
1.2* np.prod(a.shape)
/ np.
sum(omega)
for _ in
range
(max_iterations)
:# 對矩陣y進行奇異值分解
u, s, v = np.linalg.svd(y, full_matrices=
false
)# soft-thresholding operator
print
(type
(s))
print
(type
(tau)
)print
(tau)
s = np.maximum(s - tau,0)
# singular value shrinkage
x = np.linalg.multi_dot(
[u, np.diag(s)
, v]
)# y的迭代
y += delta * omega *
(a-x)
# 誤差計算
rel_recon_error = np.linalg.norm(omega *
(x-a)
)/ np.linalg.norm(omega*a)
if rel_recon_error < epslion:
break
return x
result = svt_data_hat = svt_solve(svt_data, omega)
print
(result)
矩陣填充的SVT演算法
本文是對svt的一篇文章的理解,即奇異值閾值演算法的理解。1 演算法解決的問題如下 其中最小化的是核範數 表示矩陣奇異值之和 是rank x 的最優凸近似。具體研究解決的是矩陣填充問題,如何在不完備的資料下把缺少的資料給補充完整。前提是填充的矩陣是要求低秩的。首先給出軟閾值運算元 如果 那麼在軟閾值...
棧的演算法實現及應用
1.棧的順序儲存結構 1 編寫程式,用不同的儲存方法,實現棧的基本操作。2 判斷乙個表示式中的括號 僅有一種括號,小 中或大括號 是否配對。編寫並實現它的演算法。3 若表示式中既有小括號,又有大括號 或中括號 且允許互相巢狀,但不能交叉,寫出判斷這樣的表示式是否合法的演算法。如 2 3 4 3 為合...
Mac mac git 的安裝 及實現自動補全
1.檢查是否裝了brew brew list 如果沒有,拷貝以下命令到終端 回車.可以安裝好brew ruby e curl fssl 2.檢視你是否已經安裝了 bash completion 如果沒有,繼續往下看 brew install bash completion 安裝完成之後 3.檢查ma...