皮爾森相似度計算舉例 R語言

2021-06-26 07:01:39 字數 2939 閱讀 1825

整理了一下最近對協同過濾推薦演算法中的皮爾森相似度計算,順帶學習了下r語言的簡單使用,也複習了概率統計知識。

一、概率論和統計學概念複習

1)期望值(expected value)

因為這裡每個數都是等概率的,所以就當做是陣列或向量中所有元素的平均數吧。可以使用r語言中函式mean()。

2)方差(variance)

方差分為population variance總體方差和sample variance樣本方差,區別是總體方差除以n,樣本方差除以n-1。

數理統計中常用樣本方差,r語言的var()函式計算的也是樣本方差。具體原因是樣本方差是無偏的(unbiased),想刨根問底可以google一下。

3)標準差(standard variance)

很簡單,標準差就是方差的平方根。r語言中函式為sd()。

4)協方差(covariance)

也分成總體協方差和樣本協方差,區別同上。r語言中函式為cov()。注意向量中有空元素(na)時,例如稀疏矩陣中的一行,則要cov(x,y, use='complete')。

方差也可以看做是協方差的特例,也就是:var(x)=cov(x,x)。

這裡只列舉了計算公式,看著有些頭暈,具體還是看下面例子吧,一看就懂了。

二、相似度計算在協同過濾推薦演算法中的地位

在協同過濾推薦演算法中,不管是基於使用者(user-based)還是基於物品(item-based),都要通過計算使用者或物品間的相似度,得到離線模型(訓練學習過程)。

之後再利用排序和加權演算法得到最終的推薦物品top-n列表。不同相似度演算法的選擇對最終推薦結果會產生很大的影響。

1)余弦相似度(cosine-based similiarity)

2)相關性相似度(correlation-based similiarity)

這種相似度計算使用的演算法就是皮爾森。

3)修正余弦相似度(adjusted cosine-based similiarity)

三、r語言入門簡介

windows下的r語言安裝包位址為:

常用的函式都可以從網上中查詢到:

要習慣的一點是,r語言的表達方式,例如在控制台輸入:

> x

> x-mean(x)

[1] -4.5 -3.5 -2.5 -1.5 -0.5  0.5  1.5  2.5  3.5  4.5

x-mean(x)的含義是都向量x中每個元素都減去x的平均數mean(x),可以說這種表達方式高度抽象化,表現力很強。

之後我們可以用其他函式對計算結果進行聚合:

> sum(x-mean(x))

[1] 0

四、皮爾森相似度(pearson similiarity)計算舉例

下面以另一篇文章中的使用者-物品關係為例,說明一下皮爾森相似度的計算過程。

皮爾森相似度的原始計算公式為:

,不繼續展開化簡。

1)定義使用者陣列(向量)

user1

user5

2)計算方差

var(user1)=sum((user1-mean(user1))^2)/(3-1)=1.75

var(user2)=sum((user5-mean(user5))^2)/(3-1)=1

3)計算標準差

sd(user1)=sqrt(var(user1))=1.322876

sd(user5)=sqrt(var(user5))=1

4)計算協方差

cov(user1, user5)

=sum((user1-mean(user1))*(user5-mean(user5)))/(3-1)

=1.25

5)計算相似度

cor(user1, user5)

=cov(user1, user5) / (sd(user1)*(sd(user5)))

=0.9449112

五、數學特性和存在問題

以下1)和2)整理自維基百科:

1)代數特性

皮爾遜相關係數的變化範圍為-1到1。 係數的值為1意味著x 和 y可以很好的由直線方程來描述,所有的資料點都很好的落在一條 直線上,且 y 隨著 x 的增加而增加。

係數的值為−1意味著所有的資料點都落在直線上,且 y 隨著 x 的增加而減少。係數的值為0意味著兩個變數之間沒有線性關係。

因兩個變數的位置和尺度的變化並不會引起該係數的改變,即它該變化的不變數 (由符號確定)。也就是說,我們如果把x移動到a + bx和把y移動到c + dy,其中a、b、c和d是常數,

並不會改變兩個變數的相關係數(該結論在總體和樣本皮爾遜相關係數中都成立)。我們發現更一般的線性變換則會改變相關係數。

2)幾何學含義

對於沒有中心化的資料, 相關係數與兩條可能的回歸線y=gx(x) 和 x=gy(y) 夾角的余弦值一致。

對於中心化過的資料 (也就是說, 資料移動乙個樣本平均值以使其均值為0), 相關係數也可以被視作由兩個隨機變數 向量 夾角theta 的余弦值(見下方)。

3)存在問題

這也就是為什麼會導致user1和user4更為相似的原因了,儘管user4只對item101和103評分,但是這兩個評分形成的直線與user1形成的直線趨勢更為接近。

同時另乙個問題是,如果一些幾何變換不會影響相關係數,則評分的高低也被忽略掉了,只是分數的趨勢會影響。當然這對於矩陣中都是0和1的使用者-物品購買矩陣沒有什麼影響。

皮爾森相關性的相似度

基於皮爾森相關性的相似度 pearson correlation based similarity 標準差 standard deviation 標準差是方差的平方根 方差 variance 在概率論和統計學中,乙個隨機變數的方差表述的是它的離散程度,也就是該變數與期望值的距離。即方差等於誤差的平方...

相似度計算

從多個維度分析兩組資料的相似度,比如大的文字使用word2vec轉成向量,類別根據最大的類別數量n拆成n維0或1表示的vector,數值型別歸一化之後表示乙個維度,然後根據cos l1 l2等方式計算相似度 可以用於推薦系統 協同過濾等演算法 注意double值的精度處理 將向量根據座標值,繪製到向...

相似度計算

author wepon blog machine learning in action 筆記,相似度計算,基於python numpy。假如我們希望相似度的值在0 1之間,並且越相似,值越大,有哪些辦法?1 計算歐式距離,然後根據 相似度 1 1 距離 計算相似度。2 皮爾遜相關係數,在numpy...