喻 兵 郝梓杰 羅裕升 朱珍民*
1(湘潭大學(xué) 湖南 湘潭 411105)2(中國(guó)科學(xué)院計(jì)算技術(shù)研究所 北京 100080)
隨著社會(huì)不斷進(jìn)步與發(fā)展,人們的生活質(zhì)量不斷提高,健康話題越來(lái)越被人們所關(guān)注。然而,不良的生活方式是導(dǎo)致慢性非傳染性疾病不斷增加的重要因素,其中,飲食方面尤為突出。因此,注重飲食的合理性和健康性,才能確保和維持人體中必需營(yíng)養(yǎng)素的平衡性,避免慢性病的發(fā)生[1],從而提高人的壽命和健康水平。
如何為人們提供合理的飲食方案便成為世界各地營(yíng)養(yǎng)學(xué)家的職責(zé)。如今,由于營(yíng)養(yǎng)學(xué)家人數(shù)有限且行醫(yī)水平參差不齊,人們想要便捷地了解自己的飲食狀態(tài)并不方便。但是隨著移動(dòng)互聯(lián)網(wǎng)產(chǎn)業(yè)的興起,各種推薦系統(tǒng)應(yīng)運(yùn)而生[2],作用于不同應(yīng)用的場(chǎng)景。最近幾年也有學(xué)者嘗試將推薦算法應(yīng)用在飲食推薦中,例如:2012年,北京大學(xué)的孔令?lèi)鸬萚3]在傳統(tǒng)的協(xié)同過(guò)濾基礎(chǔ)上引入遺忘曲線和修改權(quán)重來(lái)修改菜品的統(tǒng)計(jì)值,然后運(yùn)用相關(guān)算法計(jì)算出用戶之間的相似度,從而以相似用戶的下單數(shù)據(jù)當(dāng)作該用戶的推薦依據(jù);同年,北京大學(xué)的陳曦等[4]充分利用智能手機(jī)感知周?chē)榫承畔⒌墓δ?,設(shè)計(jì)了一個(gè)基于Android移動(dòng)終端的結(jié)合地理位置、時(shí)間、美食特點(diǎn)和用戶個(gè)人信息的推薦系統(tǒng);2015年,電子科技大學(xué)的趙恒等[5]提出了一種基于LBS的本地美食推薦系統(tǒng),該系統(tǒng)基于地理位置和混合推送策略為用戶進(jìn)行推薦;2016年,盛實(shí)旺等[6]基于改進(jìn)的Apriori算法進(jìn)行用戶的飲食愛(ài)好分析,實(shí)現(xiàn)個(gè)性化推薦。
近幾年飲食推薦的研究,基本是基于內(nèi)容、關(guān)聯(lián)規(guī)則和協(xié)同過(guò)濾的推薦,旨在挖掘用戶的喜好并以提高點(diǎn)擊轉(zhuǎn)化率和商業(yè)價(jià)值為目的,在健康飲食推薦方面的研究依然十分匱乏。故此,本文提出一種合理有效的多維度飲食推薦方法,從而彌補(bǔ)在健康飲食推薦方面的不足。
本文菜品數(shù)據(jù)集包含中華菜系、疾病調(diào)養(yǎng)食譜、功能性調(diào)理膳食、人群營(yíng)養(yǎng)膳食等幾大類(lèi)菜譜。經(jīng)過(guò)格式整理,菜品包含多個(gè)字段。將菜名、圖片、制作方法、制作提示、口感、推薦食用時(shí)間、營(yíng)養(yǎng)解析、食物相克作為普通字段,這些字段無(wú)實(shí)際意義,僅僅作為菜品的展示信息;而工藝、口味、菜系、功效、主料、輔料、調(diào)料、營(yíng)養(yǎng)成分作為核心字段,這些字段對(duì)用戶的飲食分析起到重要的作用,需要進(jìn)行特征處理。本文重點(diǎn)在于判斷用戶的飲食是否符合健康標(biāo)準(zhǔn),為了保證菜品數(shù)據(jù)能最大程度地反映用戶飲食結(jié)構(gòu),需要對(duì)菜品數(shù)據(jù)進(jìn)行預(yù)處理與特征構(gòu)造。
通過(guò)數(shù)據(jù)統(tǒng)計(jì)分析,發(fā)現(xiàn)不同菜品的質(zhì)量存在一定的差異,這可能導(dǎo)致各個(gè)成分含量存在較大的波動(dòng)。為了提高本文推薦算法的準(zhǔn)確率,故對(duì)所有數(shù)值型特征進(jìn)行數(shù)據(jù)標(biāo)準(zhǔn)化預(yù)處理。
由于菜品數(shù)據(jù)在特征空間內(nèi)存在較多離群點(diǎn),導(dǎo)致空間分布不均勻并且各個(gè)特征維度有不同的量綱。故此,本文對(duì)數(shù)值型特征先進(jìn)行l(wèi)n函數(shù)平滑,再對(duì)平滑后的值進(jìn)行Z-Score標(biāo)準(zhǔn)化處理,能讓數(shù)值特征的分布更加均勻,并且對(duì)各個(gè)數(shù)值型特征的量綱進(jìn)行了統(tǒng)一。
原始菜品數(shù)據(jù)集中,菜品質(zhì)量不同導(dǎo)致?tīng)I(yíng)養(yǎng)成分含量不同,僅對(duì)“營(yíng)養(yǎng)成分含量”特征進(jìn)行統(tǒng)計(jì)無(wú)法刻畫(huà)菜品營(yíng)養(yǎng)結(jié)構(gòu)信息。為了消除菜品質(zhì)量對(duì)營(yíng)養(yǎng)結(jié)構(gòu)分析的影響,本文采用1-范數(shù)正則化對(duì)營(yíng)養(yǎng)成分含量特征進(jìn)行正則化,目的在于獲取每個(gè)成分含量所占有營(yíng)養(yǎng)成分含量的百分比,從而得到菜品營(yíng)養(yǎng)結(jié)構(gòu)的信息。由于營(yíng)養(yǎng)元素分為宏量營(yíng)養(yǎng)元素和微量營(yíng)養(yǎng)元素,而微量元素含量的變化必然會(huì)被宏量元素含量掩蓋,導(dǎo)致模型無(wú)法捕捉到微量元素的特征。為了解決宏量元素與微量元素含量差距過(guò)大的問(wèn)題,使用Max-Min標(biāo)準(zhǔn)化,再正則化,能夠更準(zhǔn)確地刻畫(huà)菜品的營(yíng)養(yǎng)成分。
在CTR預(yù)估場(chǎng)景中,為了提高模型預(yù)測(cè)的準(zhǔn)確率,常常將數(shù)值型特征轉(zhuǎn)換為離散型特征,主要原因是特征離散化后對(duì)特征的表達(dá)更加合理。比如對(duì)于年齡特征,可能將20~30歲區(qū)間作為同一個(gè)離散值更合理,因?yàn)槿藗儾粫?huì)因?yàn)樵黾恿?歲而改變興趣愛(ài)好,同時(shí)也會(huì)增強(qiáng)模型對(duì)數(shù)據(jù)異常值的魯棒性。
本文對(duì)用戶的口味偏好進(jìn)行挖掘,需要將“調(diào)料成分含量”做進(jìn)一步的特征構(gòu)造。為了對(duì)用戶口味偏好進(jìn)行更好的建模,本文采用GBDT算法[7]對(duì)“調(diào)料成分含量”特征進(jìn)行離散化,將原始的調(diào)料成分特征作為GBDT的輸入,口味特征作為label訓(xùn)練模型,最終得到150個(gè)特征個(gè)數(shù)。GBDT特征構(gòu)造的原理步驟如下:
(1) 利用菜品原始調(diào)料成分作為特征和口味作為訓(xùn)練標(biāo)簽,進(jìn)行GBDT特征訓(xùn)練;
(2) 訓(xùn)練完成后,將訓(xùn)練樣本輸入GBDT中,得到樣本在每棵樹(shù)的葉子節(jié)點(diǎn)的編號(hào),再對(duì)該編號(hào)進(jìn)行one-hot編碼;
(3) 將第二步得到的所有one-hot編碼拼接成一組新的離散化特征(特征長(zhǎng)度為所有葉節(jié)點(diǎn)的個(gè)數(shù))。
通過(guò)數(shù)據(jù)預(yù)處理和特征離散化,得到了菜品數(shù)據(jù)集的全部特征,共分為7組特征,其中前3個(gè)特征組為原始特征,4、5特征組為經(jīng)過(guò)平滑和標(biāo)準(zhǔn)化后的數(shù)值型特征,6特征組為營(yíng)養(yǎng)成分含量歸一化和正則化后的特征值,7特征組為調(diào)料成分經(jīng)過(guò)GBDT模型離散化后的值,具體的特征列表如表1所示。
表1 菜品特征列表
對(duì)菜品進(jìn)行數(shù)據(jù)分析,能夠?qū)⒉似愤@個(gè)抽象的事物進(jìn)行數(shù)字化或結(jié)構(gòu)化的表征,使推薦算法能有效地猜測(cè)用戶對(duì)菜品的所需和所愛(ài)。
前面簡(jiǎn)單提到,大部分學(xué)者的飲食推薦工作主要以結(jié)合手機(jī)定位、社交網(wǎng)絡(luò)等多維度的外部特征,從而最大化用戶的點(diǎn)擊率。與以最大化點(diǎn)擊率為目標(biāo)的個(gè)性化推薦算法不同,本文推薦算法是以調(diào)節(jié)用戶飲食結(jié)構(gòu)為主,口味挖掘?yàn)檩o。因此,算法并未涉及到協(xié)同過(guò)濾等[8]傳統(tǒng)的推薦技術(shù),因?yàn)橐宰畲蠡c(diǎn)擊率為目標(biāo)的推薦算法很大概率不符合健康標(biāo)準(zhǔn)。本文旨在基于用戶畫(huà)像、飲食記錄、即時(shí)情境3種方式對(duì)用戶進(jìn)行飲食推薦,從而使用戶飲食結(jié)構(gòu)合理化。
用戶畫(huà)像就是根據(jù)用戶的人口屬性、偏好習(xí)慣和行為信息而抽象出來(lái)的標(biāo)簽化畫(huà)像[9]?;谠擃?lèi)特征可以準(zhǔn)確定義不同用戶的營(yíng)養(yǎng)成分含量合理攝入?yún)^(qū)間的差異性。本文將用戶畫(huà)像定義為年齡、性別、身高、體重、過(guò)敏源、人群、疾病7個(gè)方面,其中人群包含7類(lèi):普通人群、老人、孕婦、乳母、嬰兒、幼兒、青少年;疾病包含6類(lèi):高血壓、高血脂、糖尿病、冠心病、脂肪肝、肝硬化。基于用戶畫(huà)像的推薦方式是確定性算法,可以形式化為:
y1=H(Df,Cf)
(1)
y2=G(y1,Qf,BMI)
(2)
y3=G(y2,Af)
(3)
式中:Df表示疾病特征,Cf表示人群特征,Qf表示歷史攝入量,BMI表示體質(zhì)指數(shù),Af表示人體過(guò)敏原。通過(guò)形式化的表達(dá)可知,本推薦方式可分為3個(gè)步驟進(jìn)行,從而產(chǎn)生最終的推薦列表y3,算法步驟可描述如下:
(1) 根據(jù)用戶的疾病特征和人群特征的營(yíng)養(yǎng)成分合理攝入?yún)^(qū)間進(jìn)行菜品過(guò)濾,得到列表y1;
(2) 先對(duì)用戶近期的菜品進(jìn)行未達(dá)標(biāo)和超標(biāo)元素的統(tǒng)計(jì),再對(duì)未達(dá)標(biāo)和超標(biāo)列表對(duì)y1進(jìn)行不滿足條件菜品過(guò)濾,然后根據(jù)BMI指數(shù)對(duì)脂肪含量極端值進(jìn)行過(guò)濾,得到列表y2;
(3) 最后根據(jù)主料、輔料、調(diào)料成分含量,將推薦列表y2中具有過(guò)敏原的菜品數(shù)據(jù)進(jìn)行過(guò)濾,產(chǎn)生最終推薦給用戶的菜品列表y3。
通過(guò)上述算法,以用戶畫(huà)像為依據(jù),判斷用戶近期飲食是否符合該畫(huà)像的膳食指南,從而可以推薦最滿足該用戶身體狀態(tài)的菜品列表。
飲食記錄是用戶在本實(shí)驗(yàn)平臺(tái)上操作的所有行為記錄,比如食用、喜歡、不喜歡等,該類(lèi)特征可以有效挖掘用戶的飲食偏好,從而判斷用戶的營(yíng)養(yǎng)結(jié)構(gòu)是否合理并且挖掘出用戶喜愛(ài)的口味。
2.2.1基于營(yíng)養(yǎng)結(jié)構(gòu)的推薦算法
在營(yíng)養(yǎng)結(jié)構(gòu)挖掘中,聚類(lèi)與分類(lèi)的不同在于,聚類(lèi)所要求劃分的類(lèi)是未知的,根據(jù)信息相似度進(jìn)行信息聚類(lèi);而分類(lèi)是每個(gè)樣本數(shù)據(jù)已有類(lèi)標(biāo)識(shí),然后將該對(duì)象歸為對(duì)應(yīng)的類(lèi)中。因此,本文通過(guò)聚類(lèi)的方法將包含相似營(yíng)養(yǎng)成分的菜品聚在相同的簇內(nèi),達(dá)到分類(lèi)的效果。算法步驟如下:
(1) 將所有菜品數(shù)據(jù)按表2中的4、6特征組進(jìn)行聚類(lèi),簇?cái)?shù)可以調(diào)整;
(2) 判定該用戶最近K次食用的菜品,統(tǒng)計(jì)其簇?cái)?shù)分布;
(3) 推薦該用戶食用簇?cái)?shù)最少的簇內(nèi)食物,目前采用隨機(jī)推薦。
2.2.2基于用戶口味的推薦算法
VDM定義如下:令mu,a表示在屬性u(píng)上取值為a的樣本數(shù),mu,a,i表示第i個(gè)樣本簇中屬性u(píng)上取值為a的樣本數(shù),k為樣本簇?cái)?shù),則屬性u(píng)上兩個(gè)離散值a與b直接的VDM距離公式如下:
(4)
類(lèi)VDM定義如下:對(duì)于每個(gè)用戶來(lái)說(shuō),mu,a表示所有食用的食物中屬性u(píng)上取值為a的菜品數(shù),mu表示所有食用的食物中具有屬性u(píng)的菜品數(shù),所以類(lèi)VDM距離公式如下:
(5)
基于上述的類(lèi)別型特征距離計(jì)算方法,再結(jié)合傳統(tǒng)的數(shù)值型特征距離計(jì)算方法,便可以對(duì)菜品數(shù)據(jù)進(jìn)行距離計(jì)算,從而挖掘出相似口味的食物??谖锻诰蛩惴ú襟E如下:
(1) 將所有菜品數(shù)據(jù)特征進(jìn)行表示,查詢(xún)?cè)撚脩糇罱腗次飲食記錄,利用本文提出的類(lèi)別型距離計(jì)算公式計(jì)算各個(gè)類(lèi)別間的距離;
(2) 在全集菜品中,以距離遠(yuǎn)近為標(biāo)準(zhǔn)選擇口味最相似的N個(gè)菜品進(jìn)行推薦。
上述兩種算法都是依據(jù)用戶的飲食記錄,產(chǎn)生不同的推薦列表,分別滿足用戶營(yíng)養(yǎng)均衡需求和用戶口味偏好的需求。
前兩種推薦算法主要側(cè)重于用戶屬性和歷史記錄推斷“用戶應(yīng)該吃什么”和“用戶可能愛(ài)吃什么”。但是依據(jù)靜態(tài)特征所做出的判斷,往往沒(méi)有考慮到即時(shí)情境的影響。本文將此時(shí)的時(shí)間、此時(shí)的運(yùn)動(dòng)消耗作為特征,提出一種即時(shí)情境的推薦方式。
本文將飲食時(shí)間劃分成早、中、晚3個(gè)時(shí)間段,運(yùn)動(dòng)量劃分成低、中、高3個(gè)等級(jí)(基于運(yùn)動(dòng)步數(shù)劃分),并且用戶的飲食熱量含量應(yīng)該隨著時(shí)間中、早、晚和運(yùn)動(dòng)量高、中、低依次遞減。將用戶的即時(shí)狀態(tài)編碼成兩位的字符,例如“00”代表此時(shí)是晚上并且用戶運(yùn)動(dòng)量低,需求等級(jí)為0,此時(shí)需要最低熱量的食物即可;“22”代表此時(shí)是中午并且運(yùn)動(dòng)量高,需求等級(jí)為4,此時(shí)需要最高熱量的食物比較合適。該推薦算法步驟如下:
(1) 獲取用戶特征、用戶近期飲食的菜品以及用戶飲食的行為;
(2) 依據(jù)用戶特征、用戶近期飲食的菜品特征,采用上述用戶畫(huà)像推薦算法得到推薦列表y1;
(3) 依據(jù)用戶近期飲食行為,采用上述飲食記錄推薦算法得到推薦列表y2;
(4) 獲取用戶當(dāng)前時(shí)間與運(yùn)動(dòng)步數(shù),將用戶的即時(shí)狀態(tài)進(jìn)行編碼;
(5) 根據(jù)用戶的編碼,依次在y1和y2列表中返回與用戶熱量需求等級(jí)最相近的菜品。
該推薦方法與前兩種推薦方法屬于遞進(jìn)關(guān)系,即在前兩種推薦列表的基礎(chǔ)上考慮了即時(shí)情境對(duì)飲食的影響,將時(shí)間和用戶運(yùn)動(dòng)量特征作為外部特征對(duì)前兩種推薦列表進(jìn)行重排序,產(chǎn)生菜品列表。
依據(jù)營(yíng)養(yǎng)學(xué)會(huì)針對(duì)不同疾病和人群的膳食營(yíng)養(yǎng)指南,制訂了各個(gè)營(yíng)養(yǎng)攝入量規(guī)則。其中不同人群、不同病種的膳食指南可簡(jiǎn)化抽象如表2所示。
表2 不同人群和不同疾病膳食指南概括
本實(shí)驗(yàn)的具體步驟如下:
(1) 隨機(jī)模擬不同的用戶畫(huà)像;
(2) 根據(jù)模擬用戶的疾病、人群特征在全集菜品中初步篩選出所有符合該用戶特征的菜品;
(3) 根據(jù)該用戶的近期飲食記錄和BMI值,并按規(guī)則對(duì)菜品進(jìn)行二次篩選;
(4) 過(guò)濾過(guò)敏源,產(chǎn)生最終符合條件的菜品進(jìn)行推薦。
基于用戶畫(huà)像的推薦是基于領(lǐng)域知識(shí)設(shè)定規(guī)則的推薦。本研究共進(jìn)行了50次不同用戶畫(huà)像的隨機(jī)模型實(shí)驗(yàn),通過(guò)對(duì)各類(lèi)用戶畫(huà)像的推薦菜品進(jìn)行原始營(yíng)養(yǎng)元素含量數(shù)據(jù)的均值統(tǒng)計(jì),并與全集菜品的相關(guān)營(yíng)養(yǎng)元素含量的均值統(tǒng)計(jì)值進(jìn)行對(duì)比;針對(duì)不同疾病和不同人群,模擬用戶1和用戶2,假設(shè)用戶1是一位患有高血壓的孕婦,用戶2是一位患有高血壓的老人;分別列舉兩組推薦菜品的統(tǒng)計(jì)信息,統(tǒng)計(jì)其相關(guān)營(yíng)養(yǎng)元素含量進(jìn)行比較,實(shí)驗(yàn)結(jié)果如圖1和圖2所示。
圖1 高血壓推薦菜品與全集菜品的營(yíng)養(yǎng)元素對(duì)比
圖2 高血脂推薦菜品與全集菜品的營(yíng)養(yǎng)元素對(duì)比
根據(jù)BMI指數(shù)對(duì)菜品數(shù)據(jù)中“脂肪含量”高于或低于一定閾值的菜品進(jìn)行過(guò)濾,從而進(jìn)一步產(chǎn)生合理的推薦列表。針對(duì)上述高血壓孕婦的案例,模擬用戶3和用戶4,其BMI指數(shù)分別高于正常值和低于正常值,對(duì)比營(yíng)養(yǎng)元素變化。實(shí)驗(yàn)結(jié)果如圖3和圖4所示。
圖3 雙重條件改變時(shí)營(yíng)養(yǎng)元素含量變化
圖4 BMI指標(biāo)變化時(shí)營(yíng)養(yǎng)元素含量變化
將圖1、圖2與表2作對(duì)比可知,表2的所有指標(biāo),均符合膳食指南建議,從而證明了本推薦算法對(duì)于單一人群或疾病特征具有有效性。
由圖3可知,在雙重條件控制下,本算法依然可以返回相對(duì)合理的菜品推薦列表。在關(guān)鍵營(yíng)養(yǎng)元素上,由于人群特征的不同而導(dǎo)致其含量不同,例如“葉酸含量”和“碘含量”在高血壓孕婦推薦菜品相比于高血壓老人推薦菜品會(huì)有一倍以上的提升,同時(shí)也能保證“纖維素含量”、“維生素含量”等均保持較高的水平。
由圖4可知,在BMI指數(shù)過(guò)高時(shí),推薦菜品的平均脂肪含量會(huì)相對(duì)下降,而在BMI指數(shù)過(guò)低時(shí),推薦菜品的平均脂肪含量會(huì)相對(duì)上升,并且對(duì)于疾病和人群特征的關(guān)鍵營(yíng)養(yǎng)元素的含量沒(méi)有發(fā)生太大變化,依然符合膳食指南標(biāo)準(zhǔn),從而證明了本推薦策略的有效性。
3.2.1營(yíng)養(yǎng)結(jié)構(gòu)實(shí)驗(yàn)分析
本文根據(jù)用戶最近飲食記錄,對(duì)菜品進(jìn)行聚類(lèi)分析。聚類(lèi)性能度量的方法大致分為兩類(lèi):(1) 人工標(biāo)注的外部指標(biāo);(2) 內(nèi)部指標(biāo)。因?yàn)楸緮?shù)據(jù)集中的所有菜品數(shù)據(jù)均缺少營(yíng)養(yǎng)結(jié)構(gòu)標(biāo)注,所以本研究采用內(nèi)部指標(biāo)作為聚類(lèi)算法效果的度量指標(biāo)。假設(shè)某聚類(lèi)算法對(duì)數(shù)據(jù)集的簇劃分為C={C1,C2,…,Ck},則有如下定義:
(6)
diam(C)=max1≤i≤j≤|C|dist(xi,xj)
(7)
dmin(Ci,Cj)=minxi∈Ci,xj∈Cjdist(xi,xj)
(8)
dcen(Ci,Cj)=dist(μi,μj)
(9)
式中:dist()函數(shù)代表兩個(gè)實(shí)例之間的距離計(jì)算公式;μ代表簇C的中心點(diǎn),avg(C)表示簇C內(nèi)樣本間的平均距離,diam(C)表示簇C內(nèi)樣本間的最遠(yuǎn)距離,dmin(Ci,Cj)表示簇Ci和Cj最近樣本間的距離,dcen(Ci,Cj)表示簇Ci和Cj中心點(diǎn)間的距離。基于上式,可以導(dǎo)出下面兩個(gè)常用的聚類(lèi)性能度量?jī)?nèi)部指標(biāo),DBI值越小越好,DI值越大越好。
1) DB指數(shù)DBI(Davies-Bouldin Index):
(10)
2) Dunn指數(shù)DI(Dunn Index):
(11)
本文分別考慮K-means[10]和DBSCAN[11]兩種不同的聚類(lèi)算法。K-means算法是一種無(wú)監(jiān)督的聚類(lèi)算法,它被稱(chēng)為K-平均,由于聚類(lèi)效果不錯(cuò),被廣泛使用。DBSCAN算法是一種基于密度空間的聚類(lèi)方法,它不易受到噪聲樣本的干擾,可以有效地分離出噪聲樣本。本文將兩種算法的聚類(lèi)簇?cái)?shù)控制在3、5、7個(gè),進(jìn)行度量指標(biāo)的對(duì)比。實(shí)驗(yàn)結(jié)果如圖5和圖6所示。
圖5 K-means和DBSCAN在DBI指標(biāo)對(duì)比
圖6 K-means和DBSCAN在DI指標(biāo)對(duì)比
當(dāng)cluster=5時(shí)K-means算法的DBI指數(shù)略差于DBSCAN,其余指標(biāo)均優(yōu)于DBSCAN算法。故本文采用K-means算法進(jìn)行營(yíng)養(yǎng)結(jié)構(gòu)分析,進(jìn)而為用戶進(jìn)行合理的膳食推薦。本文的特征達(dá)到60維,無(wú)法直接進(jìn)行可視化效果展示,故經(jīng)PCA降維,cluster=5時(shí),K-means與DBSCAN的聚類(lèi)效果比較如圖7所示,左側(cè)為K-means效果,右側(cè)為DBSCAN效果。
圖7 K-means和DBSCAN的聚類(lèi)效果展示
3.2.2口味偏好實(shí)驗(yàn)分析
本文采用類(lèi)VDM計(jì)算特征距離的相似度,挖掘出與用戶飲食記錄最相似的食物進(jìn)行推薦。本文共進(jìn)行了50組模擬實(shí)驗(yàn),分別對(duì)類(lèi)VDM距離計(jì)算相似度和傳統(tǒng)歐式距離計(jì)算相似度進(jìn)行對(duì)比。每次實(shí)驗(yàn)輸入一組菜品代表用戶歷史飲食記錄(分別設(shè)置歷史記錄長(zhǎng)度為1、3、5進(jìn)行實(shí)驗(yàn)),兩種相似度計(jì)算方法分別返回最相似的Top10菜品,并由5位志愿者對(duì)結(jié)果進(jìn)行標(biāo)注,準(zhǔn)確率如圖8所示。
圖8 兩種距離計(jì)算方式準(zhǔn)確率對(duì)比
由實(shí)驗(yàn)結(jié)果可知,在僅考慮1個(gè)歷史飲食記錄時(shí),本方法和基于歐氏距離的計(jì)算方法沒(méi)有任何差別,返回相同的結(jié)果。但隨著歷史記錄的增長(zhǎng),本方法在類(lèi)別型特征相似度計(jì)算上相比與原始方法有了較大優(yōu)勢(shì),在歷史長(zhǎng)度為5時(shí),準(zhǔn)確率可以達(dá)到67.4%,故驗(yàn)證了本方法的有效性。
在快節(jié)奏生活和高強(qiáng)度工作下,人們的健康狀態(tài)難以得到保障,本文在充分掌握了各種人群膳食指南的基礎(chǔ)上,利用多種數(shù)據(jù)處理方法、GBDT自動(dòng)特征構(gòu)造和不同聚類(lèi)算法等,提出了一種基于用戶畫(huà)像、飲食記錄、即時(shí)情境的飲食推薦算法,旨在幫助人們改善飲食結(jié)構(gòu),合理化不同營(yíng)養(yǎng)元素的攝入量,從而達(dá)到健康飲食的目的。本文存在的不足在于用戶的飲食記錄行為數(shù)量不足,缺少線上用戶飲食數(shù)據(jù)進(jìn)行對(duì)比。本文后續(xù)工作將使實(shí)驗(yàn)平臺(tái)上線獲取更多的用戶飲食數(shù)據(jù)進(jìn)行迭代優(yōu)化,使得推薦效果更加準(zhǔn)確;基于用戶畫(huà)像的推薦和基于飲食記錄的推薦相結(jié)合,對(duì)畫(huà)像產(chǎn)生的推薦列表根據(jù)口味偏好進(jìn)行排序;在基于即時(shí)情境的推薦方面做很多深入的研究,例如可以與無(wú)創(chuàng)生理指標(biāo)檢測(cè)方面的算法進(jìn)行融合,挖掘更多的即時(shí)情境等。本文具有重要的實(shí)際應(yīng)用價(jià)值,可幫助人們改善飲食結(jié)構(gòu)、預(yù)防慢性疾病的發(fā)生,提高全民的健康素養(yǎng)。