天天看點

基于聚類分析和協同過濾算法的營養膳食分析系統的設計與實作1 簡介1. 協同過濾的算法思想2. 協同過濾的推薦方法3. 基于近鄰的協同過濾2 設計概要3 系統關鍵技術4 開發工具5 代碼展示6 系統功能描述

1 簡介

今天向大家介紹一個幫助往屆學生完成的畢業設計項目,基于聚類分析和協同過濾算法的營養膳食分析系統的設計與實作。

1. 協同過濾的算法思想

1.1. 基于内容的推薦中不足之處

基于内容的推薦方法使用者易于了解,簡單有效,但是它的缺點也十分明顯。

  • 它要求内容必須能夠抽取出有意義的特征,且要求這些特征内容有良好的結構性
  • 推薦精度較低,相同内容特征的物品差異性不大。因為以上這些原因,在推薦系統中基于内容的推薦往往會和其他方法混合使用。

1.2. 協同過濾算法思想推導

比如你想看一個電影,但是不知道具體看哪一部,你會怎麼做?

  • 問問周圍興趣相似的朋友,看看他們最近有什麼好的電影推薦。(基于使用者)
  • 看看電影的相似程度,比如都喜歡看僵屍片,那就會找電影名帶有僵屍、喪屍之類的電影。(基于物品)

比如到玩具店去給小男孩選玩具,應該怎麼選?

  • 我看到大部分小男孩都在玩變形金剛,給他買個變形金剛怎麼樣?(基于使用者)
  • 我知道這個小男孩有很多樂高模型,給他買一個最新版的樂高模型怎麼樣?(基于物品)

由此可以推導出協同過濾算法思想,如下所示:

  • 協同過濾算法就是基于上面的思想,主要包含基于使用者的協同過濾推薦算法以及基于物品的協同過濾推薦算法。
  • 基于物品的協同過濾算法的核心思想:給使用者推薦那些和他們之前喜歡的物品相似的物品,使用者U 購買了A 物品,推薦給使用者U 和A 相似的物品B /C /D
  • 基于使用者的協同過濾算法的核心思想:是先計算使用者U 與其他的使用者的相似度,然後取和U 最相似的幾個使用者,把他們購買過的物品推薦給使用者U

1.3. 使用協同過濾算法的步驟

  1. 收集使用者偏好。
  2. 找到相似的使用者或者物品。
  3. 計算推薦。
  4. 評估

1.4. 使用協同過濾算法中需要注意的點

這裡的基于物品的協同過濾和之前的基于内容的推薦算法不一樣,基于内容的推薦算法僅僅考慮物品的内容特征,而協同過濾包括物品+使用者

這裡的基于使用者的協同過濾和之前的基于人口統計學推薦算法不一樣,基于人口統計學推薦算法考慮的是使用者的基本屬性(使用者畫像),基于使用者的協同過濾考慮的是使用者的對于物品的評價(喜好)

協同:使用者與使用者之間、使用者和網站之間等進行不斷的互動,慢慢過濾掉自己不感興趣的物品,進而滿足自己的需求。

2. 協同過濾的推薦方法

協同過濾和基于内容這2種方法對比:

  • 基于内容(Content based,CB)主要利用的是使用者評價過的物品的内容特征,而基于協同過濾(Collaboraitive Filtering,CF)方法還可以利用其他使用者評分過的物品内容
  • CF可以解決CB的一些局限
    • 物品内容不完全或者難以獲得時,依然可以通過其他使用者的回報給出推薦
    • CF基于使用者之間對物品的評價品質,避免了CB僅依賴内容可能造成的對物品品質判斷的幹擾
    • CF推薦不受内容限制,隻要其他類似使用者給出了對不同物品的興趣,CF就可以給使用者推薦出内容差異很大的物品(但有某種内在聯系)

協同過濾的方法分類:

  • 基于近鄰的協同過濾:
    • 基于使用者(User-CF)
    • 基于物品(Item-CF)
  • 基于模型的協同過濾:
    • 奇異值分解(SVD)
    • 潛在語義分析(LSA)
    • 支援向量機(SVM)
基于聚類分析和協同過濾算法的營養膳食分析系統的設計與實作1 簡介1. 協同過濾的算法思想2. 協同過濾的推薦方法3. 基于近鄰的協同過濾2 設計概要3 系統關鍵技術4 開發工具5 代碼展示6 系統功能描述

3. 基于近鄰的協同過濾

