[英]Machine Learning Algorithm for Completing Sparse Matrix Data
我在這里看到了一些機器學習問題所以我想我會發布一個相關的問題:
假設我有一個數據集,運動員參加10公里和20公里的丘陵比賽的比賽,即每場比賽都有自己的困難。
用戶的完成時間幾乎與每次比賽的正常分布相反。
可以將此問題寫為矩陣:
Comp1 Comp2 Comp3
User1 20min ?? 10min
User2 25min 20min 12min
User3 30min 25min ??
User4 30min ?? ??
我想完成上面的矩陣,其大小為1000x20,稀疏度為8%(!)。
應該有一種非常簡單的方法來完成這個矩陣,因為我可以計算每個用戶(能力)的參數和每個競爭的參數(mu,lambda of distribution)。 此外,比賽之間的相關性非常高。
我可以利用排名User1 <User2 <User3和Item3 << Item2 <Item1
你能不能給我一個暗示我可以使用的方法?
您精確地觀察到這是一個矩陣完成問題,可以讓您獲得解決方案的大部分內容。 我將把你的直覺編成一個直覺,即用戶的能力和課程難度的結合會產生比賽的時間,然后呈現各種算法。
讓向量u表示用戶的速度,以便u_i是用戶i的速度。 讓向量v表示課程的難度,以便v_j是課程j的難度。 同樣可用時,讓t_ij成為用戶i在課程j上的時間,並定義y_ij = 1 / t_ij,用戶i在課程j上的速度。
既然你說時間是逆高斯分布的,那么觀測的合理模型就是
y_ij = u_i * v_j + e_ij,
其中e_ij是零均值高斯隨機變量。
為了擬合這個模型,我們搜索向量u和v,以最小化觀察到的速度中的預測誤差:
f(u,v)= sum_ij(u_i * v_j - y_ij)^ 2
這是經典的Hebbian算法 。 它通過梯度下降最小化上述成本函數。 f wrt到u和v的梯度是
df/du_i = sum_j (u_i * v_j - y_ij) v_j
df/dv_j = sum_i (u_i * v_j - y_ij) u_i
將這些漸變插入共軛梯度求解器或BFGS優化器,如MATLAB的fmin_unc
或scipy的optimize.fmin_ncg
或optimize.fmin_bfgs
。 除非您願意實施非常好的線搜索算法,否則不要滾動自己的梯度下降。
最近,已經提出了針對該問題的簡單凸松弛。 生成的算法就像編碼一樣簡單,似乎工作得很好。 退房,例如非統一世界中的協作過濾:使用加權跟蹤規范學習 。 這些方法最小化f(m)= sum_ij(m_ij - y_ij)^ 2 + || m || _ *,其中||.||_*
是矩陣m的所謂核范數。 實現將最終再次計算關於u和v的梯度並依賴於非線性優化器。
有幾種方法可以做到這一點,也許最先嘗試的最佳架構如下:
(像往常一樣,作為預處理步驟,將您的數據標准化為具有0均值和1階偏差的均勻函數。您可以通過將函數擬合到所有種族結果的分布,應用其逆,然后減去平均值除以標准偏差。)
選擇超參數N(您可以像往常一樣使用交叉驗證集進行調整)。
為每個參與者和每個種族創建一個N維特征向量,最初是隨機的。 因此,如果存在R種族和P參與者,那么存在具有總共N(R + P)參數的R + P特征向量。
對給定參與者和給定種族的預測是兩個對應特征向量的函數(作為第一次嘗試使用這兩個向量的標量積)。
在逐步改進參與者特征向量和種族特征向量之間交替。
要改進特征向量,請對已知數據元素(您有結果的參與者/種族對)使用梯度下降(或一些更復雜的優化方法)。
那是你的損失函數是:
total_error = 0
forall i,j
if (Participant i participated in Race j)
actual = ActualRaceResult(i,j)
predicted = ScalarProduct(ParticipantFeatures_i, RaceFeatures_j)
total_error += (actual - predicted)^2
因此,根據特征向量計算該函數的偏導數,並按照通常的ML算法逐步調整它們。
(您還應該在損失函數上包含正則化項,例如特征向量的長度的平方)
請告訴我這個架構是否清楚,或者您需要進一步詳細說明。
我認為這是缺少數據恢復的經典任務。 存在一些不同的方法。 我建議的其中一個是基於自組織特征圖 (Kohonen的地圖)。
下面假設每個運動員記錄都是一種模式 ,每個比賽數據都是一個特征 。
基本上,您應該將數據分為兩組:第一組 - 具有完全定義的模式,第二組 - 具有部分丟失的特征。 我認為這是合格的,因為稀疏度為8%,即你有足夠的數據(92%)來訓練未損壞的記錄。
然后,您將第一組提供給SOM並對此數據進行訓練。 在此過程中,將使用所有功能。 我不會在這里復制算法,因為它可以在許多公共資源中找到,甚至一些實現也可用。
在訓練網后,您可以將模式從第二組輸送到網絡。 對於每個模式,網絡應僅基於當前模式中存在的那些特征來計算最佳匹配單元 (BMU)。 然后你可以從BMU中獲取與缺失特征相對應的重量。
作為替代方案,您無法將整個數據划分為2組,而是對所有模式(包括缺少功能的模式)進行網絡訓練。 但是對於這樣的模式,學習過程應該以類似的方式改變,即BMU應該僅根據每個模式中的現有特征來計算。
我想你可以看看最近的低秩矩陣完成方法。 假設您的矩陣與矩陣維度相比具有較低的排名。
min rank(M)
s.t. ||P(M-M')||_F=0
M是最終結果,M'是您目前擁有的未完成矩陣。 該算法最小化矩陣M的秩。約束中的P是一個運算符,它采用矩陣M'的已知項,並將M中的那些項約束為與M'中的相同。
這個問題的優化有一個寬松的版本,即:
min ||M||_* + \lambda*||P(M-M')||_F
rank(M)被放寬到它的凸包|| M || _ *然后你通過控制參數lambda來權衡這兩個項。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.