基於用戶的協同過濾

来源:http://www.cnblogs.com/one--way/archive/2016/07/06/5647273.html
-Advertisement-
Play Games

協同過濾推薦(Collaborative Filtering Recommendation) 基於用戶的協同過濾分為兩個步驟: 1. 找到與目標用戶興趣相似的用戶集合 2. 找到這個集合中用戶喜歡的、並且目標用戶沒有聽說過的物品推薦給目標用戶 計算兩個用戶的興趣相似度: 設 N(u) 為用戶 u 喜 ...


協同過濾推薦(Collaborative Filtering Recommendation)

User-based CF: 基於User的協同過濾,通過不同用戶對Item的評分來評測用戶之間的相似性,根據用戶之間的相似性做出推薦;

 

基於用戶的協同過濾分為兩個步驟:

1. 找到與目標用戶興趣相似的用戶集合

2. 找到這個集合中用戶喜歡的、並且目標用戶沒有聽說過的物品推薦給目標用戶

 

計算兩個用戶的興趣相似度:

設 N(u) 為用戶 u 喜歡的物品集合,N(v) 為用戶 v 喜歡的物品集合:

Jaccard 公式:

   

餘弦相似度:

   

       

       

其中分母表示兩個向量b和c的長度,分子表示向量的內積。

 

                   

在本例中,用戶A對物品{a,b,c}有過行為,用戶B對物品{a,c}有過行為,利用餘弦相似度公式計算用戶A和用戶B的興趣相似度,以及A和C、D的相似度:

               

  向量A = {1,1,0,1,0};

  向量B = {1,0,1,0,0};

     

   

  如果兩兩用戶都利用餘弦相似度計算相似度。這種方法的時間複雜度是O(|U|*|U|),這在用戶數很大的情況下十分耗時。事實上,很多用戶相互之間並沒有相同的物品產生行為,即很多時候N(u)和N(v)的交集為0。那麼,一種高效的演算法就是首先計算出交集不為0的用戶對{u,v},然後再對這種情況除以分母|N(u)UN(v)|(或者另一種根號形式)。

  為此,可以首先建立物品到用戶的 倒查表 ,對於每個物品都保存對該物品產生過行為的用戶列表。令繫數矩陣C[u][v]=|N(u)並N(v)|。那麼,假設用戶u和用戶v同時屬於倒排表中K個物品對應的用戶列表,就有C[u][v]=K。從而,可以掃描倒查表中每個物品對應的用戶列表,將用戶列表中的兩兩用戶對應的C[u][v]加1,最終就可以得到所有用戶之間不為0的C[u][v]。

建立的倒查表:

     

  

  建立一個4*4的 用戶相似度矩陣W ,對於物品a,將W[A][B]和W[B][A]加1,對於物品b,將W[A][C]和W[C][A]加1,以此類推。掃描完所有物品後,我們可以得到最終的W矩陣。這裡的W是餘弦相似度中的分子部分,然後將W除以分母可以得到最終的用戶興趣相似度。

                   

 

推薦物品:

  首先需要從矩陣中找出與目標用戶 u 最相似的 K 個用戶,用集合 S(u, K) 表示,將 S 中用戶喜歡的物品全部提取出來,並去除 u 已經喜歡的物品。對於每個候選物品 i ,用戶 u 對它感興趣的程度用如下公式計算:

    

  其中 rvi 表示用戶 v 對 i 的喜歡程度,在本例中都是為 1,在一些需要用戶給予評分的推薦系統中,則要代入用戶評分。

      舉個例子,假設我們要給 A 推薦物品,選取 K = 3 個相似用戶,相似用戶則是:B、C、D,那麼他們喜歡過並且 A 沒有喜歡過的物品有:c、e,那麼分別計算 p(A, c) 和 p(A, e):

    

            

  用戶 A 對 c 和 e 的喜歡程度是一樣的,在真實的推薦系統中,只要按得分排序,取前幾個物品就可以了。

           


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ...
  • 已知:資料庫1:TEST1;資料庫2:TEST2 要求:在資料庫1上創建到資料庫2的DB Link方案一: 1、在資料庫1所在電腦,創建到資料庫2的服務名:orl_test22、在資料庫1或者其他能裝有ORACLE客戶端的電腦上創建資料庫1到資料庫2的DB Link,方法如下: * 登錄SQL*PL ...
  • MySQL函數不能創建,是一個很麻煩的問題,下麵就為您提供了一個解決此問題的方法,如果您也遇到過類似的問題,不妨一看。 http://database.51cto.com/art/201010/229918.htm MySQL函數不能創建,是一個很麻煩的問題,下麵就為您提供了一個解決此問題的方法,如 ...
  • 【開發過程的隨筆總結,歡迎您的點評,可以做到更加嚴謹】 簡介:mongoDB noSql資料庫 文檔型資料庫 前些天,做一個日誌歸類入庫項目的時候 用mongoDB進行持久化存儲 防止mongoDb的無許可權鏈接,添加了許可權驗證 1 如果mongoDB是開放內網地址的話,不用擔心外部鏈接 2 mong ...
  • 今天在PlateSpin Forge(關於PlateSpin相關介紹,請見最下麵部分簡單介紹) 複製出來的一臺資料庫伺服器上,測試資料庫能否正常啟動時,遇到了“ORA-00600: internal error code, arguments: [kcratr1_lastbwr], [], [], ... ...
  • 基於物品的協同過濾演算法ItemCF 基於item的協同過濾,通過用戶對不同item的評分來評測item之間的相似性,基於item之間的相似性做出推薦。簡單來講就是:給用戶推薦和他之前喜歡的物品相似的物品。 用例說明: 註:基於物品的協同過濾演算法,是目前商用最廣泛的推薦演算法。 剛開始看這個用例,感覺還 ...
  • IDENT_CURRENT('TableName')為當前的最大標識值,IDENT_INCR('TableName')為設置的標識值增量, 兩者相加即為下一個標識值 SELECT IDENT_CURRENT('TableName') + IDENT_INCR('TableName'); 參考鏈接:h ...
  • 介紹 有時候我們需要原封不動的複製一張表的表結構來生成一張新表,MYSQL提供了兩種便捷的方法。 例: CREATE TABLE tb_base( id INT NOT NULL PRIMARY KEY, name VARCHAR(10), KEY ix_name (name)) ENGINE='M ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...