1. 程式人生 > >各種相似度計算的python實現

各種相似度計算的python實現

前言

在資料探勘中有很多地方要計算相似度,比如聚類分析和協同過濾。計算相似度的有許多方法,其中有歐幾里德距離、曼哈頓距離、Jaccard係數和皮爾遜相關度等等。我們這裡把一些常用的相似度計算方法,用python進行實現以下。如果是初學者,我認為把公式先寫下來,然後再寫程式碼去實現比較好。

歐幾里德距離

幾個資料集之間的相似度一般是基於每對物件間的距離計算。最常用的當然是歐幾里德距離,其公式為:

#-*-coding:utf-8 -*-
#計算歐幾里德距離:
def euclidean(p,q):
#如果兩資料集數目不同,計算兩者之間都對應有的數
same = 0
for i in p:
    if i in q:
        same +=1

#計算歐幾里德距離,並將其標準化
e = sum([(p[i] - q[i])**2 for i in range(same)])
return 1/(1+e**.5)

我們用資料集可以去算一下:

p = [1,3,2,3,4,3]
q = [1,3,4,3,2,3,4,3]
print euclidean(p,q)

得出結果是:0.261203874964

皮爾遜相關度

幾個資料集中出現異常值的時候,歐幾里德距離就不如皮爾遜相關度‘穩定’,它會在出現偏差時傾向於給出更好的結果。其公式為:

-*-coding:utf-8 -*-
#計算皮爾遜相關度:
def pearson(p,q):
#只計算兩者共同有的
    same = 0
    for i in p:
        if i in q:
            same +=1

    n = same
    #分別求p,q的和
    sumx = sum([p[i] for i in range(n)])
    sumy = sum([q[i] for i in range(n)])
    #分別求出p,q的平方和
    sumxsq = sum([p[i]**2 for i in range(n)])
    sumysq = sum([q[i]**2 for i in range(n)])
    #求出p,q的乘積和
    sumxy = sum([p[i]*q[i] for i in range(n)])
    # print sumxy
    #求出pearson相關係數
    up = sumxy - sumx*sumy/n
    down = ((sumxsq - pow(sumxsq,2)/n)*(sumysq - pow(sumysq,2)/n))**.5
    #若down為零則不能計算,return 0
    if down == 0 :return 0
    r = up/down
    return r

用同樣的資料集去計算:

p = [1,3,2,3,4,3]
q = [1,3,4,3,2,3,4,3]
print pearson(p,q)

得出結果是:0.00595238095238

曼哈頓距離

曼哈頓距離是另一種相似度計算方法,不是經常需要,但是我們仍然學會如何用python去實現,其公式為:

#-*-coding:utf-8 -*-
#計算曼哈頓距離:
def manhattan(p,q):
#只計算兩者共同有的
    same = 0
    for i in p:
        if i in q:
        same += 1
#計算曼哈頓距離
    n = same
    vals = range(n)
    distance = sum(abs(p[i] - q[i]) for i in vals)
    return distance

用以上的資料集去計算:

p = [1,3,2,3,4,3]
q = [1,3,4,3,2,3,4,3]
print manhattan(p,q)

得出結果為4

Jaccard係數

當資料集為二元變數時,我們只有兩種狀態:0或者1。這個時候以上的計算相似度的方法就無法派上用場,於是我們引出Jaccard係數,這是一個能夠表示兩個資料集都是二元變數(也可以多元)的相似度的指標,其公式為:

#-*-coding:utf-8 -*-
# 計算jaccard係數
def jaccard(p,q):
    c = [a for i in p if v in b]
    return float(len(c))/(len(a)+len(b)-len(b))
#注意:在使用之前必須對兩個資料集進行去重
我們用一些特殊的資料集去測試一下:

p = ['shirt','shoes','pants','socks']
q = ['shirt','shoes']
print jaccard(p,q)
得出結果是:0.5

相關推薦

各種相似計算python實現

前言 在資料探勘中有很多地方要計算相似度,比如聚類分析和協同過濾。計算相似度的有許多方法,其中有歐幾里德距離、曼哈頓距離、Jaccard係數和皮爾遜相關度等等。我們這裡把一些常用的相似度計算方法,用python進行實現以下。如果是初學者,我認為把公式先寫下來,

用gensim doc2vec計算文字相似Python可以跑通的程式碼

Python3.7版本,轉載自:https://blog.csdn.net/juanjuan1314/article/details/75124046 wangyi_title.txt檔案下載地址:連結:https://pan.baidu.com/s/1uL75P13t98YHMqgv3Kx7T

Python 文字挖掘:使用gensim進行文字相似計算

index = similarities.MatrixSimilarity(corpus_tfidf)#把所有評論做成索引 sims = index[vec_tfidf]#利用索引計算每一條評論和商品描述之間的相似度 similarity = list(sims)#把相似度儲存成陣列,以便寫入txt 文件

螞蟻金服金融大腦的挑戰賽的實現程式碼 NLP文字相似計算

近期做了一些NLP的研究,並基於6月份螞蟻金服金融大腦的挑戰賽,完成了文字相似度計算的驗證。主要思路是基於word2vec來進行訓練,並實現文字相似度的計算。所使用的語料,包括了公開的wiki語料,網友收集的微信語料,以及此大賽中的語料。其中微信語料的位置在https://s

Scala實現Pearson皮爾遜相似計算

皮爾遜相似度是推薦演算法中常見的 計算相似度的方法,其公式如下: 從公式可以看出 該演算法有幾個缺點: 1,如果使用者A對所有item的評分都一樣,那麼將無法計算別人跟A的相似度(分母為0);所以該演算法不適用於 boolean preference型別的推薦 2,如果

