1. 程式人生 > >基於使用者的協同過濾演算法實現的商品推薦系統

基於使用者的協同過濾演算法實現的商品推薦系統

基於使用者的協同過濾演算法實現的商品推薦系統

 

專案介紹

商品推薦是針對使用者面對海量的商品資訊而不知從何下手的一種解決方案,它可以根據使用者的喜好,年齡,點選量,購買量以及各種購買行為來為使用者推薦合適的商品。在本專案中採用的是基於使用者的協同過濾的推薦演算法來實現商品的推薦並在前臺頁面進行展示,我將會使用餘弦相似度的度量方法來計算使用者與使用者之間相似性,最終將相似度較高的使用者瀏覽的商品推薦給使用者。

專案目標

  • 商品推薦:根據不同使用者之間的相似性來推薦給使用者合適的商品
  • 一級類目管理:管理一級類目的相關功能
  • 二級類目管理:管理二級類目的相關功能
  • 商品管理:對商品進行上架,下架,修改資訊
  • 管理員管理:管理管理員,用於商城後臺的管理平臺頁面
  • 商城會員管理:管理商城會員,對商城頁面的會員進行管理
  • 商城會員登入及註冊:實現商城使用者的登入功能以及註冊功能

專案所採用的技術

開發環境

  • 作業系統:Windows10
  • IDE:MyEclipse
  • Java版本:1.8
  • 資料庫:mysql5.6.36
  • 伺服器:tomcat8
  • 專案的構建工具:Maven

後臺框架

  • spring-4.2.1 輕量級的IOC和AOP的容器框架
  • springMVC-4.2.1 表示層框架,負責匹配請求,處理請求,返回檢視
  • mybatis-3.3.1 建立與資料庫的會話
  • druid-1.1.16 為監控而生的資料庫連線池

商品推薦流程

image

介面

image

專案階段性成果

使用者相似度計算功能完成(2018-10-30 15:40)

以下為通過餘弦相似度公式計算得出的使用者與使用者之間的相似度: 具體的程式碼實現見

1	2	0.999489144283392
1	3	0.951009468591049
1	4	0.6101699194694563
2	3	0.9514955455298099
2	4	0.6104817875805268
3	4	0.6408097907695536

餘弦相似度的原理

  1. 在三角形中,cos30°=二分之根三,cos60°=1/2。很明顯,cos30°相比於cos60°更接近於 1,可以看出角度越接近於 0°,對應的餘弦值越接近於 1,構成這個角度的兩條邊也就越接近於重合,也就可以認為這兩條邊越相似。

  2. 在二維的平面向量中,兩個向量之間夾角的餘弦值公式為:
    image
    假設兩個向量a,b的座標分別為(x1,y1)、(x2,y2),所以最終可以化簡為:
    image
    注:其中的x和y是兩個不同的維度,在向量直角座標系中可以認為是距x和y軸的距離,但是在實際的應用中,可以是把它理解為一個物體的任何一個可以衡量它與其他物體不同之處的屬性...咳咳,還是說人話吧,在商品推薦中可以把向量 a 和向量 b 理解為兩個不同的使用者,把 (x1,y1) 理解為 a 使用者對 x 商品的點選次數和對 y 商品的點選次數,再把對應的值帶入上述公式即可求出兩個使用者之間的相似性,越接近於 1 ,說明兩個使用者的瀏覽行為越相似,就可以把一個使用者瀏覽過的商品推薦給另一個沒有瀏覽過該商品的使用者,從而完成商品推薦。

  3. 設向量 A = (A1,A2,A3,...,An), B = (B1,B2,B3,...,Bn),推廣到多維,公式為:
    image
    其中的 A1,A2,A3...就可以理解為該使用者對不同的商品的點選量。

計算出要推薦給使用者的二級類目(2018-10-30 15:42)

通過上一階段對使用者相似度之間的求解,可以獲得與某個使用者最相似的前N個使用者,(假設需要被推薦商品的使用者為X)然後在這N個使用者的瀏覽記錄中查詢X沒有瀏覽的類目,但是這N個使用者瀏覽的二級類目的類目的id,作為推薦給使用者的二級類目id
具體的程式碼實現見
image

完成對使用者的商品推薦(2018-10-30 15:33)

在上一個階段確定了要推薦給使用者的二級類目之後,找出每個類目下點選量最高的商品推薦給使用者。
直觀感受一下:
image