PMF:概率矩陣分解
假設有個用戶和個物品,那麼就形成了一個評分矩陣,通常非常稀疏,只有不到1%的元素是已知的,而我們要估計出缺失元素的值。PMF假設評分矩陣中的元素是由用戶的潛在偏好向量和物品的潛在屬性向量的內積決定的,即:
其中表示正態分布。則觀測到的評分矩陣條件概率為:
是指示函數,若觀測到則其值為1,否則為0。再假設用戶偏好向量和物品偏好向量也都服從正態分布,即:
根據 後驗=先驗 X 似然,可以得出潛變數的後驗概率為:
兩邊取對數得到:
其中是潛變數的維度,C是無關常數。最大後驗概率等價最大化目標函數:
其中這就變成我們熟悉的最小化平方差和正則化項之和的形式。
對求導:
用SGD更新
直到收斂或達到最大迭代次數.
以下是python實現核心代碼:
def train(self,num_user,num_item,train,test,learning_rate,K,regu_u,regu_i,maxiter): U=np.random.normal(0,0.1,(num_user,K)) V = np.random.normal(0, 0.1, (num_item, K)) pre_rmse=100.0 endure_count=3 patience=0 for iter in range(maxiter): loss=0.0 for data in train: user=data[0] item=data[1] rating=data[2] predict_rating=np.dot(U[user],V[item].T) error=rating-predict_rating loss+=error**2 U[user]+=learning_rate*(error*V[item]-regu_u*U[user]) V[item]+=learning_rate*(error*U[user]-regu_i*V[item]) loss+=regu_u*np.square(U[user]).sum()+regu_i*np.square(V[item]).sum() loss=0.5*loss
完整代碼和數據地址:recsys
推薦閱讀:
※利用Python,四步掌握機器學習
※基於不平衡樣本的推薦演算法研究
※SVM推導筆記(一)
※從零開始實現KNN分類演算法
※word embedding之GLOVE代碼