整理了一下最近對協同過濾推薦演算法中的皮爾森相似度計算,順帶學習了下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...