如何一步一步構建推薦引擎(下)

如今咱們已經轉換了一組數據,咱們能夠使用它來爲某些用戶找到相似的電影。 有許多純粹的和混合的類似度指標有所差別。
git


  • 餘弦類似度github

  • 歐幾里德目的地編程

  • Jaccard的索引app

  • 皮爾森相關機器學習


這些指標,咱們只檢查一部分就能夠。ide


4.1 餘弦類似度函數


餘弦類似度,又稱爲餘弦類似性(Cosine similarity),是經過計算兩個向量的夾角餘弦值來評估他們的類似度。餘弦類似度將向量根據座標值,繪製到向量空間中,如最多見的二維空間。學習


咱們要從指定的數據中找到兩個或更多個元素的類似度時,就要用餘弦類似度。它很是好而且常常使用,常常被用到機器學習行業。若是你第一次聽到這個名詞,或者之前學的忘了,建議去看餘弦類似性的視頻。spa


餘弦類似度的數學公式:翻譯


圖片


這個公式也能夠翻譯爲:用戶A與用戶B對電影i的評分的總和,除以A評分的平方,乘以B評分的平方。


4.2 Pearson 相關性


Pearson的計算結果與餘弦類似性很是相像。咱們就再也不詳細討論了,你能夠維基百科的找到相關的名詞解釋。


圖片


如今咱們有一個函數,經過餘弦類似度去計算用戶興趣類似性的函數,這大部分就是咱們須要的。根據這些數據,咱們就能夠根據用戶之前觀看的內容作一個推薦感興趣的電影的推薦系統。


咱們經過如下的Python編程計算類似性功能。


def cos_similarity(people,movie1,movie2):
    si={}
    for item in people[movie1]:
        if item in people[movie2]:
            si[item]=1
    if len(si)==0:
        return 0
    sum1=0
    sum21=0
    sum22=0
    for item in si:
        sum1+=(people[movie1][item]*people[movie2][item])
        sum21+=pow(people[movie1][item],2)
        sum22+=pow(people[movie2][item],2)
    if sum21==0 or sum22==0:
        return 0

    return round(sum1/(sqrt(sum21)*sqrt(sum22)),2)


5.輸出


最後,讓咱們來看輸出結果。


第一步,須要有一個已觀看電影的數據集合:


movies_watched=["You, Me and Dupree","Catch Me If You Can","Snitch"]

如今系統通過了學習,會爲咱們推薦喜歡的電影。當前是之前的計算結果 ,也會作出輸出。


------------------------------
| You, Me and Dupree          |
-------------------------------
Catch Me If You Can 0.97
Just My Luck 0.85
Lady in the Water 0.96
Snakes on a Plane 0.97
Snitch 1.0
Superman Returns 0.98
The Night Listener 0.96
------------------------------
| Catch Me If You Can        |
------------------------------
Just My Luck 1.0
Lady in the Water 0.98
Snakes on a Plane 0.99
Snitch 1.0
Superman Returns 1.0
The Night Listener 0.92
You, Me and Dupree 0.97
------------------------------
| Snitch                     |
------------------------------
Catch Me If You Can 1.0
Just My Luck 1.0
Lady in the Water 0.91
Snakes on a Plane 0.99
Superman Returns 0.99
The Night Listener 0.88
You, Me and Dupree 1.0
------------------------------


能夠看到系統建議的內容。 與「Snitch」最類似的是「Catch Me If You Can」,「Supermermen Returns」等,至關於類似性度量(電影片名以後的數字)。咱們想要3個最類似的電影,能夠添加閾值來識別類似度。 例如,咱們能夠將閾值設置爲0.98,而且每一個超過閾值的電影將出如今咱們的屏幕上。


------------------------------
| You, Me and Dupree          |
-------------------------------
Snitch 1.0
Superman Returns 0.98
------------------------------
| Catch Me If You Can        |
------------------------------
Just My Luck 1.0
Lady in the Water 0.98
Snakes on a Plane 0.99
Snitch 1.0
Superman Returns 1.0
------------------------------
| Snitch                     |
------------------------------
Catch Me If You Can 1.0
Just My Luck 1.0
Snakes on a Plane 0.99
Superman Returns 0.99
You, Me and Dupree 1.0
------------------------------

以上介紹給你們的完整代碼,已經所有在Github。

地址爲:https://github.com/Mitko06/Recommender-System


結論


祝賀你們,如今咱們已經知道如何構建推薦系統的基礎知識。

固然,在現實世界中須要創建更復雜的推薦系統。但其中95%都是基於餘弦類似性,歐幾里德類似性,Pearson相關性等指標。

創建一個推薦系統須要時間和數據積累,本教程已經所有闡述如何構建推薦系統,你們能夠依此開發不一樣的個性化推薦引擎。


如今評論分享你的想法,關於本教程,還有其它任何問題。

相關文章
相關標籤/搜索