天天看點

相似度算法之皮爾遜相關系數

皮爾遜相關系數是比歐幾裡德距離更加複雜的可以判斷人們興趣的相似度的一種方法。該相關系數是判斷兩組資料與某一直線拟合程式的一種試題。它在資料不是很規範的時候,會傾向于給出更好的結果。

相似度算法之皮爾遜相關系數

如圖,Mick Lasalle為<<Superman>>評了3分,而GeneSeyour則評了5分,是以該影片被定位中圖中的(3,5)處。在圖中還可以看到一條直線。其繪制原則是盡可能地靠近圖上的所有坐标點,被稱為最佳拟合線。如果兩位評論者對所有影片的評分情況都相同,那麼這條直線将成為對角線,并且會與圖上所有的坐标點都相交,進而得到一個結果為1的理想相關度評價。

假設有兩個變量X(x1,x2,x3,……)、Y(y1,y2,y3,……),那麼兩變量間的皮爾遜相關系數可通過以下公式計算:

公式一:

相似度算法之皮爾遜相關系數

皮爾遜相關系數計算公式

公式二:

相似度算法之皮爾遜相關系數

皮爾遜相關系數計算公式

公式三:

相似度算法之皮爾遜相關系數

皮爾遜相關系數計算公式

公式四:

相似度算法之皮爾遜相關系數

皮爾遜相關系數計算公式

以上列出的四個公式等價,其中E是數學期望,cov表示協方差,N表示變量取值的個數。

皮爾遜相關度評價算法首先會找出兩位評論者都曾評論過的物品,然後計算兩者的評分總和與平方和,并求得評分的乘積之各。利用上面的公式四計算出皮爾遜相關系數。

在實踐統計中,一般隻輸出兩個系數,一個是相關系數,也就是計算出來的相關系數大小,在-1到1之間;另一個是獨立樣本檢驗系數,用來檢驗樣本一緻性.

根據皮爾遜相關系數的值參考以下标準,可以大概評估出兩者的相似程度:

  • 0.8-1.0 極強相關
  • 0.6-0.8 強相關
  • 0.4-0.6 中等程度相關
  • 0.2-0.4 弱相關
  • 0.0-0.2 極弱相關或無相關

當然,在使用過程中該算法也不使用所有的場景,需要變量X,Y滿足以下幾個限制條件:

  • 1 兩個變量間有線性關系
  • 2 變量是連續變量
  • 3 變量均符合正态分布,且二進制分布也符合正态分布
  • 4 兩變量獨立

算法實作如下:

#皮爾遜相似度算法
def PearsonSimilarity(UL,p1,p2):
	si = GetSameItem(UL,p1,p2)
	n = len(si)
	if n == 0:
		return 0

	sum1 = sum([UL[p1][item] for item in si])
	sum2 = sum([UL[p2][item] for item in si])

	sqSum1 = sum([pow(UL[p1][item],2) for item in si])
	sqSum2 = sum([pow(UL[p2][item],2) for item in si])

	pSum = sum([UL[p1][item]*UL[p2][item] for item in si])

	num = pSum - (sum1*sum2/n)
	den = math.sqrt(sqSum1-pow(sum1,2)/n)*math.sqrt(sqSum2-pow(sum2,2)/n)

	if den ==0:
		return 0

	r = num/den
	return r
           

注:本文很大一部分内容轉自:http://lobert.iteye.com/blog/2024999,因為這位仁兄總結的确實很好。本文後續部分略作補充,謹作抛磚引玉之用。

繼續閱讀