如何完成一個推薦系統?
何為推薦系統? 在我看來是能夠實現推薦功能的產品。單單的推薦算法夠不上推薦系統,連簡單都算不上,因為它不完整。當然推薦系統的核心還是在推薦算法上。
我的理解是,題主困惑于如何做成一個簡單易用的推薦【系統】,因此你既要懂推薦算法,也要了解系統架構。
首先,推薦系統得有一個良好的用戶交互界面,也就是我們所說的前端,能夠設計出簡單的注冊、登錄、菜單展示、菜單選擇、菜單推薦等基本頁面,所需要的語言是html,css,js等,ps技術,如果想比較快速的搭建界面的話,推薦使用bootstrap框架,使得我們不用把細節過多的放在元素標簽上。附上bootstrap鏈接。
其次,要選一門自己擅長的后臺語言,以此來將前端用戶交互記錄寫入數據庫中。java,.net自由選擇,我比較擅長.net的網站開發,尤其是mvc框架,使得我不用過多的將細節放在網站的配置上,只要按照約定俗成的規則來搭建即可,即靈活又方便。同時我們需要稍微了解一些設計模式的東西,使得設計的系統比較穩定,耦合度比較低,也就是說的使得修改最少的代碼來實現最多的功能。還要為推薦算法留好接口,這樣即做到易于維護,又能為后續推薦算法升級做好準備。在此推薦一下用.net mvc 來實現網站系統的博客MVC5 + EF6 入門完整教程,寫的特別好。
說完系統的前后臺所需技術后,我們接下來分析一下推薦算法。
一開始我們可以選擇最簡單的熱點推薦,當然為了增加商品的多樣性以及用戶的驚喜度可以輔助隨機推薦。然后可以使用經典的協同過濾方法來測試準確率,如果想考慮用戶的興趣遷移,可以增加時間維度的考量。推薦算法實際上是解決用戶、物品、環境三者之間關系的算法,即用戶在什么時間、哪個地點推薦何種物品能夠滿足用戶的需求,以下總結了一些經典的推薦算法以及入門推薦算法的一些材料以及一些開源的推薦算法包庫,推薦常用數據集等。
總之,如果遇到了自己很難解決的問題或者無從下手的難題,那就試著將問題肢解,分解為一個個小的子模塊,然后再由簡到繁的難易程度進行攻城崔寨。比如先搭建一個只實現了熱點推薦的系統,其實這就完成了70%,如果想接著提升用戶體驗的話,可以考慮升級一些好用的、易于實現的推薦算法。