推薦演算法(一)--基本介紹
1. 什麼是推薦演算法
推薦演算法最早在1992年就提出來了,但是火起來實際上是最近這些年的事情,因為網際網路的爆發,有了更大的資料量可以供我們使用,推薦演算法才有了很大的用武之地。
最開始,所以我們在網上找資料,都是進yahoo,然後分門別類的點進去,找到你想要的東西,這是一個人工過程,到後來,我們用google,直接搜尋自己需要的內容,這些都可以比較精準的找到你想要的東西,但是,如果我自己都不知道自己要找什麼腫麼辦?最典型的例子就是,如果我開啟豆瓣找電影,或者我去買說,我實際上不知道我想要買什麼或者看什麼,這時候推薦系統就可以派上用場了。
2. 推薦演算法的條件
現在的各種各樣的推薦演算法,但是不管怎麼樣,都繞不開幾個條件,這是推薦的基本條件
1.根據和你共同喜好的人來給你推薦
2.根據你喜歡的物品找出和它相似的來給你推薦
3.根據你給出的關鍵字來給你推薦,這實際上就退化成搜尋演算法了
4.根據上面的幾種條件組合起來給你推薦
3. 推薦演算法分類
3.1 基於流行度的推薦演算法
基於流行度的推薦演算法比較簡單粗暴,主要是對熱點商品或者資訊的推薦。它主要是根據PV、UV、日均PV或分享率等資料來按某種熱度排序來推薦給使用者。
這種演算法既有優點也有缺點。優點是簡單,適用於剛註冊的新使用者,能夠解決對新使用者進行推薦的冷啟動問題。缺點也很明顯,它無法針對使用者提供個性化的推薦。基於這種演算法也可做一些優化,比如加入使用者分群的流行度排序,例如把熱榜上的體育內容優先推薦給體育迷,把政要熱文推給熱愛談論政治的使用者。
3.2 基於內容的推薦演算法
基於內容的推薦是在推薦引擎出現之初應用最為廣泛的推薦機制,它的核心思想是根據推薦物品或內容的後設資料,發現物品或者內容的相關性,然後基於使用者以往的喜好記錄,推薦給使用者相似的物品。比如你看了哈利波特I,基於內容的推薦演算法發現哈利波特II-VI,與你以前觀看的在內容上面(共有很多關鍵詞)有很大關聯性,就把後者推薦給你。
這種推薦系統多用於一些資訊類的應用上,針對文章(電影音樂)本身抽取一些tag作為該其關鍵詞,繼而可以通過這些tag來評價兩篇文章的相似度。
這種推薦系統的優點在於: 1、易於實現,不需要使用者資料因此不存在稀疏性和冷啟動問題。 2、基於物品本身特徵推薦,因此不存在過度推薦熱門的問題。 然而,缺點在於:1、抽取的特徵既要保證準確性又要具有一定的實際意義,否則很難保證推薦結果的相關性。豆瓣網採用人工維護tag的策略,依靠使用者去維護內容的tag的準確性。2、推薦的Item可能會重複,典型的就是新聞推薦,如果你看了一則關於MH370的新聞,很可能推薦的新聞和你瀏覽過的,內容一致。
3.3 基於關聯規則的推薦演算法
基於關聯規則的推薦更常見於電子商務系統中,並且也被證明行之有效。其實際的意義為購買了一些物品的使用者更傾向於購買另一些物品。基於關聯規則的推薦系統的首要目標是挖掘出關聯規則,也就是那些同時被很多使用者購買的物品集合,這些集合內的物品可以相互進行推薦。目前關聯規則挖掘演算法主要從Apriori和FP-Growth兩個演算法發展演變而來。 基於關聯規則的推薦系統一般轉化率較高,因為當使用者已經購買了頻繁集合中的若干專案後,購買該頻繁集合中其他專案的可能性更高。
該機制的缺點如下: 1.計算量較大,但是可以離線計算,因此影響不大。 2.由於採用使用者資料,不可避免的存在冷啟動和稀疏性問題。 3.存在熱門專案容易被過度推薦的問題。
3.4 基於協同過濾的推薦演算法
協同過濾是一種在推薦系統中廣泛採用的推薦方法。這種演算法基於一個“物以類聚,人以群分”的假設,喜歡相同物品的使用者更有可能具有相同的興趣。基於協同過濾的推薦系統一般應用於有使用者評分的系統之中,通過分數去刻畫使用者對於物品的喜好。協同過濾被視為利用集體智慧的典範,不需要對專案進行特殊處理,而是通過使用者建立物品與物品之間的聯絡。 目前,協同過濾推薦系統被分化為兩種型別:基於使用者(User-based)的推薦和基於物品(Item-based)的推薦。
3.4.1 基於使用者(User-based)的推薦
基於使用者的協同過濾推薦的基本原理是,根據所有使用者對物品或者資訊偏好(評分),發現與當前使用者口味和偏好相似的“鄰居”使用者群,在一般應用中是採用計算K近鄰的演算法;基於這 K個鄰居的歷史偏好資訊,為當前使用者進行推薦。 這種推薦系統的優點在於推薦物品之間在內容上可能完全不相關,因此可以發現使用者的潛在興趣,並且針對每個使用者生成其個性化的推薦結果。缺點在於一般的Web系統中,使用者的增長速度都遠遠大於物品的增長速度,因此其計算量的增長巨大,系統效能容易成為瓶頸。因此在業界中單純的使用基於使用者的協同過濾系統較少。
3.4.2 基於物品(Item-based)的推薦
基於物品的協同過濾和基於使用者的協同過濾相似,它使用所有使用者對物品或者資訊的偏好(評分),發現物品和物品之間的相似度,然後根據使用者的歷史偏好資訊,將類似的物品推薦給使用者。基於物品的協同過濾可以看作是關聯規則推薦的一種退化,但由於協同過濾更多考慮了使用者的實際評分,並且只是計算相似度而非尋找頻繁集,因此可以認為基於物品的協同過濾準確率較高並且覆蓋率更高。 同基於使用者的推薦相比,基於物品的推薦應用更為廣泛,擴充套件性和演算法效能更好。由於專案的增長速度一般較為平緩,因此效能變化不大。缺點就是無法提供個性化的推薦結果。
3.4.3 協同過濾演算法總結
兩種協同過濾:基於使用者和基於物品兩個策略中應該如何選擇呢?其實基於物品的協同過濾推薦機制是Amazon 在基於使用者的機制上改良的一種策略,因為在大部分的Web 站點中,物品的個數是遠遠小於使用者的數量的,而且物品的個數和相似度相對比較穩定;同時基於物品的機制比基於使用者的實時性更好。但也不是所有的場景都是這樣的情況,在一些新聞推薦系統中,也許物品,也就是新聞的個數可能大於使用者的個數,而且新聞的更新程度也有很快,所以它的相似度依然不穩定。所以,推薦策略的選擇其實也和具體的應用場景有很大的關係。
基於協同過濾的推薦機制是現今應用最為廣泛的推薦機制,它有以下幾個顯著的優點:
- 它不需要對物品或者使用者進行嚴格的建模,而且不要求物品的描述是機器可以理解的,所以這種方法也是領域無關的。
- 這種方法計算出來的推薦是開放的,可以共用他人的經驗,很好的支援使用者發現潛在的興趣偏好。
然後而它也存在以下幾個缺點:
- 方法的核心是基於歷史資料,所以對新物品和新使用者都有“冷啟動”的問題。
- 推薦的效果依賴於使用者歷史偏好資料的多少和準確性。
- 在大部分的實現中,使用者歷史偏好是用稀疏矩陣進行儲存的,而稀疏矩陣上的計算有些明顯的問題,包括可能少部分人的錯誤偏好會對推薦的準確度有很大的影響等等。
- 對於一些特殊品味的使用者不能給予很好的推薦。
- 由於以歷史資料為基礎,抓取和建模使用者的偏好後,很難利用獲取的使用者偏好演變,從而導致這個方法不夠靈活。
3.5 基於模型的推薦演算法
基於模型的方法有很多,主要是使用常用的機器學習演算法對目標使用者簡歷推薦演算法模型,然後對使用者的愛好進行預測推薦以及對推薦的結果打分排序等。 常用的模型包括Aspect Model,pLSA,LDA,聚類,SVD,Matrix Factorization,LR,GBDT等,這種方法訓練過程比較長,但是訓練完成後,推薦過程比較快且準確。因此它比較適用於實時性比較高的業務如新聞、廣告等。當然,而若是需要這種演算法達到更好的效果,則需要人工干預反覆的進行屬性的組合和篩選,也就是我們常說的 特徵工程。而由於新聞的時效性,系統也需要反覆更新線上的數學模型,以適應變化。
簡單的以LR為例,來講一下推薦系統的運作原理。我們通過分析系統中使用者的行為和購買記錄等資料,得到如下表:
表中的行是一種物品,x1~xn是影響使用者行為的各種特徵屬性,如使用者年齡段、性別、地域、物品的價格、類別等等,y則是使用者對於該物品的喜好程度,可以是購買記錄、瀏覽、收藏等等。通過大量這類的資料,我們可以迴歸擬合出一個函式,計算出x1~xn對應的係數,這即是各特徵屬性對應的權重,權重值越大則表明該屬性對於使用者選擇商品越重要。 在擬合函式的時候我們會想到,單一的某種屬性和另一種屬性可能並不存在強關聯。比如,年齡與購買護膚品這個行為並不呈強關聯,性別與購買護膚品也不強關聯,但當我們把年齡與性別綜合在一起考慮時,它們便和購買行為產生了強關聯。比如(我只是比如),20~30歲的女性使用者更傾向於購買護膚品,這就叫交叉屬性。通過反覆測試和經驗,我們可以調整特徵屬性的組合,擬合出最準確的迴歸函式。最後得出的屬性權重如下:
基於模型的演算法由於快速、準確,適用於實時性比較高的業務如新聞、廣告等,而若是需要這種演算法達到更好的效果,則需要人工干預反覆的進行屬性的組合和篩選,也就是常說的Feature Engineering。而由於新聞的時效性,系統也需要反覆更新線上的數學模型,以適應變化。
3.6 混合推薦演算法
真正的現實應用中,其實基本上很少會使用單一的推薦演算法去實現推薦任務。因此,大型成熟網站的推薦系統都是基於各種推薦演算法的優缺點以及適合場景分析的情況下的組合使用的“混合演算法”。當然,混合策略也會是十分豐富的,例如不同策略的演算法加權、不同場景和階段使用不同的演算法等等。具體的怎麼混合需要結合實際的應用場景進行分析與應用。
由此可見推薦演算法的型別還是相當之多的,尤其當應用場景發生變化時,推薦演算法往往也需要作出較大的變動。接下來將會對以上的諸多演算法作出適當的詳解與實戰。
參考文章:
相關文章
- 【推薦系統篇】--推薦系統介紹和基本架構流程架構
- PG實用工具推薦和介紹
- 新手向的VPS介紹及推薦
- linux基本命令介紹(一)Linux
- 介紹一下我一直用的IDE-工具推薦IDE
- docker 基本介紹Docker
- LVM基本介紹LVM
- ipfs基本介紹
- TypeScript基本介紹TypeScript
- hazelcast的基本介紹AST
- 推薦模型DeepCrossing: 原理介紹與TensorFlow2.0實現模型ROS
- 推薦模型NeuralCF:原理介紹與TensorFlow2.0實現模型
- 推薦系統一——深入理解YouTube推薦系統演算法演算法
- Aspose.Words for .NET基本介紹以及功能介紹
- seata分散式事務TCC模式介紹及推薦實踐分散式模式
- ddddocr基本使用和介紹
- layui 的基本使用介紹UI
- Docker基本介紹及使用Docker
- 【推薦演算法】推薦系統的評估演算法
- 【轉】推薦系統演算法總結(一)演算法
- OC-NSArray的基本介紹
- Spring Reactor基本介紹和案例SpringReact
- 分散式賬本基本介紹分散式
- ip ssl證書基本介紹
- Nginx 教程:基本概念介紹Nginx
- linux基本命令介紹(二)Linux
- 精簡推薦演算法演算法
- NodeJs 入門到放棄 — 入門基本介紹(一)NodeJS
- Vue Render介紹和一些基本的例項Vue
- 限流演算法介紹演算法
- GC演算法介紹GC演算法
- [我們一起來學 RabbitMQ 一 ]RabbitMQ 的基本介紹MQ
- golang-切片slice的基本介紹Golang
- day01-SpringMVC基本介紹-01SpringMVC
- Go 單元測試基本介紹Go
- Fiddler(1)基本介紹以及工作原理
- MongoDB基本介紹與安裝(1)MongoDB
- Linux 檔案系統基本介紹Linux