劉藝鵬 蔡鵬 莫慧苗 折建章
【摘? 要】為了在解決兒童飲食問題,不僅要滿足兒童的營養(yǎng)標準,同時還要滿足兒童的喜好。為了解決這個問題,提出了一種利用Item CF算法和LFM模型來進行第一層推薦,然后基于FTRL算法來推薦最終兒童喜歡的食物,最后采用差分進化算法來進行食物的匹配及食譜的推送。該模型結合幼兒園現(xiàn)狀,匹配出符合兒童營養(yǎng)標準的食譜。
【關鍵詞】協(xié)同過濾;FTRL;多目標優(yōu)化;個性化推薦;營養(yǎng)均衡
引言
近幾年也有基于營養(yǎng)標準和食物個性推薦算法的相關研究,如利用協(xié)同過濾并且使用引入差分變 異策略算子的NSGA-2個性化健康飲食推薦方法[1],基于情境感知的校園餐飲推薦方法[2],利用粒子群,聚類和Slope one等算法的基于營養(yǎng)飲食推薦系統(tǒng)研究[3],食材搭配推薦算法 研究[4]則是利用了基于NSGA-2改進的MOGA-UP算法和BP算法。本文則在經(jīng)典的協(xié)同過濾推薦算法LMF和Item CF的基礎上,又利用Google用于廣告點擊率的FTRL- Proximal增量算法, 將這幾種算法進行融合,最后利用加上一點改進,最終實現(xiàn)了較好的效果。本文提出的推薦系統(tǒng)會根據(jù)不斷更新的用戶對食物的喜好數(shù)據(jù)來訓練模型,每次會推薦出一周的食譜,不僅考慮到了每個學生的口味和營養(yǎng)指標,而且還考慮到了學校對各種食材或原料的準備,方便學校進行對每個學生不同的套餐的準備。
1.相關工作
1.1基于矩陣分解的推薦算法——LFM模型
1.2基于物品的協(xié)同過濾算法——Item CF算法
Item CF算法是根據(jù)兩個物品的相似度給用戶推薦的,計算公式如下:
計算完相似度,得到相似度矩陣后。對于某個用戶u,先找出用戶u每一個喜歡的物品的最相似的前k個其他物品。以其中一個喜歡的物品i為例,將用戶u對物品i的評分作為這個物品的權重,將與物品i最相似的k個物品的相似度與這個權重相乘,作為這k個未知物品分數(shù)的一部分,將所有用戶u喜歡的物品按照以上方式計算后,將每一個物品的每一部分的分數(shù)相加就得到每一個物品的分數(shù),按照這個分數(shù)將物品排序,取分數(shù)最高的幾個物品推薦給用戶。
經(jīng)Karypis[7]研究發(fā)現(xiàn),傳統(tǒng)的相似度的計算有著一定的缺陷,若用戶喜歡的物品有不同的類別時,類別A的物品之間的相似度可能會比類別B的物品之間的相似度高,在推薦時就會更偏向于推薦類別A的物品,而忽略了用戶喜歡的類別B的物品,所以Karypis提出了相似度矩陣的歸一化。在得到相似度矩陣后,找到每一行的最大值,再將這一行的所有數(shù)除以這個最大值,從而上述只推薦A類物品的情況就可以得到抑制。
1.3 FTRl算法
FTRL算法屬于增量學習算法,最早由谷歌的H. Brendan McMahan提出,以下公式來自于H. Brendan McMahan[8]的論文,與傳統(tǒng)的機器學習算法不同,每次訓練不需要處理所搜集到的全部數(shù)據(jù),只需要處理部分數(shù)據(jù)即可,可以更容易的處理流式數(shù)據(jù),所以在推薦領域有著廣泛的應用。
FTRL與SGD類似,每次只需要處理一個數(shù)據(jù),下式為FTRL的參數(shù)更新公式,
為超參數(shù),T為樣本總數(shù),每次接收一個樣本。先找出樣本不為0的樣本維度數(shù),將這些維度數(shù)保存到I中,然后按照以上公式中對參數(shù)w中I中存在的維度數(shù)進行更新。然后根據(jù)更新的參數(shù)對這個樣本進行預測,計算出損失函數(shù),然后對其他參數(shù)進行更新。
1.4差分進化算法
差分進化算法最早是由R.Storn和K.Price為求解Chebyshev多項式而提出的,是遺傳算法的一種,以下公式來源于R.Storn和K.Price[9]的論文。
(1)種群初始化:
其中是度第i個個體的第j維的下界,其中是度第i個個體的第j維的上界。
(2)變異(DE/best/1):
F為縮放因子,是一個常數(shù),g表示的是第g代種群。若當前種群大小為n,則進行n次變異,生成n個變異向量。
(3)交叉:
對于每一個種群中的個體,找到序號對應的變異向量進行交叉。CR為交叉概率,若進行第j維的交叉時,生成的隨機數(shù)小于CR,則這個個體交叉后的第j維為變異向量的第j維。反之則為原來的數(shù)。
(4)選擇:
將進行變異交叉之后的個體向量與原個體向量進行比較,選取最優(yōu)個體。
2.個性化飲食推薦系統(tǒng)的建立
2.1問題描述
兒童的餐飲問題一直有重要意義,合理搭配食譜,全面提高膳食質量水平是社會關注重點[10],健康飲食是搭配食譜的第一步,考慮兒童的口味和需求也十分必要。如今,幼兒園中的食譜搭配能滿足兒童營養(yǎng)的需求,兒童的愛好和口味沒有過多的進行了解,出現(xiàn)了雖然給兒童提供的飯菜營養(yǎng)均衡,但學生并不喜歡吃,達不到營養(yǎng)的均衡攝入的情況。為了解決這個問題,本文提出了基于營養(yǎng)標準的個性化食物推薦系統(tǒng)用于解決這個問題。
2.2個性化飲食推薦
對于食物的推薦,一個算法顯然是不夠的,需要多個算法進行融合才能達到較好的效果。
對于此食物推薦系統(tǒng),總體上來說,分為兩個部分,第一個部分是FTRL模型的訓練,第二個部分是根據(jù)所訓練的模型進行食譜的推薦。
(1)模型的訓練。FTRL模型可以處理不斷更新的數(shù)據(jù)。訓練時要為每個班級及個人都訓練一個模型,訓練完成后將更新的參數(shù)保存起來。給班級訓練模型是為了限制每頓飯學校需要做的菜的種類數(shù),這是考慮到了現(xiàn)實的情況。因為如果只給每個學生訓練模型,則在推薦時,每個人的菜可能都不同,學??赡芫鸵款D飯做幾百種菜,這顯然是不現(xiàn)實的,所以要訓練每一個班級的模型,為每一個班級找出可能的喜歡人數(shù)最多的菜。
(2)食物的推薦。在為每一個學生推薦食譜時,首先考慮到的是所推薦的食物用戶是否喜歡,然后才進行食物的匹配從而達到對11種營養(yǎng)物質的標準攝入。如果先考慮營養(yǎng)物質的攝入標準,若要達到較好的推薦效果的話就會需要差分進化算法匹配出很多誤差較小的食物套餐,但是這會需要很多時間,所以應該先推薦再進行差分進化去匹配。
在推薦時先是使用了LFM模型和Item CF算法。首先使用LFM模型進行推薦,得到每個用戶對每個食物的分數(shù),然后使用Item CF算法,得到另一個分數(shù),將這兩個分數(shù)按照權重相加,得到總分,取前分數(shù)最高的k個食物。一個學校剛開始使用時由于學生對食物的喜好的數(shù)據(jù)少,而且食物的分布也可能很分散或有些學生口味與大眾的口味很不同,就會導致有的學生會沒有推薦的食物,即使有也可能會很少,所以如果Item CF算法推薦的食物很少,就需要LFM模型來補充,這時如果有一個食物兩個算法的分數(shù)都有,就按照權重相加,取前幾項,如果數(shù)量較少,剩下的就要按照LFM模型的分數(shù)從高到低來選取。
在LFM模型和Item CF算法運行完成之后,每一個學生就會得到推薦的食物。然后將這些食物進行整理,將每一個班級的食物匯總,匯總的同時去掉學校由于一些原因不能制作的菜。之后利用每一個班級的FTRL模型為每一個班級推薦,進行第一次篩選,減少食物種類的同時又不會對最終的推薦結果造成很大的影響。
最后在篩選出來的食物中為每一個學生推薦,在推薦時由于會有些學生口味很符合整個班級的,而有些學生的口味卻很不符合,所以就會出現(xiàn)有的學生所推薦的食物很多,有些學生所推薦的食物很少。這時就要統(tǒng)計一下在一個班級中的每種菜的喜歡的人數(shù),選取喜歡人數(shù)最多的前k種菜,對于每一個學生都只保留這k種菜,進行菜的種類數(shù)控制,如果存在學生的推薦菜數(shù)很少,就按照每種菜喜歡的人數(shù)多少來添加,直到有足夠的數(shù)量進行接下來的差分進化。
2.3食物及其重量的匹配
給每一個學生推薦食物完成后就可以根據(jù)每個學生的食物進行食物種類及對應重量的匹配,從而滿足各種營養(yǎng)的標準攝入量。每次對每一個學生進行差分進化前差分進化前要進行對學生身高,體重及性別的判斷,大致確定這個學生缺少那些營養(yǎng)或者那種營養(yǎng)過多,從而實現(xiàn)營養(yǎng)標準的個性化。然后對這個學生的推薦食物進行編號,種群中的每個個體都由兩種或三種食物組成,每種食物都有一個對應的重量,下圖分別為一頓飯兩種菜和三種菜的營養(yǎng)誤差。每次差分進化都找出最優(yōu)的五個個體,每天分配一個最優(yōu)的個體,每個學生進行三次差分進化,分別對應早,中,晚三頓飯。
差分進化的每一個個體的適應度由下式計算:
其中x為種群中的一個個體,為第i種營養(yǎng)物質的權重,為個體的第i種營養(yǎng)物質的含量,為第i種營養(yǎng)物質的標準攝入量。每次差分進化的種群規(guī)模為25個,種群代數(shù)為80就可以找到較好的個體,而且運行時間較快。由于一個種群進化到最后種群中的個體的相似度都很大,所以在挑選其中的5個最好個體時要根據(jù)食物的種類進行去重,如果去重后的個體數(shù)少于5個就多次運行差分進化算法。
3.實驗結果與分析
3.1實驗結果
搜集到了大概有100人40天的食物喜好數(shù)據(jù),本文只使用精確率(precision)作為性能度量的指標,計算公式為
因為考慮到了現(xiàn)實中學校不可能做很多種類的飯,所以限制了每次推薦出的食物種類數(shù),所以推薦系統(tǒng)中常用的召回率以及F1值并沒有太大的參考意義。經(jīng)過訓練后,得到了下圖中所有同學的平均的精確率的增長曲線。
為了檢驗推薦系統(tǒng)的每一個部分都起到了作用,又將本文提出的推薦系統(tǒng)拆分開進行多次實驗,下圖為各種拆分方案的最終平均準確率。
推薦進行完成后,要進行食物的匹配,下圖為進行一次差分進化過程中,誤差的變化軌跡。
下圖為差分進化出的個體的各個營養(yǎng)物質的平均誤差。
3.2實驗分析
在經(jīng)過訓練后,可以看出推薦系統(tǒng)的精確率達到了90%左右,在任意去掉此推薦系統(tǒng)的一部分后精確率都有不同的下降,說明幾種算法的結合取得了較好的效果。在最后的不同食物的匹配過程中,可以看到誤差在一次的差分進化中有著快速的下降,其中能量誤差最小,在0.07%左右,而且在最后的結果中一些比較重要的營養(yǎng)物質的誤差較小,脂肪的誤差較大,在56.35%,除了脂肪和硒的誤差較大以外,其他的誤差都較小,而且并不都是缺少,也有營養(yǎng)多于標準營養(yǎng),多余的部分的影響并不會很大。
4.總結
本文不僅使用了在食物推薦系統(tǒng)中最為常用的協(xié)同過濾算法,而且還結合了在食物推薦中少見的FTRL增量學習算法,在最后的基于營養(yǎng)標準的食物的匹配中,利用了差分進化算法,將每種營養(yǎng)標準與營養(yǎng)攝入量的差的絕對值以相應權值相加得到的數(shù)作為種群適應度。經(jīng)過實驗的測試,驗證了本文提出的模型在解決兒童既要營養(yǎng)的均衡攝入也要符合個人喜好的難題時有著較好的效果。
參考文獻
[1]方琦.個性化健康飲食推薦方法研究[D].長安大學,2018.
[2]王偉偉.基于情境感知的校園餐飲推薦方法研究及應用[D].太原理工大學,2018.
[3]劉興姿.基于營養(yǎng)飲食推薦系統(tǒng)研究[D].西安電子科技大學,2019.
[4]梅子杰. 食材搭配推薦算法研究[D].重慶郵電大學,2018.
[5]項亮2012. 推薦系統(tǒng)實戰(zhàn). 北京市崇文區(qū)夕照寺街:人民郵電出版社. 197pp.
[6] Sarwar B M, Karypis G, Konstan J A, et al. Item-based collaborative filtering recommendation algorithms[C]. the web conference, 2001: 285-295.
[7] G. Evaluation of Item-Based Top- N Recommendation Algorithms[C]. conference on information and knowledge management, 2001: 247-254.
[8] Mcmahan H B, Holt G, Sculley D, et al. Ad click prediction: a view from the trenches[C]. knowledge discovery and data mining, 2013: 1222-1230.
[9] Storn R , Price K . Differential Evolution-A Simple and Efficient Heuristic for Global Optimization over Continuous Spaces[J]. Journal of Global Optimization, 1997, 11.
[10]丁汝金,楊慧,裴丹丹.農(nóng)村留守兒童營養(yǎng)膳食調配分析[J].現(xiàn)代食品,2019(09):117-120+128.