原创 使用概率矩陣模型在推薦系統中整合多種信息

做推薦時,往往會有不同的數據可用。如Netflix數據集中,有用戶的顯示評分信息(1-5),也有用戶隱式評分信息(即用戶觀看記錄,但沒有評分);在上下文廣告推薦中,有用戶訪問網頁信息R1、用戶點擊廣告信息R2和廣告與網頁關聯度信息R3。那

原创 一個memory-based協同過濾算法的改進(基於隱式評分)

先來看定義。“顯示評分”俗稱打分,如Netflix中允許用戶給每部電影打1-5分,豆瓣電影也允許用戶給電影評星級(很差—力薦)。而“隱式評分”是指用戶的瀏覽記錄,購買記錄之類的0-1評分(用binary數值0表示沒有瀏覽/購買,1表示瀏覽

原创 如何使基於梯度下降的機器學習並行化

本文,討論batch-gradient和stochastic gradient descent的並行化。 首先來看batch-gradient。batch-gradient的每次更新都要在整個訓練集上計算獲得。比如,logistic re

原创 基於《Web Intelligence and Big Data》的自我梳理 一、二

課程裏總共分爲6個模塊:LOOK, LISTEN, LOAD, LEARN, CONECT, PREDICT。不過我這邊只總結前5個。 一、LOOK(搜索) 首先,大家對搜索都不陌生。搜索引擎爲每個文檔建立反轉索引。但由於文檔數太多,光

原创 如何將用戶表示成機器可以處理的形式(基於內容的推薦)

當用戶信息(如年齡,性別)和物品信息(如製片方,上映年份,所屬類型)可用時,如何在推薦系統中利用這些信息?也是實現所說的基於內容(content-based)的推薦。其實基於內容的推薦要解決兩個主要問題:item profile 和 us

原创 矩陣分解模型MF如何進行在線更新

目前在評分預測方面,Matrix factorization模型是performance最好的一個模型。但它的缺點是整個模型訓練完後是靜態的。所謂靜

原创 基於《Web Intelligence and Big Data》的自我梳理 三、四

三、LOAD LOAD可以理解爲數據實際上的處理。首先看看數據庫。傳統關係型數據庫主要是面向事務的。最早基於row-oriented存儲,使用B+樹索引。由於不同事務間的併發,爲了滿足ACID(原子性,一致性,隔離性,持久性),傳統關係型

原创 推薦系統如何給新用戶提問題

簡單地歸類下,有兩種方法:採用問問題的方式 和 利用已有的信息(比如用戶配置)。本文先只討論第一種方法。 推薦系統冷啓動問題有個很“簡單”的解決方案:給幾個物品讓用戶評分,而且鑑於用戶不喜歡一次評很多東西,通常只給很少的物品,比如5-1

原创 推薦系統中的協同過濾算法

協同過濾Collaborative Filtering (CF)算法是推薦算法的一個大分支,基本思想是推薦相似的物品,或者推薦相似用戶(隱式或者顯式)評分過的物品。CF方法主要可以分爲兩類:基於鄰域和基於隱語義。 ①基於鄰域的方法利用

原创 如何捕捉推薦系統中隨時間變化的動態信息

首先來看爲時間信息建模的重要性 事物是動態變化的。不僅是人的喜好、品味會隨着時間的推移改變(比如,一個喜歡看韓劇的用戶漸漸喜歡上了國產“恐怖片”;或用戶打分的標準比以往更嚴格了,感覺極好的也只打4分)。物品的流行度也會隨着其他物品的出現,

原创 如何利用knowledge base來做推薦

本文描述的是推薦系統使用Linked Data做爲主要數據源的情況。        注:文中的SparQL語句可以在這裏查詢 首先介紹一點背景信息。Dr. Gautam Shroff在《Web Intelligence and Big

原创 基於《Web Intelligence and Big Data》的自我梳理 五

五、CONECT 有了facts 和 rules,我們可以進行推斷。比如: fact: Obama is president of USA rule: X is president of C => X is leader of C 我們可

原创 算法複習(一)——最小生成樹

求最小生成樹可以使用Prim或Kruskal算法 Kruskal比較直觀,因爲邊是按全局從小到大依次考慮的,所以能保證全局最優解。若不構成環,則加入這條邊;否則,丟棄這條邊。因爲出現環,說明當前已經有邊將該點加入生成樹,而越先考慮的邊代價

原创 算法複習(二)—— 最短路徑

經典的Dijkstra最短路徑算法只適用沒有負邊的情況。因爲該算法,一個點到起點的最短距離一旦確定(採用貪心策略),它就不會再更改。而負邊會破壞這個貪心的正確性。 對於有負邊的情況,可以使用bellman-ford算法。它的思想是一條路徑

原创 數據結構複習(二)—— 棧

要實現一個簡單的計算器很容易:維護一個操作棧和一個數據棧。 但寫出讓自己滿意的代碼挺難。 這是我的最終稿 測試用題: hdu 1237 import java.io.IOException; import java.io.Input