我們對同樣的一些電影,書,音樂進行評分,從這些評分中能看到我們彼此之間的相似度麼?說到這裡你可能會想到豆瓣,我們有沒有方法來模仿豆瓣計算這種相似度呢?本文是《集體智慧程式設計》介紹相似度算法:歐幾裡德距離和皮爾遜相關度系數的一次演練。
本文将介紹.
距離是在傳統統計學和資料挖掘中衡量接近程度的關鍵度量。我們如何衡量接近程度或距離呢?在詳細介紹不同距離度量方式前,讓我們先描述一個便于讨論的問題場景。
故事是這樣的:一些人對同樣的一些電影做出了評價,我們将在這個基礎上進行分析.我們按照IMDB的評分規則,10分為電影的最高評分.首先我們将能夠描述這一事實的資料構造出來放入資料庫中.我們需要下列的表:
o Moive表 電影資訊表
o UserInfo表 使用者表(這些人将對電影給出評分)
o Moive_Level表
使用下面的SQL語句就可以完成上面資料表的建表工作.

CREATE TABLES
首先是Moive電影表,我從一些電影網站中抽取了1330條電影資訊,覆寫了愛情電影,動作電影,科幻電影等各種類型的電影.實際上我們坐算法示範的時候隻用到其中的10條資料.如下圖,這10條資料是比較有代表性的,從類型和發行時間上都有特點..
下列使用者将對上面的十部電影進行評價:
使用者對電影的評價是如下結構(下圖試資料片段):
一個簡單常用的距離度量是歐幾裡德距離。它以人們都評價過的電影為坐标軸,然後将參與評價的人繪制在圖上,并考察它們的距離遠近,換句話說這幅圖就是描述了處于偏好空間中的人們.第一種算法考察方法是:
為了友善将這個算法應用到資料庫上,我們建立一個存儲過程EuclideanDistance:

EuclideanDistance

Code
但是當評價結果中,評價者的評價相對于平均水準偏離很大的時候歐幾裡德距離不能很好的揭示出真實的相似度.還有一種評價方法就是使用皮爾遜相關系數,它可以完成"誇大值糾偏":
<b></b>
兩個變量之間的相關系數越高,從一個變量去預測另一個變量的精确度就越高,這是因為相關系數越高,就意味着這兩個變量的共變部分越多,是以從其中一個變量的變化就可越多地獲知另一個變量的變化。如果兩個變量之間的相關系數為1或-1,那麼你完全可由變量X去獲知變量Y的值。
· 當相關系數為0時,X和Y兩變量無關系。
· 當X的值增大,Y也增大,正相關關系,相關系數在0.00與1.00之間
· 當X的值減小,Y也減小,正相關關系,相關系數在0.00與1.00之間
· 當X的值增大,Y減小,負相關關系,相關系數在-1.00與0.00之間
當X的值減小,Y增大,負相關關系,相關系數在-1.00與0.00之間
相關系數的絕對值越大,相關性越強,相關系數越接近于1和-1,相關度越強,相關系數越接近于0,相關度越弱。