基於Word2Vec的相似計算python

前言    此篇文章的基礎知識部分總結了一些別人的文章解釋,環境為Windows10下的python3.5版本,需要的包為gensim。程式碼很簡要,不足之處請說明。一. 背景知識1.1詞向量詞向量(word2vec)是一個將單詞轉換成向量形式的工具。可以把對文字內容的處理簡

使用 TF-IDF 加權的空間向量模型實現句子相似計算

使用 TF-IDF 加權的空間向量模型實現句子相似度計算 字元匹配層次計算句子相似度 計算兩個句子相似度的演算法有很多種,但是對於從未了解過這方面演算法的人來說,可能最容易想到的就是使用字串匹配相關的演算法,來檢查兩個句子所對應的字串的字元相似程度。比如單純的進行子串匹配,搜尋 A 串中能與 B 串匹配的

用戶相似計算

計算 使用 val PE 相似度 ID turn 稀疏 code 協同過濾中用戶距離計算 # 構建共同的評分向量 def build_xy(user_id1, user_id2): bool_array = df.loc[user_id1].notnull() &

Spark MLlib 之 大規模數據集的相似計算原理探索

tis afr 廣播 圖片 times 導致 coord 向量 校驗 無論是ICF基於物品的協同過濾、UCF基於用戶的協同過濾、基於內容的推薦,最基本的環節都是計算相似度。如果樣本特征維度很高或者<user, item, score>的維度很大,都會導致無法直

短文本相似計算

實用 好的 svm center 大量 network alt 詞匯 很難 短文本的相似度計算方法可以分為兩大類:基於深度學習的方法和基於非深度學習的方法。科研方面基本都是從深度學習方面入手,但個人覺得想把單語言的短文本相似度計算給做出花來比較難,相對而言基

1. 文本相似計算-文本向量化

就是 mage method 根據 計算 down youdao 比較 所有 1.前言 在自然語言處理過程中,經常會涉及到如何度量兩個文本之間的相似性,我們都知道文本是一種高維的語義空間,如何對其進行抽象分解,從而能夠站在數學角度去量化其相似性。 有了文本之間相似性的度量方

影象相似計算-kmeans聚類

關於影象相似度,主要包括顏色,亮度,紋理等的相似度,比較直觀的相似度匹配是直方圖匹配.直方圖匹配演算法簡單,但受亮度,噪聲等影響較大.另一種方法是提取影象特徵,基於特徵進行相似度計算,常見的有提取影象的sift特徵,再計算兩幅影象的sift特徵相似度.對於不同的影象型別,也可以採用不同的

協同過濾相似計算

   (1)傳統的傑卡德相似度計算公式如下,  其中A,B可以為不同使用者的購物品類,         當用戶量特別大的時候,導致計算複雜度比較高,因為直接進行了笛卡爾積運算,這時候可能沒有辦法進行運算。優化方法

顏色直方圖+餘弦相似 c++opencv實現

原理部分來自阮一峰部落格 http://www.ruanyifeng.com/blog/2013/03/similar_image_search_part_ii.html 顏色分佈法: 每張圖片都可以生成顏色分佈的直方圖(color histogram)。如果兩張圖片的直方圖很接近,就可

相似計算之Jaccard係數

Jaccard相似係數 定義 給定兩個集合A,B,Jaccard 係數定義為A與B交集的大小與A與B並集的大小的比值,定義如下: 當集合A,B都為空時,J(A,B)定義為1。 與Jaccard 係數相關的指標叫做Jaccard 距離,用於描述集合之間的不相似度。Jaccard

餘弦相似計算[轉載]

轉自:https://www.cnblogs.com/dsgcBlogs/p/8619566.html 1.定義及計算公式   餘弦相似度用向量空間中兩個向量夾角的餘弦值作為衡量兩個個體間差異的大小。 餘弦值越接近1,就表明夾角越接近0度,也就是兩個向量越相似,這就叫"餘弦相似性"。

nlp中文字相似計算問題

文章的目的:文字相似度計算一直是nlp中常見的問題,本文的目標是總結並對比文字相似度計算方法。當然文字的相似度計算會有進一步的應用,比如文字的分類、聚類等。 文章結構:本文先介紹最直接的字面距離相似度度量,而後介紹語義主題層面的度量,最後介紹目前一些新的相似度計算方法。 一、字面距

句子相似計算的幾種方法

在做自然語言處理的過程中,我們經常會遇到需要找出相似語句的場景,或者找出句子的近似表達,這時候我們就需要把類似的句子歸到一起,這裡面就涉及到句子相似度計算的問題,那麼本節就來了解一下怎麼樣來用 Python 實現句子相似度的計算。 基本方法 句子相似度計算我們一共歸類

雜湊演算法-圖片相似計算

雜湊演算法實現圖片相似度計算 實現圖片相似度比較的雜湊演算法有三種:均值雜湊演算法,差值雜湊演算法,感知雜湊演算法 1.均值雜湊演算法 一張圖片就是一個二維訊號,它包含了不同頻率的成分。亮度變化小的區域是低頻成分,它描述大範圍的資訊。而亮度變化劇烈的區域(比如物

高效相似計算 LSH minHash simHash的學習

joey 周琦 本文首先介紹了局部敏感雜湊的概念與用處,然後介紹了常見的快速計算相似度、尋找近鄰的方法minHash, simHash 區域性敏感雜湊Locality-sensitive hashing (LSH) 定義 首先我們看看wiki上比較準確的英文