3.1. 什麼是基于近鄰的協同過濾

  • 基于使用者的協同過濾(UserCF):給使用者推薦和使用者相似的其他使用者喜歡的東西。
  • 基于物品的協同過濾(ItemCF):給使用者推薦和使用者喜歡的東西相似的其他東西。
  • 基于近鄰的推薦系統根據的是相同 “口碑” 準則,如下所示,是否應該給Cary推薦《泰坦尼克号》?答案是肯定的
基于聚類分析和協同過濾算法的營養膳食分析系統的設計與實作1 簡介1. 協同過濾的算法思想2. 協同過濾的推薦方法3. 基于近鄰的協同過濾2 設計概要3 系統關鍵技術4 開發工具5 代碼展示6 系統功能描述

3.2. 基于使用者的CF

使用者A喜歡的物品使用者C都喜歡,我們認為使用者A與使用者C相似,

那麼使用者C喜歡的東西可能使用者A也喜歡,是以将使用者C喜歡的物品推薦給使用者A。

基于聚類分析和協同過濾算法的營養膳食分析系統的設計與實作1 簡介1. 協同過濾的算法思想2. 協同過濾的推薦方法3. 基于近鄰的協同過濾2 設計概要3 系統關鍵技術4 開發工具5 代碼展示6 系統功能描述

思想總結如下:

基于聚類分析和協同過濾算法的營養膳食分析系統的設計與實作1 簡介1. 協同過濾的算法思想2. 協同過濾的推薦方法3. 基于近鄰的協同過濾2 設計概要3 系統關鍵技術4 開發工具5 代碼展示6 系統功能描述
  • 基于使用者的協同過濾推薦的基本原理是,根據所有使用者對物品的偏好,發現與目前使用者口味和偏好相似的“鄰居”使用者群,并推薦近鄰所偏好的物品
  • 在一般的應用中是采用計算“K-近鄰”的算法;基于這 K 個鄰居的曆史偏好資訊,為目前使用者進行推薦
  • User-CF和基于人口統計學的推薦機制
    • 兩者都是計算使用者的相似度,并基于相似的“鄰居”使用者群計算推薦
    • 它們所不同的是如何計算使用者的相似度:基于人口統計學的機制隻考慮使用者本身的特征,而基于使用者的協同過濾機制可是在使用者的曆史偏好的資料上計算使用者的相似度,它的基本假設是,喜歡類似物品的使用者可能有相同或者相似的口味和偏好

模型核心算法僞代碼表示如下:

基于聚類分析和協同過濾算法的營養膳食分析系統的設計與實作1 簡介1. 協同過濾的算法思想2. 協同過濾的推薦方法3. 基于近鄰的協同過濾2 設計概要3 系統關鍵技術4 開發工具5 代碼展示6 系統功能描述

基于該核心算法,完成使用者商品矩陣:

基于聚類分析和協同過濾算法的營養膳食分析系統的設計與實作1 簡介1. 協同過濾的算法思想2. 協同過濾的推薦方法3. 基于近鄰的協同過濾2 設計概要3 系統關鍵技術4 開發工具5 代碼展示6 系統功能描述

預測使用者對于未評分的物品的分值,然後按照降序排序,進行推薦。

3.3. 基于物品的CF

喜歡物品A的使用者都喜歡物品C,那麼我們認為物品A與物品C相似,

那麼喜歡物品A的使用者也可能會喜歡物品C,是以,将物品C推薦給喜歡物品A的使用者。

基于聚類分析和協同過濾算法的營養膳食分析系統的設計與實作1 簡介1. 協同過濾的算法思想2. 協同過濾的推薦方法3. 基于近鄰的協同過濾2 設計概要3 系統關鍵技術4 開發工具5 代碼展示6 系統功能描述

思想總結如下:

基于聚類分析和協同過濾算法的營養膳食分析系統的設計與實作1 簡介1. 協同過濾的算法思想2. 協同過濾的推薦方法3. 基于近鄰的協同過濾2 設計概要3 系統關鍵技術4 開發工具5 代碼展示6 系統功能描述
  • 基于項目的協同過濾推薦的基本原理與基于使用者的類似,隻是使用所有使用者對物品的偏好,發現物品和物品之間的相似度,然後根據使用者的曆史偏好資訊,将類似的物品推薦給使用者
  • Item-CF和基于内容(CB)的推薦
    • 其實都是基于物品相似度預測推薦,隻是相似度計算的方法不一樣,前者是從使用者曆史的偏好推斷,而後者是基于物品本身的屬性特征資訊
  • 同樣是協同過濾,在基于使用者和基于項目兩個政策中應該如何選擇呢?
    • 電商、電影、音樂網站,使用者數t遠大于物品數量
    • 新聞網沾,物品(新聞文本)數員可能大于使用者數量

