日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据挖掘基础知识-矩阵(分解)

發布時間:2025/7/25 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据挖掘基础知识-矩阵(分解) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

from: http://blog.csdn.net/u010140338/article/details/42191047


1. 矩陣知識:

//特征值,行列式,秩,對稱矩陣,單位矩陣,正定半正定,雅可比等等!!

正交矩陣:

如果:AA'=E(E為單位矩陣,A'表示“矩陣A的轉置矩陣”。)或A′A=E,則n階實矩陣A稱為正交矩陣, 若A為正交陣,則滿足以下條件: 1) AT是正交矩陣 2)(E為單位矩陣) 3) A的各行是單位向量且兩兩正交 4) A的各列是單位向量且兩兩正交 5) (Ax,Ay)=(x,y) x,y∈R 6) |A| = 1或-1 2. 矩陣分解(推薦系統)基本思想: 矩陣分解的思想簡單來說就是每一個用戶和每一個物品都會有自己的一些特性,用矩陣分解的方法可以從評分矩陣中分解出用戶——特性矩陣,特性——物品矩陣,這樣做的好處一是得到了用戶的偏好和每件物品的特性,二是見底了矩陣的維度。圖示如下:

用用戶對電影來舉例子就是:每個用戶看電影的時候都有偏好,這些偏好可以直觀理解成:恐怖,喜劇,動作,愛情等。用戶——特性矩陣表示的就是用戶對這些因素的喜歡程度。同樣,每一部電影也可以用這些因素描述,因此特性——物品矩陣表示的就是每一部電影這些因素的含量,也就是電影的類型。這樣子兩個矩陣相乘就會得到用戶對這個電影的喜歡程度。 ---------------------------------------------------------------------------------------------------------------------------

SVD分解:

假設M是一個m×n階矩陣,其中的元素全部屬于域 K,也就是 實數域或復數域。如此則存在一個分解使得 M = UΣV*, 其中U是m×m階酉矩陣;Σ是半正定m×n階對角矩陣;而V*,即V的共軛轉置,是n×n階酉矩陣。這樣的分解就稱作M的奇異值分解。Σ對角線上的元素Σi,i即為M的奇異值。 在矩陣M的奇異值分解中 M = UΣV* ·U的列(columns)組成一套對M的正交"輸入"或"分析"的基向量。這些向量是MM*的特征向量。 ·V的列(columns)組成一套對M的正交"輸出"的基向量。這些向量是M*M的特征向量。 ·Σ對角線上的元素是奇異值,可視為是在輸入與輸出間進行的標量的"膨脹控制"。這些是M*M及MM*的奇異值,并與U和V的行向量相對應

matlab code:

?????

>> A

A =

???? 1???? 2???? 3???? 4???? 5
???? 4???? 3???? 2???? 1???? 4

>> [u,s,v] = svd(A);
>> u

u =

?? -0.7456?? -0.6664
?? -0.6664??? 0.7456

>> s

s =

??? 9.5264???????? 0???????? 0???????? 0???????? 0
???????? 0??? 3.2012???????? 0???????? 0???????? 0

>> v

v =

?? -0.3581??? 0.7235?? -0.2591?? -0.1658?? -0.5038
?? -0.3664??? 0.2824??? 0.2663??? 0.8031??? 0.2647
?? -0.3747?? -0.1587??? 0.8170?? -0.2919?? -0.2858
?? -0.3830?? -0.5998?? -0.3560??? 0.3230?? -0.5123
?? -0.6711?? -0.1092?? -0.2602?? -0.3714??? 0.5762

?

SVD與推薦系統:(http://blog.csdn.net/wuyanyi/article/details/7964883)

-------------------------------------------------------------------------------------

直觀地說:

假設我們有一個矩陣,該矩陣每一列代表一個user,每一行代表一個item。


如上圖,ben,tom....代表user,season n代表item。

矩陣值代表評分(0代表未評分):

如 ben對season1評分為5,tom對season1 評分為5,tom對season2未評分。


機器學習和信息檢索:

機器學習的一個最根本也是最有趣的特性是數據壓縮概念的相關性。

如果我們能夠從數據中抽取某些有意義的感念,則我們能用更少的比特位來表述這個數據。

從信息論的角度則是數據之間存在相關性,則有可壓縮性。

SVD就是用來將一個大的矩陣以降低維數的方式進行有損地壓縮。


降維:

下面我們將用一個具體的例子展示svd的具體過程。

首先是A矩陣。


A =

? ? ?5 ? ? 5 ? ? 0 ? ? 5
? ? ?5 ? ? 0 ? ? 3 ? ? 4
? ? ?3 ? ? 4 ? ? 0 ? ? 3
? ? ?0 ? ? 0 ? ? 5 ? ? 3
? ? ?5 ? ? 4 ? ? 4 ? ? 5
? ? ?5 ? ? 4 ? ? 5 ? ? 5
(代表上圖的評分矩陣)

使用matlab調用svd函數:

[U,S,Vtranspose]=svd(A)

U =
? ?-0.4472 ? -0.5373 ? -0.0064 ? -0.5037 ? -0.3857 ? -0.3298
? ?-0.3586 ? ?0.2461 ? ?0.8622 ? -0.1458 ? ?0.0780 ? ?0.2002
? ?-0.2925 ? -0.4033 ? -0.2275 ? -0.1038 ? ?0.4360 ? ?0.7065
? ?-0.2078 ? ?0.6700 ? -0.3951 ? -0.5888 ? ?0.0260 ? ?0.0667
? ?-0.5099 ? ?0.0597 ? -0.1097 ? ?0.2869 ? ?0.5946 ? -0.5371
? ?-0.5316 ? ?0.1887 ? -0.1914 ? ?0.5341 ? -0.5485 ? ?0.2429

S =
? ?17.7139 ? ? ? ? 0 ? ? ? ? 0 ? ? ? ? 0
? ? ? ? ?0 ? ?6.3917 ? ? ? ? 0 ? ? ? ? 0
? ? ? ? ?0 ? ? ? ? 0 ? ?3.0980 ? ? ? ? 0
? ? ? ? ?0 ? ? ? ? 0 ? ? ? ? 0 ? ?1.3290
? ? ? ? ?0 ? ? ? ? 0 ? ? ? ? 0 ? ? ? ? 0
? ? ? ? ?0 ? ? ? ? 0 ? ? ? ? 0 ? ? ? ? 0

Vtranspose =
? ?-0.5710 ? -0.2228 ? ?0.6749 ? ?0.4109
? ?-0.4275 ? -0.5172 ? -0.6929 ? ?0.2637
? ?-0.3846 ? ?0.8246 ? -0.2532 ? ?0.3286
? ?-0.5859 ? ?0.0532 ? ?0.0140 ? -0.8085

分解矩陣之后我們首先需要明白S的意義。

可以看到S很特別,是個對角線矩陣。

每個元素非負,而且依次減小,具體要講明白元素值的意思大概和線性代數的特征向量,特征值有關。

但是可以大致理解如下:

在線性空間里,每個向量代表一個方向。

所以特征值是代表該矩陣向著該特征值對應的特征向量的方向的變化權重。

所以可以取S對角線上前k個元素。

當k=2時候即將S(6*4)降維成S(2*2),

同時U(6*6),Vtranspose(4*4)相應地變為 U(6*2),Vtranspose(4*2).

如下圖(圖片里的usv矩陣元素值和我自己matlab算出的usv矩陣元素值有些正負不一致,但是本質是相同的):


此時我們用降維后的U,S,V來相乘得到A2

?A2=U(1:6,1:2)*S(1:2,1:2)*(V(1:4,1:2))' //matlab語句

A2 =

? ? 5.2885 ? ?5.1627 ? ?0.2149 ? ?4.4591
? ? 3.2768 ? ?1.9021 ? ?3.7400 ? ?3.8058
? ? 3.5324 ? ?3.5479 ? -0.1332 ? ?2.8984
? ? 1.1475 ? -0.6417 ? ?4.9472 ? ?2.3846
? ? 5.0727 ? ?3.6640 ? ?3.7887 ? ?5.3130
? ? 5.1086 ? ?3.4019 ? ?4.6166 ? ?5.5822

此時我們可以很直觀地看出,A2和A很接近,這就是之前說的降維可以看成一種數據的有損壓縮。

接下來我們開始分析該矩陣中數據的相關性。

?

我們將u的第一列當成x值,第二列當成y值。即u的每一行用一個二維向量表示,同理v的每一行也用一個二維向量表示。

如下圖:


從圖中可以看出:

Season5,Season6特別靠近。Ben和Fred也特別靠近。

同時我們仔細看一下A矩陣可以發現,A矩陣的第5行向量和第6行向量特別相似,Ben所在的列向量和Fred所在的列向量也特別相似。

所以從直觀上我們發現U矩陣和V矩陣可以近似來代表A矩陣,換據話說就是將A矩陣壓縮成U矩陣和V矩陣,至于壓縮比例得看當時對S矩陣取前k個數的k值是多少。

到這里,我們已經完成了一半。

?

尋找相似用戶:

依然用實例來說明:

我們假設,現在有個名字叫Bob的新用戶,并且已知這個用戶對season n的評分向量為:[5 5 0 0 0 5]。(此向量為列向量)

我們的任務是要對他做出個性化的推薦。

我們的思路首先是利用新用戶的評分向量找出該用戶的相似用戶。


如上圖(圖中第二行式子有錯誤,Bob的轉置應為行向量)。

對圖中公式不做證明,只需要知道結論,結論是得到一個Bob的二維向量,即知道Bob的坐標。

將Bob坐標添加進原來的圖中:


然后從圖中找出和Bob最相似的用戶。

注意,最相似并不是距離最近的用戶,這里的相似用余弦相似度計算。(關于相似度還有很多種計算方法,各有優缺點)

即夾角與Bob最小的用戶坐標。

可以計算出最相似的用戶是ben。


接下來的推薦策略就完全取決于個人選擇了。

這里介紹一個非常簡單的推薦策略:

找出最相似的用戶,即ben。

觀察ben的評分向量為:【5 5 3 0 5 5】。

對比Bob的評分向量:【5 5 0 0 0 5】。

然后找出ben評分過而Bob未評分的item并排序,即【season 5:5,season 3:5】。

即推薦給Bob的item依次為 season5 和 season3。

?

最后還有一些關于整個推薦思路的可改進的地方:

1.

svd本身就是時間復雜度高的計算過程,如果數據量大的情況恐怕時間消耗無法忍受。

不過可以使用梯度下降等機器學習的相關方法來進行近似計算,以減少時間消耗。

2.

相似度計算方法的選擇,有多種相似度計算方法,每種都有對應優缺點,對針對不同場景使用最適合的相似度計算方法。

3.

推薦策略:首先是相似用戶可以多個,每個由相似度作為權重來共同影響推薦的item的評分。

-----------------------------------------------------------------------------------------------------------------------------------------------------

?

3. FMF 概率矩陣分解:

為了方便介紹,假設推薦系統中有用戶集合有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 =innerproduct(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取值最小。但矩陣分解有其弱點,就是解釋性差,不能很好為推薦結果做出解釋。

----------------------------------------------------------------------

?

概率的角度來預測用戶的評分,本文假設用戶和商品的特征向量矩陣都符合高斯分布,基于這個假設,用戶對商品的喜好程度就是一系列概率的組合問題,例如

其中

為期望為μ,方差為σ的高斯分布。Iij=1,如果用戶i選擇了商品j,否則為0。在此基礎上,本文通過對用戶的特征向量加以限制,提出了一種新的算法,并且該算法要好于上述提到的算法。

方法:

首先,本文假設預測用戶的喜好是一個概率組合問題:

其中用戶和商品的特征向量都符合高斯分布:

對上述的預測公式取對數,我們可以得到

?優化公式(3)等同于直接優化下列的公式

為了把評分(例如1-5的評分)轉換為0-1,本文采用了如下辦法:

因此對應的預測公式變為

另外本文通過對用戶的特征向量加以限制,即

那么對應的評分預測函數為

其中W為某種權重矩陣,例如可以是相似度矩陣等等,同樣的,W也符合高斯分布

實驗結果:

上圖是本文算法與Netflix系統推薦算法,SVD算法的對比結果。首先,SVD算法overfit比較嚴重,當epoch超過10時,SVD算法就開始overfit了,其次constrained PMF要好于PMF算法,而且該算法比Netflix系統推薦算法精度高7%左右。

另外本文也對比了,不同評分數目的RMSE的精度,如下圖所示:

可以看出,當評分比較少的時候,constrained PMF算法的準確性就更加明顯,另外,如果采用電影的平均分來作為用戶的預測分值,當評分比較少的情況,這種算法跟PMF和constrained PMF算法差別不大,但是當評分比較多時,算法的準確性差異就很明顯了

?


?________________________________________________________________________________________________

?

4. 其他情況:

由于評分矩陣的稀疏性(因為每一個人只會對少數的物品進行評分),因此傳統的矩陣分解技術不能完成矩陣的分解,即使能分解,那樣計算復雜度太高,不現實。因此通常的方法是使用已存在評分計算出出預測誤差,然后使用梯度下降調整參數使得誤差最小。
首先說明一些符號的含義:戴帽子的rui表示預測u對i的打分,qi表示物品i每個特性的歸屬度向量,pu表示用戶u對每個特性的喜歡程度的向量。因此,物品的預測得分為:

下面我們就需要根據已有的數據計算誤差并修正q和p使得誤差最小,誤差的表示方式如下:

(2)式子可以利用評分矩陣中存在的評分數據,使用隨機梯度下降方法進行參數的優化,在此不做介紹。注意第二項是正則式,是為了防止過擬合,具體原理也不太清楚。
計算完闡述后們對于未知的項目就可以使用(1)式子評分。

帶偏置的矩陣分解

?


?

上面的式子是最基本的矩陣分解思想,但實際情況下,卻并不是很好的衡量標準,比如有的網站中的用戶偏向評價高分;有一些用戶偏向評價高分(有的人比較寬容);有的物品被評價的分數偏高(也許由于等口碑原因)。因此在上面的式子中一般都會加入偏置項,u,bi,bu。綜合用下面的式子表示

結果預測式子變成如下:

誤差預測變成如下形式

帶標簽和歷史隱式反饋的矩陣分解

?


?

由于現實的評分矩陣特別稀疏,因此,為了使得數據更加稠密,下面加入了歷史的引述反饋數據(比如用戶瀏覽過瀏覽過某個電影就可以當做一定成的喜愛的正反饋),隱式反饋表現出來的偏好用下面的式子表示,其中xi表示歷史數據所表現出的偏好的向量,跟前面的向量維度相同。前面的權重表示這一項的可信任程度。

同樣,我們也可以使用用戶的標簽(比如年齡,性別,職業)推測用戶對每個因素的喜愛程度,形式化如下,ya表示標簽所表現出的偏好向量。

加入上面因素后的評分估計表示如下:

帶有時間因素的矩陣分解


?

現實生活中,我們每個人的愛好可能隨著時間的改變而改變,每個項目的平均評分也會改變。因此,項目的偏差(即項目高于平均分還是低于平均分)bi,用戶的評分習慣(即偏向于高分還是低分)bu,以及用戶的喜好矩陣pu都是時間的函數。為了更加準確的表達評分,都需要表示成為時間的函數形式,如下(這里沒有考慮歷史標簽等數據):

?

版權聲明:本文為博主原創文章,未經博主允許不得轉載。


總結

以上是生活随笔為你收集整理的数据挖掘基础知识-矩阵(分解)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。