賴 峻,劉震宇,劉圣海
(廣東工業(yè)大學 信息工程學院,廣東 廣州 510006)
在數(shù)據(jù)分析領(lǐng)域,經(jīng)常會遇到一些數(shù)據(jù)集的預(yù)測問題,如:5G網(wǎng)絡(luò)數(shù)據(jù)[1]、房屋價格[2]、股票價格[3]、出生率[4]、公交車客流[5]等的預(yù)測問題。有些數(shù)據(jù)統(tǒng)計的時間周期較長(比如按周、月或年等進行統(tǒng)計),或數(shù)據(jù)樣本統(tǒng)計時間比較短等原因,使得可以獲得的數(shù)據(jù)樣本數(shù)量很少。對這種只包含少量數(shù)據(jù)的場合,準確預(yù)測相對較難,而在實際應(yīng)用中對于決策部門卻有著重要的參考意義。
數(shù)據(jù)預(yù)測問題通常輸出一個連續(xù)值,屬于回歸問題,對于小樣本數(shù)據(jù)的預(yù)測往往采用線性回歸,已有一些文獻在該領(lǐng)域作出研究。文獻[6]討論了不同分布模型閾值選擇和準確性對小樣本數(shù)據(jù)及樣本偏差的影響。文獻[7]比較了使用小樣本數(shù)據(jù)進行隨機分組設(shè)計的方法,認為當樣本量極小時,傳統(tǒng)方法都將失效。文獻[8]提出了一種簡單實用的特征提取方法來減少小樣本量的影響。文獻[9]對小樣本集提出了一種擴展樣本數(shù)量的方法。文獻[10]提出一種基于一致性估計的方法,這是關(guān)于小樣本數(shù)據(jù)置信區(qū)間的新方法。文獻[11]則提出了一種基于超像素分割和距離加權(quán)線性回歸分類器的光譜空間高光譜圖像分類方法來解決小標簽訓練樣本集問題。文獻[12]從理論上提出了一種沒有對應(yīng)關(guān)系的線性回歸的代數(shù)幾何方法,是一種有效適應(yīng)于小樣本值的解決方案。
本文將線性回歸應(yīng)用于廣州車牌競拍價格數(shù)據(jù)集[13],以探索小樣本數(shù)據(jù)集的預(yù)測方法。廣州車牌競拍是每月一次,從2012年8月首次競拍開始,到2020年7月為止,共96個月。將其制作為一個數(shù)據(jù)集,該數(shù)據(jù)集總共有96個樣本,每個樣本包含競拍的主要特征,如:投放指標數(shù)、有效編碼數(shù)、第一次播報均價、第二次播報均價等,輸出的主要指標為最低報價和平均報價,本文主要預(yù)測平均報價。
設(shè)投放指標數(shù)為x1,有效編碼數(shù)為x2,第一次播報均價為x3,第二次播報均價為x4,輸出平均報價為y,線性回歸假設(shè)輸出與各輸入之間是線性關(guān)系,則輸出y的預(yù)測值與各輸入之間的關(guān)系可用式(1)表示。
其中,w1、w2、w3和w4是權(quán)重,b是偏差,且均為標量。它們是模型的參數(shù),整個算法的目的是找到合適的參數(shù)值,使預(yù)測值盡可能接近真實值。
由于數(shù)據(jù)集樣本數(shù)較少,為盡可能通過訓練獲得準確的參數(shù),將前90個樣本作為訓練集,后6個樣本作為測試集。對于訓練集樣本逐一預(yù)測輸出均價,將得到式(2)。
其中,n為訓練集的樣本總數(shù),即90。
將式(2)表示為矩陣的形式,如式(3)所示。
其中,
同時,式(3)中的加法運算使用了廣播機制[14]。
為衡量平均報價的預(yù)測值與真實值之間的誤差,本算法采用平方誤差函數(shù)作為損失函數(shù)。設(shè)模型參數(shù)θ=[w1, w2, w3, w4, b]T,則損失函數(shù)? (θ)用式(4)表示。
其中,m為用于計算損失函數(shù)的樣本數(shù)。
通過模型訓練,需要找出一組模型參數(shù),以使訓練樣本平均損失最小。隨機梯度下降(stochastic gradient descent, SGD)[15]在深度學習算法中被廣泛用作優(yōu)化算法以減小訓練樣本的平均損失,本文也采用此算法。隨機梯度下降的迭代更新用式(5)表示。
其中,|B|為每個小批量中的樣本個數(shù),在此處用于代替式(4)中的m;η為學習率,均為算法中的超參數(shù),需要通過不斷嘗試以找到合適的值;樣本i的梯度是與損失有關(guān)5個標量參數(shù)的偏導數(shù)組成的向量,結(jié)合式(4),可推導得式(6),如下所示。
針對數(shù)據(jù)集中樣本少的情況,可以采用k折交叉驗證(k-fold cross-validation)[15]的方法。具體地,是將原始訓練集分成k個互不重疊的子集,然后做k次模型訓練和驗證,其中k-1個子數(shù)據(jù)集來訓練模型,另外1個子數(shù)據(jù)集來驗證模型。通過k次訓練和驗證,每次用來驗證的子數(shù)據(jù)集都不同,最后對k次訓練誤差和驗證誤差求平均。這樣通過選擇不同參數(shù)進行驗證,最終找到合適的一組參數(shù)。
通過k折交叉驗證可以調(diào)優(yōu)算法中的超參數(shù),以找到最合適的超參數(shù)。為了評價一組超參數(shù)的交叉驗證誤差,本文使用基于對數(shù)的均方根誤差,假定預(yù)測值為y ?1, ···, y?n和 對應(yīng)的真實標簽y1, ···, yn,則其定義如式(7)所示。
對本文的訓練集數(shù)據(jù)進行k折交叉驗證(這里取k值為5),即將訓練集分成5組,每次取4組用于訓練,1組用于驗證,結(jié)果如圖1所示。
由圖1可見,第1折驗證時,由于第1組數(shù)據(jù)作為驗證數(shù)據(jù),rmse值為1.018,比第1折的訓練數(shù)據(jù)rmse的值0.116幾乎大了一個數(shù)量級,其他4折兩者的結(jié)果基本在同一個數(shù)量級。5折平均后,訓練數(shù)據(jù)的rmse平均值為0.129,而驗證數(shù)據(jù)的rmse平均值為0.343,驗證數(shù)據(jù)rmse均值明顯增大,主要由于第1折的較大值所導致。本文的目標是找到一組超參數(shù),使得測試數(shù)據(jù)和驗證數(shù)據(jù)的平均rmse值盡可能小且趨于相等,以確保最終測試結(jié)果既不會過擬合,也不會欠擬合。而上述的平均誤差結(jié)果的差異,主要源于第1組驗證數(shù)據(jù),并非超參數(shù)設(shè)置所引起的,因此很難判斷某一組超參數(shù)的設(shè)置是否恰當。
圖1 k折交叉驗證的rmseFig.1 rmse of k-fold cross-validation
經(jīng)過不斷實驗和分析,發(fā)現(xiàn)問題出在混洗(Shuffling)策略上。所謂混洗,就是在對數(shù)據(jù)進一步處理之前,隨機打亂數(shù)據(jù)的順序。在本文所研究的車牌競拍數(shù)據(jù)中,就是把原本按照競拍時間順序排列的樣本數(shù)據(jù)隨機打亂,然后再處理。
通常作k折交叉驗證將原始訓練集分成k組后,在每折驗證時,只對該折的訓練組數(shù)據(jù)和驗證組數(shù)據(jù)分別進行混洗,即局部混洗,然后再分別進行訓練和驗證,圖1的實驗結(jié)果正是采用了這種方法。
在所研究的廣州車牌競拍數(shù)據(jù)中,發(fā)現(xiàn)所選取的第1組數(shù)據(jù)與其他組有明顯的區(qū)別:在第1組數(shù)據(jù)樣本的輸入特征中,有很多樣本的有效編碼數(shù)小于投放指標數(shù),即參與競標的人數(shù)少于所提供的標的,而這種現(xiàn)象在后面幾組數(shù)據(jù)中很少出現(xiàn)。這種現(xiàn)象源于競價早期階段,愿意參與的人數(shù)較少(大部分人希望通過車牌搖號或上外地牌等方式低成本地獲得車牌),但隨著時間推移,車牌的獲取難度越來越大,參與人數(shù)越來越多。
這種局部數(shù)據(jù)特異性現(xiàn)象在其他數(shù)據(jù)集中都是常見的。只是由于大樣本數(shù)據(jù)集數(shù)據(jù)量非常大,特異性數(shù)據(jù)相對于其所在數(shù)據(jù)組的數(shù)據(jù)總量來說數(shù)量極少,以致于迭代過程其對結(jié)果不會產(chǎn)生可觀的影響。而小樣本數(shù)據(jù)集由于樣本數(shù)量太少,當選取的樣本組中包含較多的特異性數(shù)據(jù),就會對結(jié)果產(chǎn)生難以忽略的影響。
針對該問題,本文在進行k折交叉驗證之前,先對整個原始訓練集數(shù)據(jù)進行混洗,即全局混洗,使?jié)撛诘奶禺愋詳?shù)據(jù)隨機分布到整個數(shù)據(jù)集中,這樣作k折交叉驗證時,就不會有大量特異性數(shù)據(jù)集中在某一組的情況。
本文算法通過Pytorch框架[16]實現(xiàn),所有輸入特征進行了標準化的預(yù)處理,即每個特征值先減去均值再除以標準差得到標準化后的特征值;式(2)中的權(quán)重和偏差均初始化為均值0,標準差0.01的正態(tài)隨機數(shù)。首先對訓練集數(shù)據(jù)進行全局混洗,然后通過多組實驗來尋找合適的超參數(shù),最后驗證所選擇的一組參數(shù)的預(yù)測效果。在本算法實現(xiàn)中,超參數(shù)有3個,分別是每個小批量中的樣本個數(shù)(|B|)、學習率(η)和迭代周期次數(shù)(λ)。
本節(jié)首先對原始訓練集數(shù)據(jù)進行全局混洗,然后再進行k折交叉驗證(其中k設(shè)為5),如圖2所示。
圖2 采用全局混洗策略的k折交叉驗證的rmseFig.2 rmse of k-fold cross-validation with global shuffling strategy
由圖可見,經(jīng)過混洗后,每折的rmse值沒有顯著差異,測試數(shù)據(jù)rmse均值0.107,驗證數(shù)據(jù)的rmse均值為0.112,均值比較接近。
下面進一步通過k折交叉驗證優(yōu)化超參數(shù),以選擇最適合樣本集的一組超參數(shù)。對超參數(shù)的選擇可以針對某個超參數(shù),選擇一組不同值,而保持其他參數(shù)的值不變,然后評價得到的平均rmse。
本文通過比較不同的|B|以確定最合適的值。實驗中,訓練集樣本90個,λ為10次,學習率η為0.01。除了|B|,其他給定的超參數(shù)也是經(jīng)過大量反復實驗找到的較合適的值,限于論文篇幅原因,無法展示所有實驗。圖3是輸入批量樣本個數(shù)|B|取值分別為1、2、3、5、10和20時rmse的結(jié)果。
圖3 不同批量樣本個數(shù)時的rmse比較Fig.3 Comparison of rmse for different batch size
圖3中給出了k折交叉驗證的訓練數(shù)據(jù)和驗證數(shù)據(jù)的5折平均rmse,可見,|B|為1、2、3時的rmse比較小,可考慮作為選擇值。
本文通過比較不同的η以確定最合適的值。實驗中訓練集樣本90個,λ為10次,|B|為3。圖4是學習率分別為0.001、0.005、0.01、0.03、0.05、0.1、0.2時rmse的結(jié)果。
圖4 不同學習率時的rmse比較Fig.4 Comparison of rmse for different learning rates
由圖4可見,η為0.01、0.03、0.05、0.1時的rmse比較小,可考慮作為選擇值。
迭代周期決定了數(shù)據(jù)訓練的次數(shù),并非迭代次數(shù)越多越好,一般樣本集訓練若干次即能收斂,繼續(xù)訓練只不過額外耗費算力,對于獲得更好的結(jié)果幾乎沒有幫助。另外,如果其他超參數(shù)選的不好,也可能導致迭代結(jié)果無法收斂,甚至可能發(fā)散為極大的值。本實驗通過比較不同的λ以確定最合適的值。實驗中訓練集樣本90個,|B|為3,學習率η為0.01。圖5是λ分別為1、2、3、5、10、20、30、50、100時的rmse的結(jié)果。
圖5 不同迭代周期次數(shù)時的rmse比較Fig.5 Comparison of rmse for different number of iteration cycles
由圖5可見,λ為10以后的rmse已經(jīng)收斂,進一步迭代,結(jié)果沒有明顯的變化。因此通過此實驗,可以確定10作為λ的值。
通過2.2~2.4節(jié)的k折交叉驗證實驗,本文找到了超參數(shù)一些較合適的值,其中|B|的可選值為1、2、3,η的可選值為0.01、0.03、0.05、0.1,λ的可選值為10,為了進一步確定它們的最優(yōu)組合,我們進一步比較不同組合的訓練集和測試集的平均正確率,其中訓練集樣本90個,測試集樣本6個。實驗結(jié)果如表1所示,表中分別選擇|B|、η和λ的不同組合,以驗證平均正確率。
表1 平均正確率Table 1 Average correctness rates
從表中可見,(|B|, η, λ)取值為(3, 0.01, 10)時,無論訓練集還是測試集的平均正確率都比較高,且很接近。由于實驗初始參數(shù)是隨機數(shù),且數(shù)據(jù)隨機混洗,每次訓練結(jié)果都會有一定差異,但經(jīng)過多次實驗,發(fā)現(xiàn)(3, 0.01, 10)這組值的正確率始終保持穩(wěn)定,因此,最終選擇這組值作為競價樣本集的超參數(shù)。
經(jīng)過實驗,確定了3個超參數(shù)的值,即|B|=3,η=0.01,λ=10?;谛颖緮?shù)據(jù)量太少,使用這組值訓練出來的w1、w2、w3、w4和b對數(shù)據(jù)集中的全部數(shù)據(jù)進行檢驗,比較計算出來的預(yù)測值與真實值之間的擬合程度,結(jié)果如圖6所示。
圖6 樣本預(yù)測值和真實值的比較Fig.6 Comparison of sample predicted value and true value
從圖6中可見,預(yù)測值和真實值擬合得比較好,只有幾處出現(xiàn)了稍大些的差異,總的平均正確率達到約95%,且絕大部分數(shù)據(jù)的正確率超過90%,其中最低的預(yù)測正確率為85.09%。
本文將線性回歸的預(yù)測方法應(yīng)用于廣州車牌競拍均價的預(yù)測?;跉v史數(shù)據(jù)的有限性,所能獲得的數(shù)據(jù)量屬于小樣本數(shù)據(jù)。在研究過程中,注意到局部數(shù)據(jù)的特異性會導致k折交叉驗證的某組驗證數(shù)據(jù)誤差明顯增大,通過在驗證前采用全局混洗的策略,有效地解決了這個問題,并依此能正確地判斷各組算法中的超參數(shù)的平均驗證誤差,從而能找出合適的超參數(shù),通過多組實驗,確定了算法的一組最合適的超參數(shù),進而得到了很好的預(yù)測結(jié)果,最終預(yù)測的總平均正確率達到了95%。本文是基于實際數(shù)據(jù)的預(yù)測,預(yù)測結(jié)果對之后的車牌競拍有很好的參考意義,預(yù)測方法也可以應(yīng)用于其他場合,故有較好的實際應(yīng)用價值。本文的全局混洗策略適用于各種小樣本數(shù)據(jù)的情形,故本方法也有較好的理論價值。