孫逸菲, 袁德成, 王建龍, 白 楊
(沈陽(yáng)化工大學(xué) 信息工程學(xué)院, 遼寧 沈陽(yáng) 110142)
葡萄酒是一種成分復(fù)雜的飲品,其質(zhì)量測(cè)定是葡萄酒行業(yè)進(jìn)行質(zhì)量管理的重要手段之一.測(cè)定葡萄酒質(zhì)量主要通過專業(yè)品酒師的品嘗和測(cè)量葡萄酒的物理化學(xué)性質(zhì)來進(jìn)行判定.質(zhì)量評(píng)價(jià)主要依靠品酒師的感官,品酒師通過觀察葡萄酒的顏色、質(zhì)感等外觀特性和嗅聞葡萄酒的香氣,并結(jié)合品嘗的方式進(jìn)行葡萄酒的質(zhì)量評(píng)價(jià).而測(cè)量葡萄酒的物理化學(xué)性質(zhì)是指測(cè)量其非揮發(fā)性酸度、密度及pH等,這種測(cè)量方法對(duì)葡萄酒的質(zhì)量測(cè)評(píng)比較有效.
在數(shù)據(jù)分析過程中,經(jīng)常需要對(duì)數(shù)據(jù)建模并做出預(yù)測(cè).Boosting分類器屬于監(jiān)督學(xué)習(xí)范疇,它的基本思想是把成百上千個(gè)分類準(zhǔn)確率較低的樹模型組合起來,組合成為一個(gè)準(zhǔn)確率較高的模型[1].這個(gè)模型會(huì)不斷地迭代,每次迭代生成一顆新的樹.對(duì)于如何在每一步生成合理的樹,有很多種解決方法,其中在1999年由Jerome Friedman提出的梯度推進(jìn)機(jī)(Gradient Boosting Machine)[2]是一個(gè)相對(duì)效率較高的算法.它在生成每一顆樹的時(shí)候采用梯度下降的思想,以之前生成的所有樹為基礎(chǔ),向著最小化給定目標(biāo)函數(shù)的方向多走一步.現(xiàn)在希望能通過XGBoost工具更好地解決這個(gè)問題.XGBoost(Extreme Gradient Boost)是Gradient Boosting Machine的一個(gè)C++實(shí)現(xiàn)[3],它最大的特點(diǎn)在于能夠自動(dòng)利用CPU的多線程進(jìn)行并行,同時(shí)在算法上加以改進(jìn),提高精度.
隨著科學(xué)技術(shù)的進(jìn)步,使得收集、存儲(chǔ)和處理數(shù)據(jù)成為可能,機(jī)器學(xué)習(xí)技術(shù)在葡萄酒品質(zhì)預(yù)測(cè)中也得到了廣泛的應(yīng)用.對(duì)葡萄酒質(zhì)量的評(píng)價(jià)方法較多,劉延玲[4]利用改進(jìn)的人工神經(jīng)網(wǎng)絡(luò)對(duì)葡萄酒物理化學(xué)性質(zhì)及感官進(jìn)行了分類預(yù)測(cè);李運(yùn)等[5]介紹了運(yùn)用聚類算法、主成分分析方法、相關(guān)分析方法等對(duì)葡萄酒質(zhì)量進(jìn)行評(píng)價(jià);徐海濤[6]提出利用改進(jìn)的近似支持向量機(jī)方法對(duì)葡萄酒質(zhì)量進(jìn)行鑒定和預(yù)測(cè);林劼等[7]利用隨機(jī)森林算法對(duì)葡萄酒品質(zhì)進(jìn)行了預(yù)測(cè),通過與其他方法的比較表明其預(yù)測(cè)精度較高;Cortez等[8]將線性回歸、神經(jīng)網(wǎng)絡(luò)和支持向量機(jī)這三個(gè)回歸技術(shù)應(yīng)用于對(duì)葡萄酒品質(zhì)的預(yù)測(cè).
針對(duì)葡萄酒質(zhì)量檢測(cè)這一問題,本文采用機(jī)器學(xué)習(xí)中XGBoost算法進(jìn)行葡萄酒品質(zhì)預(yù)測(cè),將該方法與線性回歸、神經(jīng)網(wǎng)絡(luò)和支持向量機(jī)算法相比較[8],發(fā)現(xiàn)該方法具有預(yù)測(cè)準(zhǔn)確率高及運(yùn)算時(shí)間短的特點(diǎn),在葡萄酒品質(zhì)測(cè)定過程中,能夠有效地減少因品酒師個(gè)人因素所帶來的偏差,對(duì)于提高釀酒品質(zhì)和葡萄酒的生產(chǎn)測(cè)定都具有重要意義.
監(jiān)督學(xué)習(xí)算法的重要組成部分包括模型、參數(shù)和目標(biāo)函數(shù).模型和參數(shù)本身指定了給定輸入,我們?nèi)绾巫鲱A(yù)測(cè);目標(biāo)函數(shù)的作用是使我們能夠找到一個(gè)比較好的預(yù)測(cè).一般的目標(biāo)函數(shù)包括下面兩項(xiàng)[3]:
Obj(Θ)=L(Θ)+Ω(Θ)
(1)
L(Θ)表示誤差函數(shù),Ω(Θ)是正則化項(xiàng).
XGBoost最基本的組成部分叫做回歸樹.對(duì)于樹的集合,可以把模型寫成:
(2)
其中每個(gè)f是一個(gè)函數(shù)空間F里面的函數(shù),而F是包含所有回歸樹的函數(shù)空間.設(shè)計(jì)的目標(biāo)函數(shù)包含兩部分,誤差函數(shù)和正則化項(xiàng):
fk∈F
(3)
(1) 學(xué)習(xí)方法:公式(3)中第一部分是誤差函數(shù),第二部分是每棵樹的復(fù)雜度的和.對(duì)于樹模型,每一次保留原來的模型不變,加入一個(gè)新的函數(shù)f到模型中.
(4)
(2) 目標(biāo):選取一個(gè)f來最小化目標(biāo)函數(shù)
Ω(ft)+C
(5)
其中C為常數(shù).
(3) 再采用如下的泰勒展開定義一個(gè)近似的目標(biāo)函數(shù),用泰勒展開近似原來的目標(biāo).泰勒展開式為:
f(x+Δx)≈f(x)+f′(x)Δx+
(6)
定義gi和hi:
(7)
(4) 得到新的學(xué)習(xí)目標(biāo)函數(shù):
(8)
當(dāng)把常數(shù)項(xiàng)移除之后
(9)
這個(gè)目標(biāo)函數(shù)的特點(diǎn)是它只依賴于每個(gè)數(shù)據(jù)點(diǎn)在誤差函數(shù)上的一階導(dǎo)數(shù)和二階導(dǎo)數(shù).
(5) 重新定義每棵樹
先對(duì)f的定義作細(xì)化,把樹拆分成結(jié)構(gòu)部分q和葉子權(quán)重部分ω.結(jié)構(gòu)函數(shù)q把輸入映射到葉子的索引號(hào)上去,而ω給定了每個(gè)索引號(hào)對(duì)應(yīng)的葉子分?jǐn)?shù).
ft(x)=ωq(x),ω∈RT,q:Rd→{1,2,…,T}
(10)
ω∈RT表示葉子的向量,q為樹的結(jié)構(gòu).
(6) 定義一棵樹的復(fù)雜度
(11)
(7) 在這種新定義下,目標(biāo)函數(shù)為
(12)
其中I被定義為每個(gè)葉子上面樣本集合Ij={i|q(xi)=j}.這個(gè)目標(biāo)包含了T個(gè)相互獨(dú)立的單變量二次函數(shù).可以定義Gj=∑i∈Ijgi,Hj=∑i∈Ijhi.那么這個(gè)目標(biāo)函數(shù)可以進(jìn)一步改寫成如下的形式,假設(shè)已經(jīng)知道樹的結(jié)構(gòu)q,可以通過這個(gè)目標(biāo)函數(shù)來求解出最好的ω,以及最好ω對(duì)應(yīng)的目標(biāo)函數(shù)最大的增益.
(13)
等式的左邊是最好的ω(葉子權(quán)重部分),右邊是這個(gè)ω對(duì)應(yīng)的目標(biāo)函數(shù)的值:
(14)
(15)
(8) XGBoost算法流程
在每一次迭代中增加一個(gè)新樹,對(duì)每一次迭代計(jì)算:
(16)
gi為誤差函數(shù)的一階導(dǎo)數(shù),hi為誤差函數(shù)的二階導(dǎo)數(shù).運(yùn)用算法尋找切分點(diǎn),產(chǎn)生每一輪新的樹
(17)
增加新函數(shù)ft(x)到模型
(18)
通常加入y(t)=y(t-1)+εft(xi),ε稱為縮減因子,目的是為了避免過擬合,通常設(shè)置為0.1.
葡萄酒數(shù)據(jù)[9]來自于認(rèn)證階段的物理化學(xué)分析測(cè)試,這些來自于2004年5月至2007年2月收集到的樣本數(shù)據(jù).數(shù)據(jù)從生產(chǎn)需求到感官分析被一個(gè)計(jì)算機(jī)系統(tǒng)記錄.每一個(gè)實(shí)例都是基于一次測(cè)試的結(jié)果,最終的數(shù)據(jù)集導(dǎo)入一個(gè).csv文件中.在預(yù)處理階段,數(shù)據(jù)轉(zhuǎn)換為一個(gè)二維表,每一行代表一個(gè)單獨(dú)的葡萄酒樣本.由于紅葡萄酒和白葡萄酒存在較大差異,所以,將紅葡萄酒和白葡萄酒的數(shù)據(jù)分為兩個(gè).csv文件進(jìn)行存放與處理.
紅葡萄酒的樣本數(shù)量為1 599個(gè),白葡萄酒的樣本數(shù)量為4 898個(gè).輸入變量包括客觀實(shí)驗(yàn)測(cè)試得到的11個(gè)物理化學(xué)性質(zhì),如表1.
表1 每種類型中的葡萄酒物理化學(xué)數(shù)據(jù)屬性Table 1 The physicochemical data statistics per wine type
輸出變量基于感官數(shù)據(jù),感官數(shù)據(jù)分為0(極壞)~10級(jí)(非常好),由三位品酒師通過感官評(píng)價(jià),選取三人中評(píng)分最低一人的評(píng)分作為評(píng)估值(運(yùn)用盲測(cè)方法)[2].極壞和非常好的葡萄酒樣本都是少數(shù),評(píng)價(jià)為中間等級(jí)的葡萄酒樣本最多.所以將紅葡萄酒分為6類,評(píng)價(jià)等級(jí)為3至8;白葡萄酒分為7類,評(píng)價(jià)等級(jí)為3至9,如圖1.
圖1 對(duì)紅葡萄酒和白葡萄酒的感官性能評(píng)價(jià)Fig.1 The histograms for the red and white sensory preferences
2.2.1 葡萄酒品質(zhì)判定的XGBoost方法和研究
在python環(huán)境下安裝XGBoost的C++版本.通過預(yù)測(cè)模型準(zhǔn)確率來判斷模型的優(yōu)劣.通過分類和k-Fold兩種方法評(píng)估XGBoost模型.分類方法的步驟是[10]:導(dǎo)入葡萄酒數(shù)據(jù),準(zhǔn)備用于訓(xùn)練和評(píng)估XGBoost模型;將數(shù)據(jù)集分成輸入X和輸出Y兩部分,將X和Y的數(shù)據(jù)分成訓(xùn)練集和測(cè)試集,訓(xùn)練集用于準(zhǔn)備XGBoost模型,測(cè)試集用于從之前評(píng)估的模型性能中做新的預(yù)測(cè);將67 %的數(shù)據(jù)用于訓(xùn)練,33 %的數(shù)據(jù)用于測(cè)試;之后運(yùn)用model.fit()函數(shù)擬合模型并對(duì)XGBoost模型進(jìn)行預(yù)測(cè).k-Fold方法的步驟是[10]:運(yùn)用10折交叉驗(yàn)證,把數(shù)據(jù)隨機(jī)分成10份,然后依次取1份作為測(cè)試集,其余9份共同作為訓(xùn)練集,之后用XGBoost算法擬合訓(xùn)練集數(shù)據(jù)得到模型.首先導(dǎo)入葡萄酒數(shù)據(jù),其次指定折疊的數(shù)量和數(shù)據(jù)集的大??;運(yùn)用cross_val_score()函數(shù)可以運(yùn)用10折交叉驗(yàn)證法對(duì)XGBoost 模型進(jìn)行預(yù)測(cè).
2.2.2 仿真結(jié)果與分析
運(yùn)用XGBoost算法下的葡萄酒特征提取圖如圖2所示.圖2中表示的是葡萄酒的11個(gè)輸入變量,f0~f10分別代表了實(shí)驗(yàn)測(cè)試得到的11個(gè)物理化學(xué)性質(zhì)(表1),這些物理化學(xué)性質(zhì)特征從大到小順序依次如圖2所示.在獲得的圖形中證實(shí)了釀酒學(xué)的理論.比如f10代表酒精度越高表示葡萄酒的品質(zhì)越高.當(dāng)然對(duì)于不同種類的葡萄酒,變量重要性排序是不同的.幾類數(shù)據(jù)在一些理化性質(zhì)上相差不大,但圖3中f5代表的游離二氧化硫的特征重要性大,可以說明這一理化性質(zhì)大大影響口味.從圖2和圖3可以看出葡萄酒質(zhì)量評(píng)價(jià)也是一個(gè)非常困難的工作.
圖2 紅葡萄酒特征重要性條形圖Fig.2 The red wine input importances bar chart
圖3 白葡萄酒特征重要性條形圖Fig.3 The white wine input importances bar chart
為了使葡萄酒的品級(jí)預(yù)測(cè)更加完善并提高準(zhǔn)確率,運(yùn)用XGBoost算法的分類方法和k-fold方法分別進(jìn)行了仿真試驗(yàn).在分類方法中將67 %的數(shù)據(jù)用于訓(xùn)練,33 %的數(shù)據(jù)用于測(cè)試.在k-fold方法中指標(biāo)分類器錯(cuò)誤率的估計(jì)采用10折交叉驗(yàn)證法.表2和表3為采用XG Boost分類方法和k-fold方法進(jìn)行葡萄酒品質(zhì)預(yù)測(cè)的結(jié)果,并將實(shí)驗(yàn)結(jié)果與Cortez等人[8]運(yùn)用數(shù)據(jù)挖掘技術(shù)中的其他3個(gè)回歸技術(shù)作了比較.
表2 采用XGBoost分類與k-Fold方法對(duì)紅葡萄酒品質(zhì)的預(yù)測(cè)結(jié)果Table 2 The XGBoost classification and k-Fold method predict the quality of red wine
表中T代表容錯(cuò)率,實(shí)際指絕對(duì)誤差.比如實(shí)際輸出y=1,模型預(yù)測(cè)的輸出只要在容錯(cuò)率T=0.25內(nèi)(y在0.75~1.25之間)就認(rèn)為分類是準(zhǔn)確的.表2中列出紅葡萄酒的驗(yàn)證仿真數(shù)據(jù).前3種算法是Cortez等人先前研究的結(jié)果.表格最后兩列是通過XGBoost算法得出的分類準(zhǔn)確率和k-Fold法準(zhǔn)確率.從表2可以看出:在容錯(cuò)率為25 %的情況下,運(yùn)用XGBoost分類算法預(yù)測(cè)的紅葡萄酒準(zhǔn)確率為61.9 %,運(yùn)用XGBoost k-Fold交叉驗(yàn)證算法預(yù)測(cè)的準(zhǔn)確率為58.6 %,這都明顯高于線性回歸算法、神經(jīng)網(wǎng)絡(luò)算法和支持向量機(jī)算法的預(yù)測(cè)準(zhǔn)確率.在準(zhǔn)確率為50 %的情況下,同樣可以看出XGBoost分類方法的預(yù)測(cè)準(zhǔn)確率高于線性回歸算法、神經(jīng)網(wǎng)絡(luò)算法和支持向量機(jī)算法的預(yù)測(cè)準(zhǔn)確率.從運(yùn)行時(shí)長(zhǎng)來看,XGBoost分類方法和k-Fold交叉驗(yàn)證算法的運(yùn)行時(shí)長(zhǎng)明顯快于其他3種算法的運(yùn)行時(shí)長(zhǎng).雖然支持向量機(jī)算法的預(yù)測(cè)準(zhǔn)確率相對(duì)較高一些,但是通過支持向量機(jī)算法測(cè)試數(shù)據(jù)集將耗費(fèi)大量的運(yùn)算時(shí)間.
表3 采用XGBoost分類與k-Fold方法對(duì)白葡萄酒品質(zhì)的預(yù)測(cè)結(jié)果Table 3 The XGBoost classification andk-Fold method predict the quality of white wine
表3是采用XGBoost分類方法和k-Fold交叉驗(yàn)證算法對(duì)白葡萄酒品質(zhì)進(jìn)行預(yù)測(cè)的結(jié)果.與線性回歸、神經(jīng)網(wǎng)絡(luò)和支持向量機(jī)的預(yù)測(cè)結(jié)果進(jìn)行比較,可以看出:在容錯(cuò)率25 %的情況下,通過XGBoost分類算法預(yù)測(cè)的白葡萄酒準(zhǔn)確率為57.9 %,XGBoost k-Fold交叉驗(yàn)證算法預(yù)測(cè)的白葡萄酒準(zhǔn)確率為54.8 %,這也明顯高于其他算法的準(zhǔn)確率.在容錯(cuò)率為50 %的前提下,可以看出:無(wú)論是XGBoost分類方法還是XGBoost k-Fold交叉驗(yàn)證算法,其準(zhǔn)確率都比線性回歸和神經(jīng)網(wǎng)絡(luò)的準(zhǔn)確率高.雖然支持向量機(jī)在50 %容錯(cuò)率的情況下準(zhǔn)確率比XGBoost算法準(zhǔn)確率高,但是運(yùn)行時(shí)間卻是XGBoost算法運(yùn)行時(shí)間的約150倍.所以,綜合上述兩表可以看出XGBoost算法具有運(yùn)行時(shí)間短、準(zhǔn)確率高的優(yōu)點(diǎn).
將XGBoost分類方法和XGBoostk-Fold交叉驗(yàn)證算法互相比較可以看出:XGBoost分類方法的準(zhǔn)確率略高于XGBoost通過k-Fold交叉驗(yàn)證算法的準(zhǔn)確率,但是通過k-Fold交叉驗(yàn)證算法的準(zhǔn)確程度相比較分類方法更高.因?yàn)樵趉-Fold交叉驗(yàn)證運(yùn)行算法過程中,每一次都運(yùn)用不同的訓(xùn)練與測(cè)試數(shù)據(jù)進(jìn)行迭代,使得計(jì)算出的準(zhǔn)確率更加精確,但運(yùn)行時(shí)長(zhǎng)也相對(duì)較長(zhǎng).
通過化學(xué)檢驗(yàn)的方法獲取一系列參數(shù),并采用機(jī)器學(xué)習(xí)方法進(jìn)行建模、預(yù)測(cè),可以有效地減少因品酒師個(gè)人主觀因素帶來的對(duì)葡萄酒品質(zhì)判定的偏差,并通過改變特征重要性提高葡萄酒的品質(zhì).采用機(jī)器學(xué)習(xí)中XGBoost學(xué)習(xí)算法對(duì)葡萄酒的數(shù)據(jù)進(jìn)行了學(xué)習(xí)仿真,對(duì)葡萄酒數(shù)據(jù)準(zhǔn)確率進(jìn)行評(píng)估,并與其他算法進(jìn)行比較,對(duì)結(jié)果進(jìn)行了分析.一旦識(shí)別出某些變量和質(zhì)量評(píng)價(jià)的關(guān)系,就能夠在葡萄酒生產(chǎn)階段對(duì)某些變量加以控制,以使口味更好.以上分析結(jié)果可以看出:XGBoost算法在葡萄酒品質(zhì)預(yù)測(cè)的應(yīng)用中明顯優(yōu)于線性回歸和神經(jīng)網(wǎng)絡(luò)算法,并優(yōu)于在容錯(cuò)率T=0.25情況下的支持向量機(jī)算法.XGBoost算法的運(yùn)行時(shí)長(zhǎng)相對(duì)于其他3種算法相對(duì)較短.這些對(duì)于改進(jìn)釀酒、品酒評(píng)價(jià)和葡萄酒的生產(chǎn)測(cè)定都具有重要意義.