2 設計概要

4.2系統整體子產品

系統功能

1、 為商家提供可營運的平台;

2、 在系統中可以為商家添加的菜品進行營養成分分析;

3、 使用者需要登陸注冊自己的個人賬号;

4、 為使用者提供點餐系統;

5、 使用者可在營養查詢界面進行食物的營養成分查詢

6、 使用者可以查詢自己的曆史飲食記錄

7、 使用者可以自行輸入每餐獲得相應的營養卡和标準營養卡的對比。

餐飲系統子產品功能:

使用者注冊:主要是實作使用者的注冊功能。

使用者登入:監測對象輸入相關的個人資訊登入系統,登入成功後,會進入系統主界面。

搜尋:可查詢各種食材的營養含量。

背景管理部分

系統的背景主要負責對系統資料庫的定期維護和營養醫師對食物和菜肴的添加

和修改,以下是其主要功能的簡單描述:

食物資訊管理:對食物種類、食物資訊的添加、删除和查詢。

菜肴資訊管理:對菜肴種類、菜肴資訊的添加、删除和查詢。

早餐資訊管理:對早餐種類、菜肴資訊的添加、删除和查詢。

營養分析系統功能:

膳食分析:監測對象可以通過主界面進入膳食分析界面,膳食分析主要根據使用者錄入的膳食資訊,實作對監測對象進行膳食分析,并顯示膳食分析的結果。

自動配餐:根據使用者目前的狀态和使用者主食、水果等的選擇,自動選擇菜肴,并給出自動配餐的結果和菜肴的營養素含量。

使用者偏好:顯示、修改監測對象的飲食偏好,包括偏好和忌口。

使用者建議:顯示監測對象提出的建議,提供使用者提出建議的方式。

4.2系統整體子產品圖

基于聚類分析和協同過濾算法的營養膳食分析系統的設計與實作1 簡介1. 協同過濾的算法思想2. 協同過濾的推薦方法3. 基于近鄰的協同過濾2 設計概要3 系統關鍵技術4 開發工具5 代碼展示6 系統功能描述

4.2.1注冊登入子產品

使用者進行系統使用前需要先進行登入,登入時會對使用者輸入的賬号和密碼進行檢測,如果存在則驗證正确性,如果不存在則會提示注冊。使用者注冊時,會對使用者輸入的賬号進行檢測,如果資料庫中存在相同賬号則不能進行注冊,在注冊完畢之後,會提示注冊成功,并詢問是否傳回登入。詳細的登入注冊流程圖如下:

基于聚類分析和協同過濾算法的營養膳食分析系統的設計與實作1 簡介1. 協同過濾的算法思想2. 協同過濾的推薦方法3. 基于近鄰的協同過濾2 設計概要3 系統關鍵技術4 開發工具5 代碼展示6 系統功能描述
基于聚類分析和協同過濾算法的營養膳食分析系統的設計與實作1 簡介1. 協同過濾的算法思想2. 協同過濾的推薦方法3. 基于近鄰的協同過濾2 設計概要3 系統關鍵技術4 開發工具5 代碼展示6 系統功能描述

4.3注冊登入子產品流程圖

4.2.2點菜子產品

點菜子產品中有膳食營養分析系統的參與,幫助使用者更好的從源頭抓起在一定程度上改善飲食健康。使用者在開始點菜之前需要提前選擇這次餐的類型,系統會根據使用者選擇在已有菜品中進行挑選,但是由于單一類型的過量食用依舊會對健康造成影響,是以在送出菜單之後系統會自動對菜品進行評估并給出建議。點餐流程圖如下:

4.4點菜子產品流程圖

4.2.3使用者子產品

使用者在個人資訊中填寫個人健康狀況,系統根據使用者健康推薦相應的飲食類型;使用者可在曆史記錄中查詢近期的飲食情況;膳食營養分析系統會在每次使用者用餐完成之後給出營養表單,此表單也位于曆史記錄之中可供檢視;使用者可在查詢單元中搜尋食材的營養含量便于在系統不便于計算時自行調整,系統也将提供營養電腦,供使用者自行使用。

4.5使用者子產品用例圖

4.3系統算法子產品

