石瑾挺,孫潔香,鄔惠峰
(1.杭州電子科技大學(xué) 計算機(jī)學(xué)院,浙江 杭州 310018; 2.北京機(jī)械工業(yè)自動化研究所有限公司,北京 100120)
彈性云服務(wù)器[1,2](elastic cloud server,ECS)需要表現(xiàn)出快速按需服務(wù)的能力[3]。在需求不確定的情況下進(jìn)行預(yù)測未來云服務(wù)器的負(fù)載情況,將是有效地配置服務(wù)器資源以提供高質(zhì)量服務(wù)的關(guān)鍵所在[4]。傳統(tǒng)的統(tǒng)計模型如自回歸(AR)、移動平均(MA)、AR和MA(ARMA)的組合,目前已廣泛應(yīng)用于服務(wù)器的負(fù)載預(yù)測問題中[5,6],而線性模型無法捕捉云服務(wù)器預(yù)測問題中的非線性關(guān)系。馬自堂等[7]使用了HoltWinters預(yù)測模型對服務(wù)器任務(wù)請求量進(jìn)行預(yù)測,該機(jī)制適用于預(yù)測無跳躍性且具有周期性的時間序列。Tarek Mahdhi等[8]提出的虛擬機(jī)整合框架中使用內(nèi)核密度估計技術(shù)對虛擬機(jī)未來資源使用率進(jìn)行預(yù)測。Chunhong Liu等[9]通過建立0-1混合整數(shù)規(guī)劃模型對服務(wù)器負(fù)載狀況進(jìn)行分類,并分配不同模型進(jìn)行預(yù)測未來資源利用率。Carlos Vazquez等[10]將一次、二次指數(shù)平滑,神經(jīng)網(wǎng)絡(luò)回歸等方法對服務(wù)器未來資源需求值進(jìn)行預(yù)測,其建立的模型無法表現(xiàn)出很好的穩(wěn)定性。王天澤[11]提出一種灰色預(yù)測模型動態(tài)預(yù)測云服務(wù)負(fù)載,在波動性較大的情況下該模型精準(zhǔn)度欠佳。
本文針對彈性云服務(wù)器的歷史請求數(shù)據(jù)序列預(yù)測問題,提出了基于指數(shù)平滑的Stacking集成預(yù)測模型,在預(yù)測過程中,對各組指數(shù)平滑模型加入動態(tài)參數(shù)優(yōu)化,該模型在結(jié)構(gòu)上更具靈活性,且易于實現(xiàn)。最后采用對比實驗驗證預(yù)測模型的有效性。
租戶對云平臺虛擬機(jī)進(jìn)行請求后都將在后臺數(shù)據(jù)庫產(chǎn)生對應(yīng)的請求數(shù)據(jù),每條數(shù)據(jù)由虛擬機(jī)ID、虛擬機(jī)規(guī)格以及創(chuàng)建時間等信息組成。獲取云平臺在過去一段時間內(nèi)的所有虛擬機(jī)請求數(shù)據(jù),并構(gòu)造數(shù)據(jù)特征進(jìn)行訓(xùn)練預(yù)測模型,從而利用模型與數(shù)據(jù)預(yù)測下一個時間段可能到來的虛擬機(jī)請求分布。
服務(wù)商提供的云服務(wù)器有多種規(guī)格,任一規(guī)格云服務(wù)器的歷史請求數(shù)據(jù)可以表示為一組非負(fù)序列。
假設(shè)自變量X表示某一規(guī)格云服務(wù)器的歷史請求數(shù)據(jù),是由n個正整數(shù)組成的一組序列。目標(biāo)變量Y表示未來一期的預(yù)測值,通過目標(biāo)函數(shù)f()便可以得到X到Y(jié)的映射
X=[x1,x2,x3,…,xn-1,xn]
(1)
Y=f(x1,x2,x3,…,xn-1,xn)
(2)
其中,xi表示第i期的云服務(wù)器請求數(shù),n代表歷史請求數(shù)據(jù)的總期數(shù),f()為目標(biāo)函數(shù)。對于云服務(wù)器請求數(shù)預(yù)測問題,目標(biāo)函數(shù)即為預(yù)測模型,構(gòu)建高性能的模型,可以極大提高預(yù)測準(zhǔn)確率。
基于指數(shù)平滑的Stacking集成預(yù)測模型是本文提出的一個預(yù)測算法模型,相對于傳統(tǒng)的單模型預(yù)測,多模型集成融合的主要特征是將多個基礎(chǔ)模型預(yù)測結(jié)果進(jìn)行結(jié)合,達(dá)到降低泛化誤差的目的,保證高精度的預(yù)測能力,同時也提升了模型防止過擬合的能力。
2.1.1 一次指數(shù)平滑法
一次指數(shù)平滑法(single exponential smoothing)又稱為單一指數(shù)平滑法。其計算公式如下
yt+1=αxt+(1-α)yt
(3)
式中:xt代表的是第t期的實際值,而yt代表的是第t期的預(yù)測值,yt+1代表的是第t+1期的預(yù)測值,α代表的是平滑系數(shù),又稱加權(quán)因子,并且0≤α≤1。 一次指數(shù)平滑法通過將某期實際值、預(yù)測值以及加權(quán)因子進(jìn)行線性加權(quán)計算從而得到下期值。在預(yù)測過程中,若觀察值離預(yù)測時期間隔越久遠(yuǎn),則該期觀測值的權(quán)重變得越小。利用一次指數(shù)平滑法進(jìn)行預(yù)測得到的結(jié)果中,其趨勢與實際趨勢基本一致。然而使用一次指數(shù)平滑法具有滯后性,因此引入二次指數(shù)平滑法。
2.1.2 二次指數(shù)平滑法
二次指數(shù)平滑法(second exponential smoothing me-thod) 是在一次指數(shù)平滑值的基礎(chǔ)上再進(jìn)行一次指數(shù)平滑的方法。該方法無法單獨(dú)運(yùn)行,必須與一次指數(shù)平滑法進(jìn)行組合搭配。其計算公式如下
(4)
(5)
在指數(shù)平滑模型中,通常都將固定平滑系數(shù),這將會給模型帶來一定的局限性[12],本文采用梯度下降法對平滑系數(shù)進(jìn)行優(yōu)化。損失函數(shù)Loss與迭代更新公式如下
(8)
式中:δ代表學(xué)習(xí)率,在本文中取值為0.23可以在實驗中獲得很好的預(yù)測效果。平滑系數(shù)的優(yōu)化是一個遞歸過程,其中初始梯度公式為
2.1.3 Stacking集成學(xué)習(xí)算法
集成學(xué)習(xí)方法本身并不是單獨(dú)的機(jī)器學(xué)習(xí)算法,而是通過構(gòu)建并結(jié)合多個機(jī)器學(xué)習(xí)器進(jìn)行學(xué)習(xí)任務(wù)[13]。在傳統(tǒng)的機(jī)器學(xué)習(xí)單模型工作過程中,單一模型在多因素的影響下在準(zhǔn)確率與穩(wěn)定性方面往往無法表現(xiàn)出滿意的效果,而由多個互有差異的基學(xué)習(xí)器進(jìn)行組合的集成學(xué)習(xí)器可以彌補(bǔ)單一模型的缺陷。
集成學(xué)習(xí)的數(shù)學(xué)表達(dá)形式可參考文獻(xiàn)[14]。在本文中,使用指數(shù)平滑作為多個基模型進(jìn)行預(yù)測,屬于同構(gòu)集成。Stacking集成學(xué)習(xí)的整體結(jié)構(gòu)如圖1所示。
圖1 集成學(xué)習(xí)模型
多個基模型在產(chǎn)生預(yù)測結(jié)果后,將所有預(yù)測結(jié)果作為學(xué)習(xí)樣本輸入集成模型進(jìn)行訓(xùn)練。在最后一層集成模型訓(xùn)練結(jié)束后,將預(yù)測樣本輸入整體結(jié)構(gòu)中,產(chǎn)生最終預(yù)測結(jié)果。本文選擇使用線性回歸模型作為Stacking學(xué)習(xí)方法的集成模型,用于調(diào)整擬合多個指數(shù)平滑模型預(yù)測值與真實值的殘差。
2.1.4 多元線性回歸
回歸分析是指給出一組具體函數(shù)模型進(jìn)行擬合多組變量間的變動關(guān)系,并根據(jù)該模型給出預(yù)測值,其具體定義可參考文獻(xiàn)[15]。
在本文中,多組指數(shù)平滑單模型的預(yù)測值與真實值之間若存在某種相關(guān)關(guān)系,我們使用Y表示多個單模型的輸出預(yù)測值
Y=[y′1,y′2,y′3,…,y′m-1,y′m]
(16)
其中,y′i表示第i個指數(shù)平滑單模型的預(yù)測值,其中i=(1,2,…,n), 則可以建立多組指數(shù)平滑單模型預(yù)測值與真實值之間的相關(guān)模型
W=[ω1,ω2,…,ωm-1,ωm]
(17)
(18)
式中:ωi表示回歸系數(shù),同時也代表單模型在集成模型中對應(yīng)的協(xié)調(diào)參數(shù),其中i=(1,2,…,m),W代表該組系數(shù),h(Y) 由所有單模型輸出與對應(yīng)回歸系數(shù)的乘積與偏置項b累加組成,即W的轉(zhuǎn)置與Y的乘積再加上偏置項,如式(18)形式的線性方程即表示本文的線性回歸集成模型。
在建立多個單模型到真實值之間的相關(guān)模型中,回歸系數(shù)對于整個集成模型的性能起了決定性作用。假設(shè)目前有l(wèi)個數(shù)據(jù)樣本,yj與h(Yj) 分別表示第j個樣本對應(yīng)的真實值與集成模型對應(yīng)的預(yù)測值,其中j=(1,2,…,l), 為了評判模型的性能,引入損失函數(shù)J(W)
(19)
若損失函數(shù)J(W)越接近于零,代表每例的預(yù)測值與真實值越為接近,則模型的預(yù)測效果越優(yōu)。為得到更優(yōu)性能的模型,需要訓(xùn)練出更好的回歸系數(shù),采用梯度下降法搜尋最優(yōu)回歸系數(shù)。訓(xùn)練過程中各回歸系數(shù)的迭代公式如下
式中:α為學(xué)習(xí)速率,α過大可能導(dǎo)致無法取得最優(yōu)值,α過小則容易造成迭代次數(shù)過多,收斂速度變慢,本文中對于α取值為0.13時,在訓(xùn)練效果以及收斂速度上都可得到滿意的效果。
本文提出的基于指數(shù)平滑的集成預(yù)測模型在層次上包括特征構(gòu)造層,單預(yù)測模型層,集成學(xué)習(xí)模型層。在對集成學(xué)習(xí)模型層進(jìn)行訓(xùn)練的過程中需要使用原始數(shù)據(jù)集進(jìn)行集成模型的訓(xùn)練數(shù)據(jù)構(gòu)造。
2.2.1 特征構(gòu)造
服務(wù)商會提供給租戶多種規(guī)格的云服務(wù)器,在得到某種規(guī)格的云服務(wù)器一段時間內(nèi)的請求序列后,可表示為序列X=[x1,x2,…,xn], 通過對原始序列數(shù)據(jù)的加工可以得到多組屬性特征,屬性是數(shù)據(jù)本身具有的維度,特征是數(shù)據(jù)中所呈現(xiàn)出來的某一種重要的特性,通常是通過屬性的計算,組合或轉(zhuǎn)換得到的。
(22)
本文中,滑窗特征的窗口大小設(shè)定為3。在實際預(yù)測過程中,不同的單指數(shù)平滑模型所需輸入的數(shù)據(jù)序列長度必須一致,故在得到原始、累積特征數(shù)據(jù)序列后,將舍棄前幾期數(shù)據(jù),使其長度與滑窗數(shù)據(jù)序列長度保持一致。在預(yù)測結(jié)束之后,需要對使用累積特征和滑窗特征的預(yù)測值進(jìn)行上述公式的逆操作作為最終預(yù)測值,其公式如下
其中,在得到第n+1期的累積特征預(yù)測值與滑窗特征預(yù)測值后,x′sum與x′slide為使用預(yù)測值進(jìn)行逆操作之后的最終數(shù)據(jù)。在下文中的數(shù)據(jù)劃分以及預(yù)測過程中,都將使用以上操作得出的數(shù)值加入數(shù)據(jù)集或者輸入集成模型進(jìn)行預(yù)測。
2.2.2 單預(yù)測模型層及數(shù)據(jù)劃分
本文中使用多個指數(shù)平滑預(yù)測模型作為單預(yù)測模型層,且各個模型相互的平滑系數(shù)互不相同,將單預(yù)測模型層表示為
{SmoothModel1(α1),SmoothModel2(α2),…,SmoothModelm(αm)}
對于指數(shù)平滑模型SmoothModeli(αi), 其輸入為對應(yīng)的映射特征ci(X)。
在下一步的集成學(xué)習(xí)器中,實際擬合的是各單模型的預(yù)測值與實際值的映射關(guān)系,因此單預(yù)測模型層將輸出如式(17)形式的向量作為集成模型層的輸入。原始數(shù)據(jù)集中并不包括集成學(xué)習(xí)器的訓(xùn)練數(shù)據(jù),因此在訓(xùn)練集成學(xué)習(xí)器之前,需要在原始數(shù)據(jù)中構(gòu)造集成學(xué)習(xí)器的訓(xùn)練數(shù)據(jù)。
對于某種規(guī)格服務(wù)器的請求序列X,組成序列為 [x1,x2,…,xn], 在本文中首先取前二分之一長度的序列 [x1,x2,…,x(n/2)], 在經(jīng)過特征構(gòu)造層之后得到映射特征作為單預(yù)測模型層輸入。
如指數(shù)平滑預(yù)測模型SmoothModeli(αi) 接收序列之后,輸出x′i((n/2)+1), 該數(shù)值作為集成模型的第i個輸入?yún)?shù)。在m個單模型輸出X′((n/2)+1)=[x′1((n/2)+1),x′2((n/2)+1),…,x′m((n/2)+1)], 將該組數(shù)值作為特征,而原始序列中第 ((n/2)+1) 期的數(shù)據(jù)x((n/2)+1)作為標(biāo)簽,這兩部分?jǐn)?shù)據(jù)一起組成第 ((n/2)+1) 期的訓(xùn)練數(shù)據(jù)加入集成學(xué)習(xí)器的訓(xùn)練數(shù)據(jù)集。在預(yù)測序列中每加入新一期的數(shù)據(jù)通過單預(yù)測模型層得到預(yù)測值加入集成學(xué)習(xí)器的特征數(shù)據(jù)集的同時,將后一期的真實值加入集成學(xué)習(xí)器的標(biāo)簽數(shù)據(jù)集,重復(fù)執(zhí)行上述過程直到將最后一期的數(shù)據(jù)加入序列得到特征數(shù)據(jù)集和標(biāo)簽數(shù)據(jù)集。使用單預(yù)測模型層構(gòu)造集成學(xué)習(xí)器訓(xùn)練數(shù)據(jù)集的過程如圖2所示。
圖2 單預(yù)測模型層構(gòu)造訓(xùn)練數(shù)據(jù)集
2.2.3 集成學(xué)習(xí)器的訓(xùn)練
通過上述步驟可以得到集成學(xué)習(xí)器的訓(xùn)練數(shù)據(jù)集D={(X′i,yi)}, 其中i=((n/2)+1,(n/2)+2,…,n)。 本文的集成學(xué)習(xí)器選擇使用線性回歸模型,首先隨機(jī)初始化模型的回歸系數(shù)、學(xué)習(xí)率、迭代次數(shù)以及預(yù)期損失函數(shù)閾值,對于每一組訓(xùn)練數(shù)據(jù),可以對線性回歸模型輸入訓(xùn)練數(shù)據(jù)后使用梯度下降來優(yōu)化其回歸系數(shù),當(dāng)損失函數(shù)的值小于指定閾值或訓(xùn)練次數(shù)達(dá)到預(yù)設(shè)迭代次數(shù),則訓(xùn)練過程完成。訓(xùn)練完成后可以使用該線性回歸模型進(jìn)行預(yù)測。
2.2.4 基于指數(shù)平滑的Stacking集成模型訓(xùn)練及預(yù)測流程
基于前文將基于指數(shù)平滑的Stacking集成預(yù)測模型的操作步驟描述如下:
步驟1 初始化單預(yù)測模型層的模型數(shù)量、各單預(yù)測模型的平滑系數(shù)、集成學(xué)習(xí)器的回歸系數(shù),以及迭代次數(shù)與損失函數(shù)閾值。
步驟2 對原始數(shù)據(jù)進(jìn)行特征構(gòu)造,構(gòu)造出組數(shù)與單預(yù)測模型層模型數(shù)量相同的特征組。
步驟3 對每個單預(yù)測模型輸入對應(yīng)的特征組,構(gòu)造出集成學(xué)習(xí)器的訓(xùn)練數(shù)據(jù),在構(gòu)造過程中,每個單模型同時進(jìn)行動態(tài)優(yōu)化平滑系數(shù)。
步驟4 對集成學(xué)習(xí)器即線性回歸模型使用步驟3構(gòu)造出的訓(xùn)練數(shù)據(jù)進(jìn)行訓(xùn)練,訓(xùn)練完畢后,再次輸入原始數(shù)據(jù)即可得到目標(biāo)預(yù)測值。
上述操作步驟的流程如圖3所示。
圖3 Stacking集成模型訓(xùn)練過程
使用訓(xùn)練完成后的集成模型進(jìn)行預(yù)測的流程如圖4所示。
圖4 Stacking集成模型預(yù)測過程
本文使用的實驗數(shù)據(jù)由第四屆華為軟件精英挑戰(zhàn)賽提供,以此保證預(yù)測模型的客觀性和普適性。
算法需要從輸入數(shù)據(jù)提取服務(wù)器信息,包括服務(wù)器ID,服務(wù)器所屬類別,以及對應(yīng)服務(wù)器請求時間等。需要對輸入數(shù)據(jù)進(jìn)行處理,這里以天為時間單位,統(tǒng)計同一種類別的服務(wù)器的每天的請求總量。實驗數(shù)據(jù)部分例子見表1。
表1 實驗數(shù)據(jù)部分示例
4種服務(wù)器自創(chuàng)建時間開始100天內(nèi)每天的訪問量如圖5 所示,其中Flavor9與Flavor12服務(wù)器波動性較大,而Flavor6與Flavor15服務(wù)器的訪問量則較為集中和平緩。
圖5 各服務(wù)器訪問量走勢
本文采用均方誤差作為模型預(yù)測準(zhǔn)確率的評價指標(biāo),其公式為
(27)
圖6中可見4種服務(wù)器在線性回歸、ARIMA與Stacking模型下的預(yù)測錯誤率。其中ARIMA對4種服務(wù)器時間趨勢的預(yù)測效果不佳,而對原始時間趨勢進(jìn)行指數(shù)平滑,并且加入了累計特征、滑窗特征等數(shù)據(jù)強(qiáng)化特征后,線性回歸得到了較好的擬合度,誤差較低。Stacking模型則在此基礎(chǔ)上加入多層指數(shù)平滑數(shù)據(jù)后,錯誤率相較單一模型明顯下降,并且Stacking模型具有較高的靈活性,可以不斷調(diào)整模型的層數(shù)以及各學(xué)習(xí)器的類型參數(shù)以達(dá)到更好的預(yù)測精度。
圖6 預(yù)測誤差
表2中可見4種服務(wù)器在線性回歸、ARIMA與Stacking模型下的預(yù)測量化錯誤率。使用Stacking算法后,錯誤率相較單一模型在幾個服務(wù)器上有較高提升,F(xiàn)lavor9服務(wù)器相較ARIMA提升了5個誤差點(diǎn),而對于Flavor15服務(wù)器也有6個千分點(diǎn)的提升。由于Flavor9與Flavor12波動性較大,模型對這一類服務(wù)器的預(yù)測誤差較大,但采用更加復(fù)雜的模型并加入多次平滑的強(qiáng)化特征能夠得到較大的準(zhǔn)確度提升。而對于波動性較為平穩(wěn)的時間序列,該模型具有較好的預(yù)測效果。
表2 各服務(wù)器預(yù)測誤差
圖7中可見Stacking模型下利用動態(tài)平滑系數(shù)優(yōu)化后服務(wù)器的預(yù)測錯誤率。4種服務(wù)器相比固定平滑系數(shù)均有一定幅度的下降,其中Flavor9服務(wù)器的預(yù)測錯誤率下降幅度最大,這主要是基于梯度迭代的平滑系數(shù)優(yōu)化能夠根據(jù)不同服務(wù)器時間序列特點(diǎn)生成最優(yōu)的指數(shù)平滑系數(shù),從而更好地擬合預(yù)測曲線,使得預(yù)測誤差較低。
圖8與圖9展示Stacking與線性回歸下4種服務(wù)器的預(yù)測擬合度,其中橫坐標(biāo)表示待預(yù)測序列的序號,縱坐標(biāo)表示真實值與預(yù)測值的擬合度??梢妼τ贔lavor6與 Flavor15 服務(wù)器,Stacking模型的預(yù)測擬合程度更好,預(yù)測點(diǎn)較為集中并且與真實值處與相同水平上,而在Flavor9與Flavor12服務(wù)器的預(yù)測上,由于時間序列波動性更大存在了較多的異常點(diǎn)和偏移點(diǎn),對于某一時間段上的預(yù)測值出現(xiàn)了偏離,預(yù)測誤差也主要由這一部分產(chǎn)生,而對于其它預(yù)測點(diǎn)則能夠擬合真實值。與Stacking模型相比,線性回歸對與4種服務(wù)器的擬合度稍差,特別對于波動性較高的序列上,線性回歸在異常點(diǎn)的預(yù)測上誤差較高,主要是由于單一模型缺少更加穩(wěn)健和強(qiáng)壯的特征刻畫。
圖7 最優(yōu)平滑系數(shù)誤差對比
圖8 Stacking預(yù)測結(jié)果
圖9 線性回歸預(yù)測結(jié)果
彈性云服務(wù)器的請求數(shù)據(jù)具有復(fù)雜的規(guī)律性,本文提出基于二次指數(shù)平滑的云服務(wù)器請求數(shù)Stacking集成預(yù)測模型在預(yù)測此類問題具有一定效果。在預(yù)測過程中,為了突破指數(shù)平滑的局限性,設(shè)計了針對平滑系數(shù)的優(yōu)化方法,提高模型的靈活性。針對云服務(wù)器的歷史請求數(shù)據(jù),本文給出了集成預(yù)測模型的建模方法,利用單預(yù)測模型為集成模型進(jìn)行數(shù)據(jù)劃分,并使用劃分?jǐn)?shù)據(jù)集進(jìn)行對集成模型的訓(xùn)練。實驗結(jié)果表明,本文提出的預(yù)測模型相較于傳統(tǒng)的預(yù)測模型有更高的準(zhǔn)確性,下一步的工作則是對模型在長期預(yù)測方面進(jìn)行優(yōu)化。