隨着電子商務的發展,網絡購物成爲一種趨勢,當你打開某個購物網站好比淘寶、京東的時候,會看到不少給你推薦的產品,你是否以爲這些推薦的產品都是你似曾相識或者正好須要的呢。這個就是如今電子商務裏面的推薦系統,向客戶提供商品建議和信息,模擬銷售人員完成導購的過程。html
推薦系統簡介算法
什麼是推薦系統呢?維基百科這樣解釋道:推薦系統屬於資訊過濾的一種應用。推薦系統可以將可能受喜愛的資訊或實物(例如:電影、電視節目、音樂、書籍、新聞、圖片、網頁)推薦給使用者。數據庫
推薦系統首先收集用戶的歷史行爲數據,而後經過預處理的方法獲得用戶-評價矩陣,再利用機器學習領域中相關推薦技術造成對用戶的個性化推薦。有的推薦系統還蒐集用戶對推薦結果的反饋,並根據實際的反饋信息實時調整推薦策略,產生更符合用戶需求的推薦結果。網絡
推薦系統的做用:機器學習
推薦系統的表現形式:ide
推薦技術分類:函數
推薦系統的數據分類:oop
推薦系統算法介紹:學習
談到推薦系統,固然離不開它的核心 —— 推薦算法。推薦算法最先在1992年就提出來了,可是發展起來是最近這些年的事情,由於互聯網的爆發,有了更大的數據量能夠供咱們使用,推薦算法纔有了很大的用武之地。優化
下面咱們分別來介紹幾種經常使用的推薦算法:
基於用戶統計信息的推薦:
描述
這是最爲簡單的一種推薦算法,它只是簡單的根據系統用戶的基本信息發現用戶的相關程度,而後將類似用戶喜好的其餘物品推薦給當前用戶。
系統首先根據用戶的類型,好比按照年齡、性別、興趣愛好等信息進行分類。根據用戶的這些特色計算形似度和匹配度。如圖,發現用戶A和B的性別同樣,年齡段類似,因而推薦A喜歡的商品給C。
優勢:
a 不須要歷史數據,沒有冷啓動問題;
b 不依賴於物品的屬性,所以其餘領域的問題均可無縫接入。
不足:
算法比較粗糙,效果很難使人滿意,只適合簡單的推薦。
基於內容的推薦(Content-based Recommendation)
描述:
基於內容的推薦是創建在產品的信息上做出推薦的,而不須要依據用戶對項目的評價意見,更多地須要用機 器學習的方法從關於內容的特徵描述的事例中獲得用戶的興趣資料。
系統首先對商品書籍的屬性進行建模,圖中用類型做爲屬性。在實際應用中,只根據類型顯然過於粗糙,還須要考慮其餘信息。經過類似度計算,發現書籍A和C類似度較高,由於他們都屬於武俠小說類。系統還會發現用戶A喜歡書籍A,由此得出結論,用戶A極可能對書籍C也感興趣。因而將書籍C推薦給A。
示例:
下面是亞馬遜中國的一個例子,未登陸用戶瀏覽了關於Hadoop的書籍,因而在首頁會出現以下相關產品的推薦:
優勢:
不足:
c . 不能爲用戶發現新的感興趣的產品。
協同過濾推薦(Collaborative Filtering Recommendation)
背景:
協同過濾的場景是這樣的:要爲某用戶推薦他真正感興趣的內容/商品,首先要找到與此用戶有類似興趣的其餘用戶,而後將他們感興趣的內容推薦給該用戶。協同過濾就是利用這個思想,基於其餘用戶對某一個內容的評價來向目標客戶進行推薦。
基於協同過濾的推薦系統能夠說是從用戶的角度來進行相應的自動的推薦,即用戶得到的推薦是系統從購買模式或瀏覽行爲等隱式得到的。
比較:
這裏你是否以爲協同過濾推薦和基於用戶統計信息的推薦以及基於內容的推薦有不少類似之處呢?下面咱們先來比較一下協同過濾推薦和上述兩種推薦的區別。
ü 協同過濾推薦 VS 基於用戶統計信息推薦
基於用戶的協同過濾推薦機制和基於用戶統計信息推薦機制都是計算用戶的類似度,並基於「鄰居」用戶羣計算推薦,但它們所不一樣的是如何計算用戶的類似度,基 於用戶統計信息只考慮用戶自己的特徵,而基於用戶的協同過濾機制是在用戶的歷史偏好的數據上計算用戶的類似度,它的基本假設是,喜歡相似物品的用戶 可能有相同或者類似的興趣愛好。
ü 系統過濾推薦 VS 基於內容的推薦
基於項目的協同過濾推薦和基於內容的推薦其實都是基於物品類似度預測推薦,只是類似度計算的方法不同,前者是從用戶歷史的偏好推斷,然後者是基於物品自己的屬性特徵信息。
描述:
協同過濾算法,顧名思義就是指用戶能夠齊心合力,經過不斷的和網站互動,是本身的推薦列表可以不斷過濾掉本身不感興趣的物品,從而愈來愈知足本身的需求。
協同過濾算法主要有兩種,一種是基於用戶的協同過濾算法(UserCF),另外一種是基於物品的協同過濾算法(ItemCF)。
基於用戶的協同過濾算法:
經過計算用戶對商品評分之間的類似性,搜索目標用戶的最近鄰居,而後根據最近鄰居的評分向目標用戶產生推薦。
經常使用的類似度計算方法有歐式距離、餘弦距離算法、傑卡德類似性算法,這裏主要介紹餘弦距離算法。
餘弦距離更多的是從方向上區分差別,而對絕對的數值不敏感,更多的用於使用用戶對內容評分來區分興趣的類似度和差別,同時修正了用戶間可能存在的度量標準不統一的問題(由於餘弦距離對絕對數值不敏感)。
幾何中夾角餘弦可用來衡量兩個向量方向的差別,機器學習中借用這一律念來衡量樣本向量之間的差別。
(1)在二維空間中向量A(x1,y1)與向量B(x2,y2)的夾角餘弦公式:
(2)對於兩個n維a(x11,x12,…,x1n)和b(x21,x22,…,x2n),可使用相似於夾角餘弦的概念來衡量它們間的類似程度。
推薦系統中的數據源D=(U,I,R),其中U = {User1,User2,User3,…,Useri}是用戶的基本集合,I = {Item1,Item2,…,Itemj}是項目集合;i*j階矩陣R是基本用戶對各項目的評分矩陣,第m行第n列的元素Rmn表明用戶m對項目n的評分。
應用到推薦系統的場景是這樣的:兩個項目i和j被看成兩個n維的向量a和b。每一個用戶的評分均可以看做爲n維空間上的向量,若是用戶對產品沒有進行評分,則將用戶對該項目的評分設爲0。用戶間的類似性經過向量間的餘弦夾角度量:
其中,分子爲兩個用戶評分向量的內積,分母爲兩個用戶向量模的乘積。
這裏對餘弦類似性做一下簡單的回憶:
咱們能夠把它們想象成空間中的兩條線段,都是從原點([0, 0, ...])出發,指向不一樣的方向。兩條線段之間造成一個夾角,若是夾角爲0度,意味着方向相同、線段重合;若是夾角爲90度,意味着造成直角,方向徹底不類似;若是夾角爲180度,意味着方向正好相反。所以,咱們能夠經過夾角的大小,來判斷向量的類似程度。夾角越小,就表明越類似。
餘弦類似性未考慮到用戶評分尺度問題,如在評分區間[1,5]的狀況下,對用戶甲來講評分3以上就是本身喜歡的,而對於用戶乙,評分4以上纔是本身喜歡的。經過減去用戶對項目的平均評分,修正的餘弦類似性度量方法改善了以上問題。
用戶a和b共同評分過的項目集合用來表示, = (和分別表示用戶a和用戶b評分過的項目的集合,結果是它們的交集)。所以,用戶a和b的類似性:
表示用戶a對項目d的評分, 和分別表示用戶a和用戶b對全部商品的平均評分。
找出用戶a和b共同評分過的項目集合, = ,則用戶a和b之間的類似性可經過皮爾森相關係數度量。
表示用戶a對項目d的評分, 和分別表示用戶a和用戶b對商品的平均評分。
經過上面對目標用戶類似度的計算,咱們能夠找到與目標用戶最類似的N個鄰居的集合。
其中sim(i,j)表示用戶i與用戶j之間的類似性,表示最近鄰居用戶j對項目d的評分,和分別表示用戶i和用戶j的平均評分,實質是在用戶的最近鄰居集NESi中查找用戶,並將目標用戶與查找到的用戶的類似度的值做爲權值,而後將鄰居用戶對該項目的評分與此鄰居用戶的全部評分的差值進行加權平均。
經過上述方法預測出目標用戶對未評價項目的評分,而後選擇預測評分最高的TOP-N項推薦給目標用戶。
根據前面用戶計算的類似度和尋找最近鄰居來計算推薦度,這裏舉例圖示說明。
示例1:
下面是新浪網新聞熱點推薦,用戶在新浪網瀏覽了一系列的財經類新聞,根據用戶類似性,即兩個用戶有相同的愛好作出的推薦。
基於項目的協同過濾算法:
基於項目協同過濾在於透過計算項目之間的類似性來代替使用者之間的類似性。所創建的一個基本的假設:」可以引發使用者興趣的項目,一定與其以前評分高的項目類似」。
基於項目的協同過濾算法的關鍵步驟仍然是計算項目之間的類似性並選出最類似的項目,這一點與基於用戶的協同過濾相似。
計算兩個項目i和j之間類似性的基本思想是首先將對兩個項目共同評分的用戶提取出來,並將每一個項目得到的評分看做是n維用戶空間的向量,再經過類似性度量公式計算二者之間的類似性。
分離出類似的項目以後,下一步就要爲目標項目預測評分,經過計算用戶u對與項目i類似的項目集合的總評價分值來計算用戶u對項目i的預期。
這裏咱們主要來關注一下基於用戶的協同過濾和基於項目的協同過濾算法的區別:
a) 基於用戶的協同過濾是推薦用戶所在興趣小組中的熱點,更注重社會化;好比:如上面示例1所示,新浪網給目標客戶推薦其餘有相同或類似興趣愛好的人關注的新聞,這樣就保證了新聞門戶網站須要的時效性,給用戶最新最及時最感興趣的新聞信息。
b) 基於項目的協同過濾算法則是根據用戶歷史行爲推薦類似物品,更注重個性化。好比購物網站,用戶的興趣愛好通常比較固定,網站通常是給目標用戶推薦他所感興趣領域的產品。可參考示例2.
示例2:
下面是淘寶網站的例子,「猜你喜歡」就是將相同類型的東西推薦給用戶。
再來看京東網站的例子。用戶瀏覽書籍《Hadoop實戰》
而後下面就會產生「熱門推薦」,即鄰居項目的產生。
優勢:
不足:
基於關聯規則的推薦(Association Rule-based Recommendation)
描述:
關聯規則算法首先由Agrawal和Swami提出,最先的成型爲經典的Apriori算法。它的基本思想是:使用一種稱做逐層搜索的迭代方法,k項集用於探索(k+1)項集。首先,經過掃描事務(交易)記錄,找出全部的頻繁1項集,該集合記作L1,而後利用L1找頻繁2項集的集合L2,L2找L3,如此下去,直到不能再找到任何頻繁k項集。最後再在全部的頻繁集中找出強規則,即產生用戶感興趣的關聯規則。
關於這個算法有一個很是有名的故事:"尿布和啤酒":美國的婦女們常常會囑咐她們的丈夫下班後爲孩子買尿布,而丈夫在買完尿布後又要順手買回本身愛喝的啤酒,所以啤酒和尿布在一塊兒被購買的機會不少。這個舉措使尿布和啤酒的銷量雙雙增長,並一直爲衆商家所津津樂道。
概念介紹:
下面咱們經過一個例子來解釋:
(1)由頻繁k-1項集進行自鏈接生成的候選頻繁k項集數量巨大。
(2)在驗證候選頻繁k項集的時候須要對整個數據庫進行掃描,很是耗時。
以樹形的形式來展現、表達數據的形態;能夠理解爲水在不一樣河流分支的流動過程;
1) 掃描原始項目集;
2) 排列數據;
3) 建立ROOT節點;
4) 按照排列的數據進行元素的流動;
5) 節點+1;
具體的Fp-tree算法的實現能夠查看:
http://www.cnblogs.com/zhangchaoyang/articles/2198946.html
優勢:
1) 能發現新興趣點;
2) 不要領域知識。
不足:
1) 算法的第一步關聯規則的發現最爲關鍵且最耗時,是算法的瓶頸,但能夠離線進行。
2) 其次,商品名稱的同義性問題也是關聯規則的一個難點。
其餘推薦算法介紹:
除了上面比較詳細介紹的集中推薦算法,這裏再簡單介紹一下其餘幾種算法。
基於效用推薦
基於效用的推薦(Utility-based Recommendation)是創建在對用戶使用項目的效用狀況上計算的,其核心問題是怎麼樣爲每個用戶去建立一個效用函數,所以,用戶資料模型很大程度上是由系統所採用的效用函數決定的。基於效用推薦的好處是它能把非產品的屬性,如提供商的可靠性(Vendor Reliability)和產品的可得性(Product Availability)等考慮到效用計算中。
基於知識推薦
基於知識的推薦(Knowledge-based Recommendation)在某種程度是能夠當作是一種推理(Inference)技術,它不是創建在用戶須要和偏好基礎上推薦的。基於知識的方法因它們所用的功能知識不一樣而有明顯區別。效用知識(Functional Knowledge)是一種關於一個項目如何知足某一特定用戶的知識,所以能解釋須要和推薦的關係,因此用戶資料能夠是任何能支持推理的知識結構,它能夠是用戶已經規範化的查詢,也能夠是一個更詳細的用戶須要的表示。
組合推薦
因爲各類推薦方法都有優缺點,因此在實際中,組合推薦(Hybrid Recommendation)常常被採用。研究和應用最多的是內容推薦和協同過濾推薦的組合。最簡單的作法就是分別用基於內容的方法和協同過濾推薦方法去產生一個推薦預測結果,而後用某方法組合其結果。儘管從理論上有不少種推薦組合方法,但在某一具體問題中並不見得都有效,組合推薦一個最重要原則就是經過組合後要能避免或彌補各自推薦技術的弱點。
在組合方式上,有研究人員提出了七種組合思路:
1)加權(Weight):加權多種推薦技術結果。
2)變換(Switch):根據問題背景和實際狀況或要求決定變換採用不一樣的推薦技術。
3)混合(Mixed):同時採用多種推薦技術給出多種推薦結果爲用戶提供參考。
4)特徵組合(Feature combination):組合來自不一樣推薦數據源的特徵被另外一種推薦算法所採用。
5)層疊(Cascade):先用一種推薦技術產生一種粗糙的推薦結果,第二種推薦技術在此推薦結果的基礎上進一步做出更精確的推薦。
6)特徵擴充(Feature augmentation):一種技術產生附加的特徵信息嵌入到另外一種推薦技術的特徵輸入中。
7)元級別(Meta-level):用一種推薦方法產生的模型做爲另外一種推薦方法的輸入。
推薦系統的將來與發展方向:
增長推薦的多維性:
當前的大部分研究都是基於對象-用戶的二維度量空間的,未考慮相關信息。然而,用戶對對象的評價和選擇經常由不少環境因素來決定,好比某個對象在特定時段很流行,用戶在某個地方瀏覽對象的時候偏向於選擇某類對象等。推薦系統除了融合了計算機科學的不少領域,它還融合了心理學、社會學。
個性化搜索結果會把搜索引擎變成上下文感知的推薦系統:
推薦系統是一個臨界線,能夠說這是個性化搜索。它能夠發現用戶「如今」所關心的事,好比系統發現你以前買過鞋,如今在搜索襯衫,那你如今實際上是想幹什麼?推薦系統能夠根據你是想和朋友一塊兒去看電影,仍是想和家人呆在一塊兒,作出不一樣推薦。
增長向用戶解釋的推薦結果
根據用戶的知識庫,能夠向用戶作出更好的解釋,向它們說明是什麼樣的因素在幫助系統作出這樣的推薦。利用這樣的系統,使用者確實體驗更好了,他們對於系統的信任程度也提升了。
固然,推薦系統的發展方向和研究熱點還有不少。隨着對推薦系統功能需求特別是實時性及準確性上的需求水平的不斷提升,其實現技術也都面臨着嚴峻的挑戰,須要不斷的完善。
該文章同時在CSDN發表 http://blog.csdn.net/chndata/article/details/43192911