膳食營養分析系統主要運用聚類算法和網絡爬蟲兩大算法,其中聚類算法主要解決系統推薦菜單問題,通過聚類算法将相近的資料進行拉攏達到簡化的目的,而爬蟲則是解決營養資料來源問題,通過網絡爬蟲技術将網絡上開源的權威營養成分資訊進行抓取,再通過資料處理手段進行資料再整合以符合系統所需。本次将采用主題網絡爬蟲的技術來進行。相比于通用網絡爬蟲,主題網絡爬蟲的目标是抓取特定主題頁面,過濾無關頁面,其特點是專而精。主題網絡爬蟲能夠減輕系統消耗,節約寬帶資源[9]。

4.6爬蟲算法子產品流程圖

基于聚類分析和協同過濾算法的營養膳食分析系統的設計與實作1 簡介1. 協同過濾的算法思想2. 協同過濾的推薦方法3. 基于近鄰的協同過濾2 設計概要3 系統關鍵技術4 開發工具5 代碼展示6 系統功能描述
基于聚類分析和協同過濾算法的營養膳食分析系統的設計與實作1 簡介1. 協同過濾的算法思想2. 協同過濾的推薦方法3. 基于近鄰的協同過濾2 設計概要3 系統關鍵技術4 開發工具5 代碼展示6 系統功能描述

3 系統關鍵技術

使用springboot,vue,mysql, mybaties, typescript, html ,css, js 等進行開發

4 開發工具

開發工具主要有:idea、jdk1.8、maven、mysql5.7、Navicat等。

5 代碼展示

@RequestMapping("/strategy")
@RestController
@Scope("prototype")
public class StrategyController {
    @Autowired
    private StrategyService strategyService;
    @Value("${web.upload-path}")
    private String path;

    @RequestMapping("/findPage")
    public ObjDat<Strategy> findPage(Strategy strategy, @RequestParam(value="page", defaultValue="1") int page, @RequestParam(value="limit", defaultValue="10") int limit){
        return strategyService.findPage(strategy,page-1,limit);
    }

    @RequestMapping("/edit")
    public JsonResult edit(HttpServletRequest request, Strategy strategy) throws IOException {
        User user=(User)request.getSession().getAttribute("user");
        if(user==null){
            return JsonResult.error("請登入");
        }
        String str=strategyService.edit(request,strategy);
        if(str.equals("成功")){
            return JsonResult.success("操作成功");
        }else{
            return JsonResult.error("操作失敗");
        }
    }
           

6 系統功能描述

項目功能示範

基于聚類分析和協同過濾算法的營養膳食分析系統的設計與實作1 簡介1. 協同過濾的算法思想2. 協同過濾的推薦方法3. 基于近鄰的協同過濾2 設計概要3 系統關鍵技術4 開發工具5 代碼展示6 系統功能描述
基于聚類分析和協同過濾算法的營養膳食分析系統的設計與實作1 簡介1. 協同過濾的算法思想2. 協同過濾的推薦方法3. 基于近鄰的協同過濾2 設計概要3 系統關鍵技術4 開發工具5 代碼展示6 系統功能描述
基于聚類分析和協同過濾算法的營養膳食分析系統的設計與實作1 簡介1. 協同過濾的算法思想2. 協同過濾的推薦方法3. 基于近鄰的協同過濾2 設計概要3 系統關鍵技術4 開發工具5 代碼展示6 系統功能描述
基于聚類分析和協同過濾算法的營養膳食分析系統的設計與實作1 簡介1. 協同過濾的算法思想2. 協同過濾的推薦方法3. 基于近鄰的協同過濾2 設計概要3 系統關鍵技術4 開發工具5 代碼展示6 系統功能描述
基于聚類分析和協同過濾算法的營養膳食分析系統的設計與實作1 簡介1. 協同過濾的算法思想2. 協同過濾的推薦方法3. 基于近鄰的協同過濾2 設計概要3 系統關鍵技術4 開發工具5 代碼展示6 系統功能描述
基于聚類分析和協同過濾算法的營養膳食分析系統的設計與實作1 簡介1. 協同過濾的算法思想2. 協同過濾的推薦方法3. 基于近鄰的協同過濾2 設計概要3 系統關鍵技術4 開發工具5 代碼展示6 系統功能描述
基于聚類分析和協同過濾算法的營養膳食分析系統的設計與實作1 簡介1. 協同過濾的算法思想2. 協同過濾的推薦方法3. 基于近鄰的協同過濾2 設計概要3 系統關鍵技術4 開發工具5 代碼展示6 系統功能描述
基于聚類分析和協同過濾算法的營養膳食分析系統的設計與實作1 簡介1. 協同過濾的算法思想2. 協同過濾的推薦方法3. 基于近鄰的協同過濾2 設計概要3 系統關鍵技術4 開發工具5 代碼展示6 系統功能描述