基於物品的協同過濾

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

基於物品的協同過濾演算法ItemCF 基於item的協同過濾,通過用戶對不同item的評分來評測item之間的相似性,基於item之間的相似性做出推薦。簡單來講就是:給用戶推薦和他之前喜歡的物品相似的物品。 用例說明: 註:基於物品的協同過濾演算法,是目前商用最廣泛的推薦演算法。 剛開始看這個用例,感覺還 ...


基於物品的協同過濾演算法ItemCF

基於item的協同過濾,通過用戶對不同item的評分來評測item之間的相似性,基於item之間的相似性做出推薦。簡單來講就是:給用戶推薦和他之前喜歡的物品相似的物品。

用例說明:

註:基於物品的協同過濾演算法,是目前商用最廣泛的推薦演算法。

剛開始看這個用例,感覺還是基於用戶進行的推薦,用戶A,B,C都喜歡物品a,並且用戶A,B喜歡物品c,然後就將物品c推薦給用戶C。

再回過頭來看看基於物品的協同過濾的概念:給用戶推薦和他之前喜歡的物品相似的物品。按我的理解和其他用戶的喜好並沒有什麼直接關係;比如用戶C喜歡帽子a,再給他推薦個類似的商品帽子b就可以了。

比如:物品a為啤酒,物品c為尿布,符合圖例,則向用戶C推薦的物品為尿布,因為物品a和物品c相似?,所以就向用戶C推薦了此商品。顯然這裡的相似並不是決對的相同種類或類型的物品。

 

那物品的相似是怎麼計算出來的哪?

Iterm-based的基本思想是預先根據所有用戶的歷史偏好數據計算物品之間的相似性,然後把與用戶喜歡的物品相類似的物品推薦給用戶。

這樣解釋就可以很好的說明上面的疑問了。

當然也可以直接針對不同物品建立相似性關係。計算出不同物品的相似度。

 

相似度

  當已經對用戶行為進行分析得到用戶喜好後,我們可以根據用戶喜好計算相似用戶和物品,然後基於相似用戶或者物品進行推薦,這就是最典型的 CF 的兩個分支:基於用戶的 CF 和基於物品的 CF。這兩種方法都需要計算相似度。

  關於相似度的計算,現有的幾種基本方法都是基於向量(Vector)的,其實也就是計算兩個向量的距離,距離越近相似度越大。在推薦的場景中,在用戶 - 物品偏好的二維矩陣中,我們可以將一個用戶對所有物品的偏好作為一個向量來計算用戶之間的相似度,或者將所有用戶對某個物品的偏好作為一個向量來計算物品之間的相似度。

上一篇文章中基於用戶的協同過濾,建立的用戶相似矩陣,此篇文章是建立的物品相似度的矩陣。

 

同現矩陣(Co-occurrence Matrix): 反應物品關聯度的矩陣

生成同現矩陣

數據:user,item,grade

1,101,5.0
1,102,3.0
1,103,2.5
2,101,2.0
2,102,2.5
2,103,5.0
2,104,2.0
3,101,2.0
3,104,4.0
3,105,4.5
3,107,5.0
4,101,5.0
4,103,3.0
4,104,4.5
4,106,4.0
5,101,4.0
5,102,3.0
5,103,2.0
5,104,4.0
5,105,3.5
5,106,4.0

用戶1的三個item 101,102,103形成9種組合,相應位置加1.

      [101] [102] [103]  
[101]   1     1     1     
[102]   1     1     1      
[103]   1     1     1     

最終結果:
      [101] [102] [103] [104] [105] [106] [107]
[101]   5     3     4     4     2     2     1
[102]   3     3     3     2     1     1     0
[103]   4     3     4     3     1     2     0
[104]   4     2     3     4     2     2     1
[105]   2     1     1     2     2     1     1
[106]   2     1     2     2     1     2     0
[107]   1     0     0     1     1     0     1

 

下麵內容摘自一論壇:

再談談Co-occurrence Matrix(同顯矩陣)和User Preference Vector(用戶評分向量)相乘得到的這個Recommended Vector(推薦向量)的意義

 

第一次聽完理論直接上這兩個東西相乘實現Item Based Cooperative Filtering(基於物品的協同過濾),一下子真沒反應過來,下麵就個人的理解通俗的解釋一下:   ItemBased:基於物品的(區分於基於用戶的)體現在同現矩陣,把所有用戶對物品打過分的記錄都拿過來,形成一個個反應物品關聯度的矩陣Co-occurrence Matrix,下麵簡稱C矩陣。 為什麼乘以User Preference Vector用戶評分向量就是Recommended Vector(推薦向量),這個推薦向量又要怎麼用呢? 還是用R的第三項24.5來做一下解釋,   R3的解釋:對於用戶U商品103的可推薦度。 這點很重要,理解這點就是要知道我們這一系列演算法過程在做什麼(What)。

 

我把R3也就是R103的計算用公式表示如下: R3怎麼出來的

 

從上面可以看到C103i*Ui就是Ui代表用戶對i的喜愛度,C103i代表i和103同時出現的次數,i物品和103同時出現得越多C103i越大,用戶對i的喜愛度值越大Ui越大,自然R103值就越大,越值得推薦103。 R向量裡面的R101, R104,R105和R107這三項值很大,但是我們可以忽略它們應用用戶已經對它們打過分,也就是已經看過這些電影了,可以不比推薦了,對於用戶沒有看過的電影的幾項裡面選出最大(或者TopN)對應的電影推薦就可以了,

 

上面R102,R103,R106裡面選一個最大值103,103就是可以推薦的商品了

 


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

-Advertisement-
Play Games
更多相關文章
  • 1.進入資料庫: mysql -u root -p mysql -h localhost -u root -p database_name 2.列出資料庫 show databases; 3.選擇資料庫: use databases_name; use databases_name; 4.列出數據表 ...
  • 今天工作需要,想要實現將僅對狀態更新的表進行歷史記錄顯示,於是考慮在原表中建立觸發器,將更新的內容同時寫入另一張表 於是進行測試 執行觸發器語句,報錯,報錯內容如下: /* SQL錯誤(1064):You have an error in your SQL syntax; check the man ...
  • DISTINCT和GROUP BY的區別 > DISTINCT是取出查詢結果中的重覆項;而GROUP BY是按某項進行分組顯示。前者的目的就是要去除結果中相同的項,後者則主要用於對結果歸組,常和聚集函數等一起使用。 DISTINCT操作只需要找出所有不同的值就可以了。而GROUP BY操作還要為其他 ...
  • ...
  • 已知:資料庫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], [], [], ... ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...