A. 如何解釋spark mllib中ALS演算法的原理
整理一下自己的理解。
對於一個users-procts-rating的評分數據集,ALS會建立一個user*proct的m*n的矩陣
其中,m為users的數量,n為procts的數量
但是在這個數據集中,並不是每個用戶都對每個產品進行過評分,所以這個矩陣往往是稀疏的,用戶i對產品j的評分往往是空的
ALS所做的事情就是將這個稀疏矩陣通過一定的規律填滿,這樣就可以從矩陣中得到任意一個user對任意一個proct的評分,ALS填充的評分項也稱為用戶i對產品j的預測得分
所以說,ALS演算法的核心就是通過什麼樣子的規律來填滿(預測)這個稀疏矩陣
它是這么做的:
假設m*n的評分矩陣R,可以被近似分解成U*(V)T
U為m*d的用戶特徵向量矩陣
V為n*d的產品特徵向量矩陣((V)T代表V的轉置,原諒我不會打轉置這個符號。。)
d為user/proct的特徵值的數量
關於d這個值的理解,大概可以是這樣的
對於每個產品,可以從d個角度進行評價,以電影為例,可以從主演,導演,特效,劇情4個角度來評價一部電影,那麼d就等於4
可以認為,每部電影在這4個角度上都有一個固定的基準評分值
例如《末日崩塌》這部電影是一個產品,它的特徵向量是由d個特徵值組成的
d=4,有4個特徵值,分別是主演,導演,特效,劇情
每個特徵值的基準評分值分別為(滿分為1.0):
主演:0.9(大光頭還是那麼霸氣)
導演:0.7
特效:0.8
劇情:0.6
矩陣V由n個proct*d個特徵值組成
對於矩陣U,假設對於任意的用戶A,該用戶對一部電影的綜合評分和電影的特徵值存在一定的線性關系,即電影的綜合評分=(a1*d1+a2*d2+a3*d3+a4*d4)
其中a1-4為用戶A的特徵值,d1-4為之前所說的電影的特徵值
參考:
協同過濾中的矩陣分解演算法研究
那麼對於之前ALS演算法的這個假設
m*n的評分矩陣R,可以被近似分解成U*(V)T
就是成立的,某個用戶對某個產品的評分可以通過矩陣U某行和矩陣V(轉置)的某列相乘得到
那麼現在的問題是,如何確定用戶和產品的特徵值?(之前僅僅是舉例子,實際中這兩個都是未知的變數)
採用的是交替的最小二乘法
在上面的公式中,a表示評分數據集中用戶i對產品j的真實評分,另外一部分表示用戶i的特徵向量(轉置)*產品j的特徵向量(這里可以得到預測的i對j的評分)在上面的公式中,a表示評分數據集中用戶i對產品j的真實評分,另外一部分表示用戶i的特徵向量(轉置)*產品j的特徵向量(這里可以得到預測的i對j的評分)
用真實評分減去預測評分然後求平方,對下一個用戶,下一個產品進行相同的計算,將所有結果累加起來(其中,數據集構成的矩陣是存在大量的空打分,並沒有實際的評分,解決的方法是就只看對已知打分的項)
參考:
ALS 在 Spark MLlib 中的實現
但是這里之前問題還是存在,就是用戶和產品的特徵向量都是未知的,這個式子存在兩個未知變數
解決的辦法是交替的最小二乘法
首先對於上面的公式,以下面的形式顯示:
為了防止過度擬合,加上正則化參數為了防止過度擬合,加上正則化參數
首先用一個小於1的隨機數初始化V首先用一個小於1的隨機數初始化V
根據公式(4)求U
此時就可以得到初始的UV矩陣了,計算上面說過的差平方和
根據計算得到的U和公式(5),重新計算並覆蓋V,計算差平方和
反復進行以上兩步的計算,直到差平方和小於一個預設的數,或者迭代次數滿足要求則停止
取得最新的UV矩陣
則原本的稀疏矩陣R就可以用R=U(V)T來表示了
以上公式內容截圖來自:
基於矩陣分解的協同過濾演算法
總結一下:
ALS演算法的核心就是將稀疏評分矩陣分解為用戶特徵向量矩陣和產品特徵向量矩陣的乘積
交替使用最小二乘法逐步計算用戶/產品特徵向量,使得差平方和最小
通過用戶/產品特徵向量的矩陣來預測某個用戶對某個產品的評分
不知道是不是理解正確了
有幾個問題想請教一下~
(1)在第一個公式中加入正則化參數是啥意思?為什麼是那種形態的?
(2)固定一個矩陣U,求偏導數之後可以得到求解V的公式,為什麼?
B. itemCF演算法如果沒有用戶評分該怎麼計算評分矩陣
整理一下自己的理解。對於一個users-procts-rating的評分數據集,ALS會建立一個user*proct的m*n的矩陣其中,m為users的數量,n為procts的數量但是在這個數據集中,並不是每個用戶都對每個產品進行過評分,所以這個矩陣往往是稀疏的,用戶i對產品j的評分往往是空的ALS所做的事情就是將這個稀疏矩陣通過一定的規律填滿,這樣就可以從矩陣中得到任意一個user對任意一個proct的評分,ALS填充的評分項也稱為用戶i對產品j的預測得分所以說,ALS演算法的核心就是通過什麼樣子的規律來填滿(預測)這個稀疏矩陣它是這么做的:假設m*n的評分矩陣R,可以被近似分解成U*(V)TU為m*d的用戶特徵向量矩陣V為n*d的產品特徵向量矩陣((V)T代表V的轉置,原諒我不會打轉置這個符號。。)d為user/proct的特徵值的數量關於d這個值的理解,大概可以是這樣的對於每個產品,可以從d個角度進行評價,以電影為例,可以從主演,導演,特效,劇情4個角度來評價一部電影,那麼d就等於4可以認為,每部電影在這4個角度上都有一個固定的基準評分值例如《末日崩塌》這部電影是一個產品,它的特徵向量是由d個特徵值組成的d=4,有4個特徵值,分別是主演,導演,特效,劇情每個特徵值的基準評分值分別為(滿分為1.0):主演:0.9(大光頭還是那麼霸氣)導演:0.7特效:0.8劇情:0.6矩陣V由n個proct*d個特徵值組成對於矩陣U,假設對於任意的用戶A,該用戶對一部電影的綜合評分和電影的特徵值存在一定的線性關系,即電影的綜合評分=(a1*d1+a2*d2+a3*d3+a4*d4)其中a1-4為用戶A的特徵值,d1-4為之前所說的電影的特徵值參考:協同過濾中的矩陣分解演算法研究那麼對於之前ALS演算法的這個假設m*n的評分矩陣R,可以被近似分解成U*(V)T就是成立的,某個用戶對某個產品的評分可以通過矩陣U某行和矩陣V(轉置)的某列相乘得到那麼現在的問題是,如何確定用戶和產品的特徵值?(之前僅僅是舉例子,實際中這兩個都是未知的變數)採用的是交替的最小二乘法在上面的公式中,a表示評分數據集中用戶i對產品j的真實評分,另外一部分表示用戶i的特徵向量(轉置)*產品j的特徵向量(這里可以得到預測的i對j的評分)在上面的公式中,a表示評分數據集中用戶i對產品j的真實評分,另外一部分表示用戶i的特徵向量(轉置)*產品j的特徵向量(這里可以得到預測的i對j的評分)用真實評分減去預測評分然後求平方,對下一個用戶,下一個產品進行相同的計算,將所有結果累加起來(其中,數據集構成的矩陣是存在大量的空打分,並沒有實際的評分,解決的方法是就只看對已知打分的項)參考:ALS在SparkMLlib中的實現但是這里之前問題還是存在,就是用戶和產品的特徵向量都是未知的,這個式子存在兩個未知變數解決的法是交替的最小二乘法首先對於上面的公式,以下面的形式顯示:為了防止過度擬合,加上正則化參數為了防止過度擬合,加上正則化參數首先用一個小於1的隨機數初始化V首先用一個小於1的隨機數初始化V根據公式(4)求U此時就可以得到初始的UV矩陣了,計算上面說過的差平方和根據計算得到的U和公式(5),重新計算並覆蓋V,計算差平方和反復進行以上兩步的計算,直到差平方和小於一個預設的數,或者迭代次數滿足要求則停止取得最新的UV矩陣則原本的稀疏矩陣R就可以用R=U(V)T來表示了以上公式內容截圖來自:基於矩陣分解的協同過濾演算法總結一下:ALS演算法的核心就是將稀疏評分矩陣分解為用戶特徵向量矩陣和產品特徵向量矩陣的乘積交替使用最小二乘法逐步計算用戶/產品特徵向量,使得差平方和最小通過用戶/產品特徵向量的矩陣來預測某個用戶對某個產品的評分不知道是不是理解正確了有幾個問題想請教一下~(1)在第一個公式中加入正則化參數是啥意思?為什麼是那種形態的?(2)固定一個矩陣U,求偏導數之後可以得到求解V的公式,為什麼?
C. 矩陣分解在協同過濾推薦演算法中的應用
矩陣分解在協同過濾推薦演算法中的應用
推薦系統是當下越來越熱的一個研究問題,無論在學術界還是在工業界都有很多優秀的人才參與其中。近幾年舉辦的推薦系統比賽更是一次又一次地把推薦系統的研究推向了高潮,比如幾年前的Neflix百萬大獎賽,KDD CUP 2011的音樂推薦比賽,去年的網路電影推薦競賽,還有最近的阿里巴巴大數據競賽。這些比賽對推薦系統的發展都起到了很大的推動作用,使我們有機會接觸到真實的工業界數據。我們利用這些數據可以更好地學習掌握推薦系統,這些數據網上很多,大家可以到網上下載。
推薦系統在工業領域中取得了巨大的成功,尤其是在電子商務中。很多電子商務網站利用推薦系統來提高銷售收入,推薦系統為Amazon網站每年帶來30%的銷售收入。推薦系統在不同網站上應用的方式不同,這個不是本文的重點,如果感興趣可以閱讀《推薦系統實踐》(人民郵電出版社,項亮)第一章內容。下面進入主題。
為了方便介紹,假設推薦系統中有用戶集合有6個用戶,即U={u1,u2,u3,u4,u5,u6},項目(物品)集合有7個項目,即V={v1,v2,v3,v4,v5,v6,v7},用戶對項目的評分結合為R,用戶對項目的評分范圍是[0, 5]。R具體表示如下:
推薦系統的目標就是預測出符號「?」對應位置的分值。推薦系統基於這樣一個假設:用戶對項目的打分越高,表明用戶越喜歡。因此,預測出用戶對未評分項目的評分後,根據分值大小排序,把分值高的項目推薦給用戶。怎麼預測這些評分呢,方法大體上可以分為基於內容的推薦、協同過濾推薦和混合推薦三類,協同過濾演算法進一步劃分又可分為基於基於內存的推薦(memory-based)和基於模型的推薦(model-based),本文介紹的矩陣分解演算法屬於基於模型的推薦。
矩陣分解演算法的數學理論基礎是矩陣的行列變換。在《線性代數》中,我們知道矩陣A進行行變換相當於A左乘一個矩陣,矩陣A進行列變換等價於矩陣A右乘一個矩陣,因此矩陣A可以表示為A=PEQ=PQ(E是標准陣)。
矩陣分解目標就是把用戶-項目評分矩陣R分解成用戶因子矩陣和項目因子矩陣乘的形式,即R=UV,這里R是n×m, n =6, m =7,U是n×k,V是k×m。直觀地表示如下:
高維的用戶-項目評分矩陣分解成為兩個低維的用戶因子矩陣和項目因子矩陣,因此矩陣分解和PCA不同,不是為了降維。用戶i對項目j的評分r_ij =innerproct(u_i, v_j),更一般的情況是r_ij =f(U_i, V_j),這里為了介紹方便就是用u_i和v_j內積的形式。下面介紹評估低維矩陣乘積擬合評分矩陣的方法。
首先假設,用戶對項目的真實評分和預測評分之間的差服從高斯分布,基於這一假設,可推導出目標函數如下:
最後得到矩陣分解的目標函數如下:
從最終得到得目標函數可以直觀地理解,預測的分值就是盡量逼近真實的已知評分值。有了目標函數之後,下面就開始談優化方法了,通常的優化方法分為兩種:交叉最小二乘法(alternative least squares)和隨機梯度下降法(stochastic gradient descent)。
首先介紹交叉最小二乘法,之所以交叉最小二乘法能夠應用到這個目標函數主要是因為L對U和V都是凸函數。首先分別對用戶因子向量和項目因子向量求偏導,令偏導等於0求駐點,具體解法如下:
上面就是用戶因子向量和項目因子向量的更新公式,迭代更新公式即可找到可接受的局部最優解。迭代終止的條件下面會講到。
接下來講解隨機梯度下降法,這個方法應用的最多。大致思想是讓變數沿著目標函數負梯度的方向移動,直到移動到極小值點。直觀的表示如下:
其實負梯度的負方向,當函數是凸函數時是函數值減小的方向走;當函數是凹函數時是往函數值增大的方向移動。而矩陣分解的目標函數L是凸函數,因此,通過梯度下降法我們能夠得到目標函數L的極小值(理想情況是最小值)。
言歸正傳,通過上面的講解,我們可以獲取梯度下降演算法的因子矩陣更新公式,具體如下:
(3)和(4)中的γ指的是步長,也即是學習速率,它是一個超參數,需要調參確定。對於梯度見(1)和(2)。
下面說下迭代終止的條件。迭代終止的條件有很多種,就目前我了解的主要有
1) 設置一個閾值,當L函數值小於閾值時就停止迭代,不常用
2) 設置一個閾值,當前後兩次函數值變化絕對值小於閾值時,停止迭代
3) 設置固定迭代次數
另外還有一個問題,當用戶-項目評分矩陣R非常稀疏時,就會出現過擬合(overfitting)的問題,過擬合問題的解決方法就是正則化(regularization)。正則化其實就是在目標函數中加上用戶因子向量和項目因子向量的二范數,當然也可以加上一范數。至於加上一范數還是二范數要看具體情況,一范數會使很多因子為0,從而減小模型大小,而二范數則不會它只能使因子接近於0,而不能使其為0,關於這個的介紹可參考論文Regression Shrinkage and Selection via the Lasso。引入正則化項後目標函數變為:
(5)中λ_1和λ_2是指正則項的權重,這兩個值可以取一樣,具體取值也需要根據數據集調參得到。優化方法和前面一樣,只是梯度公式需要更新一下。
矩陣分解演算法目前在推薦系統中應用非常廣泛,對於使用RMSE作為評價指標的系統尤為明顯,因為矩陣分解的目標就是使RMSE取值最小。但矩陣分解有其弱點,就是解釋性差,不能很好為推薦結果做出解釋。
後面會繼續介紹矩陣分解演算法的擴展性問題,就是如何加入隱反饋信息,加入時間信息等。
D. 在推薦系統中矩陣分解是協同過濾的一種嗎
解:∵y=√(x-1)與y=x/2的交點為(2,1)、且y=√(x-1)的定義域為x≥1,
∴原式=∫回(0,2)dx∫(0,x/2)ydy-∫(1,2)dx∫[0,√(x-1)]ydy=(1/2)∫(0,2)x^2dx-(1/2)∫(1,2)(x-1)dx=(1/6)x^3丨(x=0,2)-(1/2)[(1/2)x^2-x]丨(x=1,2)=13/12。答
供參考。
E. https://.baidu.com/question/2270990967816553188.html
整理一下自己的理解。
對於一個users-procts-rating的評分數據集,ALS會建立一個user*proct的m*n的矩陣
其中,m為users的數量,n為procts的數量
但是在這個數據集中,並不是每個用戶都對每個產品進行過評分,所以這個矩陣往往是稀疏的,用戶i對產品j的評分往往是空的
ALS所做的事情就是將這個稀疏矩陣通過一定的規律填滿,這樣就可以從矩陣中得到任意一個user對任意一個proct的評分,ALS填充的評分項也稱為用戶i對產品j的預測得分
所以說,ALS演算法的核心就是通過什麼樣子的規律來填滿(預測)這個稀疏矩陣
它是這么做的:
假設m*n的評分矩陣R,可以被近似分解成U*(V)T
U為m*d的用戶特徵向量矩陣
V為n*d的產品特徵向量矩陣((V)T代表V的轉置,原諒我不會打轉置這個符號。。)
d為user/proct的特徵值的數量
關於d這個值的理解,大概可以是這樣的
對於每個產品,可以從d個角度進行評價,以電影為例,可以從主演,導演,特效,劇情4個角度來評價一部電影,那麼d就等於4
可以認為,每部電影在這4個角度上都有一個固定的基準評分值
例如《末日崩塌》這部電影是一個產品,它的特徵向量是由d個特徵值組成的
d=4,有4個特徵值,分別是主演,導演,特效,劇情
每個特徵值的基準評分值分別為(滿分為1.0):
主演:0.9(大光頭還是那麼霸氣)
導演:0.7
特效:0.8
劇情:0.6
矩陣V由n個proct*d個特徵值組成
對於矩陣U,假設對於任意的用戶A,該用戶對一部電影的綜合評分和電影的特徵值存在一定的線性關系,即電影的綜合評分=(a1*d1+a2*d2+a3*d3+a4*d4)
其中a1-4為用戶A的特徵值,d1-4為之前所說的電影的特徵值
參考:
協同過濾中的矩陣分解演算法研究
那麼對於之前ALS演算法的這個假設
m*n的評分矩陣R,可以被近似分解成U*(V)T
就是成立的,某個用戶對某個產品的評分可以通過矩陣U某行和矩陣V(轉置)的某列相乘得到
那麼現在的問題是,如何確定用戶和產品的特徵值?(之前僅僅是舉例子,實際中這兩個都是未知的變數)
採用的是交替的最小二乘法
在上面的公式中,a表示評分數據集中用戶i對產品j的真實評分,另外一部分表示用戶i的特徵向量(轉置)*產品j的特徵向量(這里可以得到預測的i對j的評分)在上面的公式中,a表示評分數據集中用戶i對產品j的真實評分,另外一部分表示用戶i的特徵向量(轉置)*產品j的特徵向量(這里可以得到預測的i對j的評分)
用真實評分減去預測評分然後求平方,對下一個用戶,下一個產品進行相同的計算,將所有結果累加起來(其中,數據集構成的矩陣是存在大量的空打分,並沒有實際的評分,解決的方法是就只看對已知打分的項)
參考:
ALS 在 Spark MLlib 中的實現
但是這里之前問題還是存在,就是用戶和產品的特徵向量都是未知的,這個式子存在兩個未知變數
解決的辦法是交替的最小二乘法
首先對於上面的公式,以下面的形式顯示:
為了防止過度擬合,加上正則化參數為了防止過度擬合,加上正則化參數
首先用一個小於1的隨機數初始化V首先用一個小於1的隨機數初始化V
根據公式(4)求U
此時就可以得到初始的UV矩陣了,計算上面說過的差平方和
根據計算得到的U和公式(5),重新計算並覆蓋V,計算差平方和
反復進行以上兩步的計算,直到差平方和小於一個預設的數,或者迭代次數滿足要求則停止
取得最新的UV矩陣
則原本的稀疏矩陣R就可以用R=U(V)T來表示了
以上公式內容截圖來自:
基於矩陣分解的協同過濾演算法
總結一下:
ALS演算法的核心就是將稀疏評分矩陣分解為用戶特徵向量矩陣和產品特徵向量矩陣的乘積
交替使用最小二乘法逐步計算用戶/產品特徵向量,使得差平方和最小
通過用戶/產品特徵向量的矩陣來預測某個用戶對某個產品的評分
不知道是不是理解正確了
有幾個問題想請教一下~
F. mahout包括哪些演算法
一、分類演算法
(一)Logistic 回歸(SGD)
(二)Bayesian
(三)SVM
(四)Perceptron 和Winnow
(五)神經網路
(六)隨機森林
(七)受限玻爾茲曼機
(八)Boosting
(九)HMM
(十)Online Passive Aggressive
二、聚類演算法
(一)Canopy
(二)K-Means
(三)Fuzzy K-means
(四)EM
(五)Mean shift
(六)層次聚類
(七)Dirichlet process
(八)LDA
(九)Spectral
(十)MinHash
(十一)Top Down
三、推薦演算法
Mahout包括簡單的非並行的推薦和基於Hadoop的並行推薦的實現。
(一)非並行推薦
(二)分布式的基於Item的協同過濾
(三)並行矩陣分解的協同過濾
四、關聯規則挖掘演算法
並行FP-Growth
五、回歸
Locally Weighted Linear Regression
六、降維
(一)SVD
(二)SSVD
(三)PCA
(四)ICA
(五)GDA
七、進化演算法
八、向量相似性計算
G. 文本主題模型之潛在語義索引(LSI)
文本主題模型之潛在語義索引(LSI)
在文本挖掘中,主題模型是比較特殊的一塊,它的思想不同於我們常用的機器學習演算法,因此這里我們需要專門來總結文本主題模型的演算法。本文關注於潛在語義索引演算法(LSI)的原理。
1. 文本主題模型的問題特點
在數據分析中,我們經常會進行非監督學習的聚類演算法,它可以對我們的特徵數據進行非監督的聚類。而主題模型也是非監督的演算法,目的是得到文本按照主題的概率分布。從這個方面來說,主題模型和普通的聚類演算法非常的類似。但是兩者其實還是有區別的。
聚類演算法關注於從樣本特徵的相似度方面將數據聚類。比如通過數據樣本之間的歐式距離,曼哈頓距離的大小聚類等。而主題模型,顧名思義,就是對文字中隱含主題的一種建模方法。比如從「人民的名義」和「達康書記」這兩個詞我們很容易發現對應的文本有很大的主題相關度,但是如果通過詞特徵來聚類的話則很難找出,因為聚類方法不能考慮到到隱含的主題這一塊。
那麼如何找到隱含的主題呢?這個一個大問題。常用的方法一般都是基於統計學的生成方法。即假設以一定的概率選擇了一個主題,然後以一定的概率選擇當前主題的詞。最後這些片語成了我們當前的文本。所有詞的統計概率分布可以從語料庫獲得,具體如何以「一定的概率選擇」,這就是各種具體的主題模型演算法的任務了。
當然還有一些不是基於統計的方法,比如我們下面講到的LSI。
2. 潛在語義索引(LSI)概述
潛在語義索引(Latent Semantic Indexing,以下簡稱LSI),有的文章也叫Latent Semantic Analysis(LSA)。其實是一個東西,後面我們統稱LSI,它是一種簡單實用的主題模型。LSI是基於奇異值分解(SVD)的方法來得到文本的主題的。而SVD及其應用我們在前面的文章也多次講到,比如:奇異值分解(SVD)原理與在降維中的應用和矩陣分解在協同過濾推薦演算法中的應用。如果大家對SVD還不熟悉,建議復習奇異值分解(SVD)原理與在降維中的應用後再讀下面的內容。
這里我們簡要回顧下SVD:對於一個m×n的矩陣A,可以分解為下面三個矩陣:
Am×n=Um×mΣm×nVn×nT
有時為了降低矩陣的維度到k,SVD的分解可以近似的寫為:
Am×n≈Um×kΣk×kVk×nT
如果把上式用到我們的主題模型,則SVD可以這樣解釋:我們輸入的有m個文本,每個文本有n個詞。而Aij則對應第i個文本的第j個詞的特徵值,這里最常用的是基於預處理後的標准化TF-IDF值。k是我們假設的主題數,一般要比文本數少。SVD分解後,Uil對應第i個文本和第l個主題的相關度。Vjm對應第j個詞和第m個詞義的相關度。Σlm對應第l個主題和第m個詞義的相關度。
也可以反過來解釋:我們輸入的有m個詞,對應n個文本。而Aij則對應第i個詞檔的第j個文本的特徵值,這里最常用的是基於預處理後的標准化TF-IDF值。k是我們假設的主題數,一般要比文本數少。SVD分解後,Uil對應第i個詞和第l個詞義的相關度。Vjm對應第j個文本和第m個主題的相關度。Σlm對應第l個詞義和第m個主題的相關度。
這樣我們通過一次SVD,就可以得到文檔和主題的相關度,詞和詞義的相關度以及詞義和主題的相關度。
3. LSI簡單實例
這里舉一個簡單的LSI實例,假設我們有下面這個有10個詞三個文本的詞頻TF對應矩陣如下:
這里我們沒有使用預處理,也沒有使用TF-IDF,在實際應用中最好使用預處理後的TF-IDF值矩陣作為輸入。
我們假定對應的主題數為2,則通過SVD降維後得到的三矩陣為:
從矩陣Uk我們可以看到詞和詞義之間的相關性。而從Vk可以看到3個文本和兩個主題的相關性。大家可以看到裡面有負數,所以這樣得到的相關度比較難解釋。
4. LSI用於文本相似度計算
在上面我們通過LSI得到的文本主題矩陣可以用於文本相似度計算。而計算方法一般是通過餘弦相似度。比如對於上面的三文檔兩主題的例子。我們可以計算第一個文本和第二個文本的餘弦相似度如下 :
sim(d1,d2)=(?0.4945)?(?0.6458)+(0.6492)?(?0.7194)(?0.4945)2+0.64922(?0.6458)2+(?0.7194)2
5. LSI主題模型總結
LSI是最早出現的主題模型了,它的演算法原理很簡單,一次奇異值分解就可以得到主題模型,同時解決詞義的問題,非常漂亮。但是LSI有很多不足,導致它在當前實際的主題模型中已基本不再使用。
主要的問題有:
1) SVD計算非常的耗時,尤其是我們的文本處理,詞和文本數都是非常大的,對於這樣的高維度矩陣做奇異值分解是非常難的。
2) 主題值的選取對結果的影響非常大,很難選擇合適的k值。
3) LSI得到的不是一個概率模型,缺乏統計基礎,結果難以直觀的解釋。
對於問題1),主題模型非負矩陣分解(NMF)可以解決矩陣分解的速度問題。對於問題2),這是老大難了,大部分主題模型的主題的個數選取一般都是憑經驗的,較新的層次狄利克雷過程(HDP)可以自動選擇主題個數。對於問題3),牛人們整出了pLSI(也叫pLSA)和隱含狄利克雷分布(LDA)這類基於概率分布的主題模型來替代基於矩陣分解的主題模型。
回到LSI本身,對於一些規模較小的問題,如果想快速粗粒度的找出一些主題分布的關系,則LSI是比較好的一個選擇,其他時候,如果你需要使用主題模型,推薦使用LDA和HDP。
H. Amazon推薦系統是如何做到的
亞馬遜使用了哪些信息進行推薦:
1)當前瀏覽品類
2)與當前商品經常一同購買的商品
3)用戶最近瀏覽記錄
4)用戶瀏覽歷史(長期)中的商品
5)用戶瀏覽歷史(長期)相關的商品
6)購買相同商品的其它用戶購買的物品
7)已購商品的新版本
8)用戶購買歷史(如近期購買商品的互補品)
9)暢銷商品
2、推薦系統模型:U x S → R
1)U是用戶矩陣
2)S是物品矩陣
3)R是用戶對物品的喜愛程度,推薦系統就是基於現有的信息填補R矩陣
3、常用推薦演算法
1)基於內容:易實現,效果好,但是如何獲得一個物品的內容、相似度如何定義等有些情況下會較難把握
2)協同過濾:基於物的協同過濾與基於人的協同過濾
3)矩陣分解(SVD):用戶-物品評分矩陣A很大且稀疏,將A分解為用戶矩陣(用戶潛在因子)和物品矩陣(物品潛在因子),目標是這兩個矩陣的乘積盡可能接近R。缺點是只利用了評分信息,忽略了用戶屬性和物品屬性
4)因子分解機(FM):將SVD推廣到多類潛因子的情況,如分解為 用戶、物品、用戶性別、用戶年齡、物品價格 等多個因子,允許因子之間有相關關系(如下圖,方程前半部分是線性回歸,後半部分加入了兩兩因子間關系)
5)深度學習:訓練深度神經網路,輸入用戶id,輸出層做softmax,得到對每個物品id的權重
6)機器學習排序
7)探索與利用:先對用戶聚類(如分為abcde五類),隨機對a中的用戶1和b中的用戶2推薦電影,如果用戶1沒點擊,2點擊了,說明b類用戶可能對該電影更感興趣。
8)集成:對上述多種方法的ensemble
I. 協同過濾中als演算法輸出兩個分解矩陣u*v什麼意思
在本文中矩陣來用斜體大自寫字母表示(如:R),標量用小寫字母表示(如:i,j)。給定一個矩陣R,
Rij表示它的一個元素,Ri.表示矩陣R的第i行,R.j表示矩陣R的第j列,RT
表示矩陣R的轉置。R-1
表示矩陣R的逆。在本文中給定的矩陣R表示具有m個用戶、n個對象的評分矩陣,矩陣U、
V分別表示用戶和推薦對象的特徵矩陣