基於大數據的餐飲推薦系統總結



 

0. 前言

  由於原先自己搭的博客系統出問題了,故將其中有價值的內容遷移出來,並對文章進行更新。

  原文鏈接: 基於大數據的餐飲推薦系統總結  

  本文隨筆鏈接:基於大數據的餐飲推薦系統總結

  可視化部分總結:Spring Boot 學習筆記

 

 


 

1. 介紹

  推薦系統不單單指某一方面的技術,而是作為一個完整的系統而存在,要考慮到很多方面才能做出一個有價值的推薦系統。
  在信息過載的時代,有太多的信息被產生,推薦系統的作用是讓人們在海量的信息中查看到更多有效的信息。
  推薦系統的價值在生活中的許多方面都有體現,瀏覽器、社交軟件、購物軟件等中都能看到其身影,為用戶提供個性化推薦,在引導用戶瀏覽商品信息的同時帶動消費。大數據時代,數據就是一種資源,為了資源能有效的使用,我們需要在數據中通過一定的方式得到有價值的信息。
  通過大數據技術搭建平台,基於平台進行推薦業務代碼的編寫,將大數據技術與推薦系統結合在一起,可以帶來更高的價值。通過基於大數據的推薦系統處理海量的數據得出有價值的推薦結果。
 
 

2. 說明

  最初是想學習大數據相關技術,然后從事和大數據相關的職業,所以在畢業設計選題時選擇了《基於大數據的餐飲推薦系統設計》。
  真正在查了很多資料才發現可能想的有點簡單了,從零開始突然發現自己面對的是一個龐然大物的時候是不知所措的。
  在和朋友的交流中的出一個結論:先做一個最簡單的,再慢慢優化。
  在一步一步的試錯中前行。
 

3. 過程

3.1 技術選型

  最初的設想是要實現離線推薦與實時推薦,最終選定了 Lambda 架構。
  Lambda 架構的主要思想是將大數據系統構建為多個層次。
  這里分為三層: 批處理層、實時處理層、服務層。
  批處理層: 負責處理離線數據產生離線推薦信息
  實時處理層: 負責處理實時數據產生實時推薦信息
  服務層: 實現與用戶的交互,將推薦數據信息可視化展示給用戶
 
  

 

 

3.2 數據

  不同於圖書與音樂之類的數據,餐飲數據並不好量化。
  以音樂為例,可以很清晰的以歌曲名稱、歌手、熱度、類型等來實現量化。
  而餐飲數據充滿着不確定性,一種食物每家飯店可能都做得不一樣。
  我覺得最好狀態的是為每個用戶創建畫像,並為每種食物建立詳細描述的標簽,通過二者的關聯度進行相關推薦。
  技術無止境,但都是服務於業務,以上的想法要實現還有很長的路要走。
  美團和餓了么都未提供經過脫敏的餐飲數據,也沒有相關的支持。
  所以數據只能自己造,使用 Python 寫了一個小的餐飲評分數據生成器,通過其產生數據作為數據來源。
  離線數據產生了10萬條,實時數據是通過 Linux 的定時執行工具 crontab 定時執行 Python 腳本。
  首先要將離線評分數據寫入 HBase 數據庫,先把本地的數據導入到 HDFS 中,在將其從 HDFS 中傳輸到 HBase 數據庫中。
 

3.3 大數據平台的搭建

  完成大數據平台的搭建。
 

3.4 推薦代碼的編寫

  通過業務代碼實現對餐飲的推薦,最終選用了 Spark MLlib 中的 ALS 算法。
  考慮過基於用戶或基於商品的算法進行相關推薦,自己生成的餐飲數據的數量與特征與以上不是很匹配,就選了個基於評分數據的協同過濾算法。
  相對來說這是比較簡單的一種方式。
  如何在搭建好並經過連通性測試的大數據平台上進行業務代碼的編寫,也就是整合 ALS。22基於Spark機器學習跟實時流計算的智能推薦系統 給了我很大的啟發。首先是在思想上的,這篇文章讓我對 ALS 的原理與整個推薦系統的流程有了初步的認識。其次是將他的核心業務代碼移植到我的畢業設計中去,雖然有些代碼的細節具體用法不是很懂,但是大致上的意思能理解個大概。
  計划在學習了 Scala 之后把注釋寫完整,思路再理一遍。
  作者的可視化界面使用 ASP.NET 編寫的,出於節省內存的目的我這里采用的 Spring Boot框架整合 Thymeleaf模板。
  與作者相比,我在搭建大數據平台的時候用到了更多的大數據組件,但是作者在三年前就已經完成了業務代碼的編寫,在網上搜相關問題都能看到他的提問。
 
 

4. 系統流程圖

  

 

 


 

5. 項目地址

 

      項目地址

 


 

6. 優化思路

6.1 增加數據真實性與維度

  經過實際測試,沒有真實的數據來源得到的推薦結果並沒有實際價值,也無法得出合適的參數優化模型。
  所以可以提高數據的真實性或直接采用真實數據進行測試。
  數據過於單一,需要增加維度。
 

6.2 添加冷啟動

  由於一切都是基於用戶對餐飲數據的評分而產生的推薦結果,新的用戶並未產生評分數據。
  缺乏評分也就無法實現推薦,像我們現在注冊賬戶剛登進去就會給我們很多選項,讓我們選擇自己感興趣的。
  這些都是實現了冷啟動,通過這些確定了我們的愛好偏向,保證了在缺乏足夠的數據之前進行相關推薦。
  綜上所述,添加冷啟動還是很有必要的。
 

6.3 采用多種推薦算法

  不同於傳統推薦系統,現階段的推薦系統是一個綜合性質的應用,已經不再滿足使用單一推薦算法完成推薦,融合眾多推薦算法發揮他們的優勢完成推薦才能使推薦系統更好地為人們服務。
  本設計采用的是機器學習庫中的ALS算法,在之后的研究與學習中還應該融合其他優秀的推薦算法,基於實際需求充分發揮每個推薦算法的優勢,搭建出更優秀的推薦系統。
 

6.4 提高硬件配置

  受限於電腦內存、電腦性能和機器數量,要同時兼顧平台的搭建、大數據各組件的運行和代碼的開發運行,在大數據推薦平台的搭建上選擇偽分布式安裝並未用到集群,不能完整地發揮大數據的優勢。
  在代碼編寫完成后的運行速度與效率也受到限制,規模與真正的應用存在差距。在以后的工作中希望可以在這些方面得到更好的鍛煉。
 
 

7. 總結

  最終雖然完成了推薦系統的設計,但是也發現了許多問題與不足。
  整體過程中遇到了很多坑,一直在踩坑與爬坑。
  挺感謝這段經歷的,在這個過程中收獲了很多。
  下一階段的目標是把基礎打牢,然后跟着官網更深入地學習大數據。
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM