鄭婕
(北方工業(yè)大學(xué),北京 100144)
隨著機器學(xué)習(xí)的廣泛發(fā)展與應(yīng)用,簡單的學(xué)習(xí)器或模型已經(jīng)滿足不了需求,集成算法應(yīng)用而生。所謂集成算法,需要構(gòu)建多個學(xué)習(xí)器,然后用一些方法巧妙的將它們結(jié)合在一起,再來完成學(xué)習(xí)任務(wù)的,這樣可以獲得比單一學(xué)習(xí)效果更好的學(xué)習(xí)器。周志華[1]指出個體學(xué)習(xí)器的“準確性”和“多樣性”本身就存在沖突,一般準確性很高之后,要增加多樣性就需犧牲準確性。產(chǎn)生并結(jié)合‘好而不同’的個體學(xué)習(xí)器,正是集成學(xué)習(xí)研究的核心。按照個體學(xué)習(xí)器之間的關(guān)系,分為Bagging、Boosting、Stacking三大類。
Bagging的原理首先是基于自助采樣法(bootstrap sampling)一些樣本被隨機的得到來訓(xùn)練出不同的基學(xué)習(xí)器,然后對這些不同的基學(xué)習(xí)器進行投票,得出分類結(jié)果,隨機森林就是這個算法的典型代表[2]。隨機森林具有廣泛的應(yīng)用,宋欠欠[3]在運用隨機森林對高維數(shù)據(jù)變量篩選的研究中指出利用隨機森林算法進行變量篩選結(jié)果穩(wěn)定,并能夠保證良好的預(yù)測效果。
Boosting,提升算法,它通過反復(fù)學(xué)習(xí)得到一系列弱分類器,一個強分類器由這些弱分類器組合得到,此時,弱學(xué)習(xí)器是強學(xué)習(xí)器提升的過程[1]??傮w而言,Boosting的效果要比Bagging好,但是這個算法中新模型是在舊模型的基礎(chǔ)上生成的,就不能用并行的方法去訓(xùn)練,并且由于對錯誤樣本的關(guān)注,也可能造成過擬合。Boosting的算法族中有很多有名的算法,比如Adaboost、GBM、XGBoost[4]。陳天奇[5]在對XGBoost的算法研究中指出稀疏數(shù)據(jù)和加權(quán)分位數(shù)草圖提供了一種新的稀疏感知算法,用于近似數(shù)學(xué)習(xí)算法上的優(yōu)化使得在利用其進行預(yù)測計算時可以得到更加準確的結(jié)果。最后一類Stacking訓(xùn)練一個模型用于組合其他各個基模型。具體方法是把數(shù)據(jù)分成兩部分,用其中一部分訓(xùn)練幾個基模型A1,A2,A3,用另一部分數(shù)據(jù)測試這幾個基模型,把A1,A2,A3的輸出作為輸入,訓(xùn)練組合模型B,Stacking可以組織任何模型,實際中常使用單層logistic回歸作為模型[6]。
在用算法進行預(yù)測時,常用到的算法有X GBoost、GBDT、LightGBM、神經(jīng)網(wǎng)絡(luò)算法等,魏長亮在對巖柱穩(wěn)定性的預(yù)測研究中使用了這三種算法進行對比,并使用五重交叉驗證尋求每個模型的最優(yōu)參數(shù)配置再進行預(yù)測[7]。謝勇對每月住房租金進行預(yù)測時使用了XGBoost和LightGBM兩種算法進行預(yù)測對比,發(fā)現(xiàn) XGBoost的表現(xiàn)更好[8]。所以通過文獻綜合本文在進行二手車價格預(yù)測上選擇了比較經(jīng)典的XGBoost算法,同時將它和GBDT、LightGBM兩個算法進行對比,得出XGBoost預(yù)測誤差最小,性能最好。
我國有一個龐大的二手車需求市場,二手車的銷售對市場經(jīng)濟有很大的作用,市場潛力很大,但是目前它的潛力還沒有完全發(fā)揮出來。二手車的交易價格受許多因素的影響,車的型號,行駛里程,車的配置,實用年限,包括車的車系、顏色、品牌溢價這些因素都會影響二手車的交易價格。當然,對于不同的二手車交易市場,所處的地理位置的消費水平,人均可支配收入等,也影響著二手車的交易價格[9]。
二手車的數(shù)據(jù)來自于阿里云天池大賽,共有3個數(shù)據(jù)集,這里用到的是Car train數(shù)據(jù)集,由于原始數(shù)據(jù)集并非結(jié)構(gòu)化數(shù)據(jù),因此數(shù)據(jù)預(yù)處理首先對數(shù)據(jù)集進行結(jié)構(gòu)化處理。用眾數(shù)填充缺失值較多的樣本。原始數(shù)據(jù)包含31列變量信息,其中15列為匿名變量,共150000個樣本。本文運用scikit-learn中的train_test_split函數(shù)對數(shù)據(jù)集進行拆分,測試集的比例設(shè)為20%,最終訓(xùn)練集和測試集的劃分如表1。
表1 數(shù)據(jù)集表Tab.1 Data set table
在對特征變量進行觀測時發(fā)現(xiàn)變量“seller”和“offer Type”存在嚴重的偏態(tài)分布,特征傾斜嚴重的變量直接刪除。同時對預(yù)測變量的分布觀測發(fā)現(xiàn)不符合正態(tài)分布如圖1。
圖1 Price分布圖Fig.1 Price distribution
所以對預(yù)測變量price采取對數(shù)變換得到如圖2。
圖2 對數(shù)變換后Price分布圖Fig.2 Price distribution graph after logarithmic transformation
數(shù)據(jù)預(yù)處理這個過程運用了python中的numpy、pandas等模塊,結(jié)合excel等辦公軟件,大大提高了數(shù)據(jù)預(yù)處理的工作效率。
經(jīng)過數(shù)據(jù)預(yù)處理后對數(shù)據(jù)變量進行特征工程,對原有的變量進行特征構(gòu)建得到新變量,例如汽車使用時間為creatDate- regDate,城市信息從regionCode也就是郵編中提取,通過brand和price計算品牌的銷售額,構(gòu)造新的變量進行預(yù)測。
二手車的數(shù)據(jù)集中有150000個樣本,每個樣本都有31個變量,1個觀測變量,30個特征變量,為找到可操作變量中的主要因素,更好地預(yù)測二手車的價格,找到影響二手車價格的最高因素,本文選擇使用隨機森林算法進行變量選擇。
隨機森林是從數(shù)據(jù)表中隨機選擇K個特征建立決策樹,重復(fù)n次。這K個特征經(jīng)過不同隨機組合建立起n棵決策樹,對每個決策樹都傳遞隨機變量來預(yù)測結(jié)果,從n棵決策樹中得到n種結(jié)果。決策樹會預(yù)測輸出值,通過隨機森林中所有決策樹預(yù)測值的平均值計算得出最終預(yù)測值,最終得到篩選出的K個變量的重要度。在隨機森林中某個特征X的重要性的計算方法如下:
(1)在隨機森林中的每一棵決策樹,都用它對應(yīng)的袋外數(shù)據(jù)即OOB,去計算它的袋外數(shù)據(jù)誤差即errOOB1。
(2)在袋外數(shù)據(jù)OOB的每一個樣本的特征X加入噪聲干擾這樣可以隨機改變樣本在特征X處的值,然后再計算袋外數(shù)據(jù)誤差,記為errOOB2。
(3)當我們假設(shè)隨機森林有N棵樹時,用∑(errOOB2-errOOB1)/N來表示X的重要性,特征被隨機加入噪聲后,如果袋外準確率下降很多,就表明此特征對樣本分類結(jié)果影響很大,這表明它的重要程度高[10]。
通過隨機森林對變量重要度進行排序,變量包括汽車交易ID、汽車交易名稱、汽車注冊日期、車型編碼、汽車品牌、車身類型、燃油類型、變速箱、發(fā)動機功率、汽車已行駛公里、汽車有尚未修復(fù)的損壞、地區(qū)編碼、汽車上線時間、匿名特征,以及包含v0-14在內(nèi)15個匿名特征。本文選擇分數(shù)不為零的變量作為預(yù)測價格的特征變量,共9個變量,如表2所示。
表2 變量名稱表Tab.2 Variable name table
運用隨機森林篩選出9個變量后,用XGBoost進行回歸任務(wù),建立XGBoost模型對二手車的價格進行預(yù)測,使用訓(xùn)練集進行參數(shù)訓(xùn)練,測試集進行預(yù)測[11]。
其中K為分類器的總個數(shù),f(x)表示第k分類器,表示集成K個分類器后對樣本xi的預(yù)測結(jié)果,損失函數(shù)表示為:
顯然無法直接通過計算得出f*(x)的解,所以我們要考慮優(yōu)化的方法,f(x)為決策樹模型,給出權(quán)重w和樹結(jié)構(gòu)q即可確定一棵決策樹,而樹結(jié)構(gòu)q實質(zhì)上就是劃分分裂節(jié)點的問題,所以f*(x)可以轉(zhuǎn)化為找最優(yōu)權(quán)重w和劃分分裂節(jié)點的問題[6]。
…
此時利用泰勒展開式近似目標函數(shù):
通過安全管理制度的應(yīng)用,可以有效的約束建筑施工過程中存在的不安全行為,減少安全事故的發(fā)生,保障建筑工程的順利開展。但是很多建筑工程的安全管理體制都存在不完善的情況,要么是從其他建筑項目“生搬硬套”而來,不符合企業(yè)本身特點,導(dǎo)致在應(yīng)用過程中很難有效執(zhí)行落地;要么安全管理制度形同虛設(shè),缺少執(zhí)行力,導(dǎo)致建筑施工項目的安全事故仍時有發(fā)生。
此時令Gi=∑gi;Hj=∑hi,代入上式wj求偏導(dǎo),使其導(dǎo)函數(shù)等于0得到:
網(wǎng)格搜索法是一種尋找最優(yōu)參數(shù)的方法,它是將估計函數(shù)的參數(shù)用交叉驗證的方法得到的一種算法,將每個參數(shù)的可能取值進行排列組合,把所有可能的形式用“網(wǎng)格”的形式表示出來,再對它進行評估,在計算機上對每種可能的參數(shù)形式進行計算訓(xùn)練狗,得到一個最優(yōu)的參數(shù)組合。網(wǎng)格搜索雖然比較耗時,但是它有很廣泛的搜索范圍,有很大可能找到最優(yōu)參數(shù)組合[12]。使用GBDT、LightGBM和XGBoost模型建模分析時,參數(shù)的選擇對模型的預(yù)測結(jié)果有著較大的影響,故需要對若干參數(shù)進行調(diào)優(yōu)使用網(wǎng)格搜索對上述模型參數(shù)進行自動尋優(yōu), 首先確定學(xué)習(xí)率,把learning_rate設(shè)置成0.1,其他參數(shù)使用默認參數(shù),使用GridSearchCV函數(shù)進行網(wǎng)格搜索確定合適的迭代次數(shù),找到合適的迭代次數(shù)后使用GridSearchCV函數(shù)對模型的其他兩個主要參數(shù)進行網(wǎng)格搜索自動尋優(yōu),減小(增大)學(xué)習(xí)率,同時增大(減小)迭代次數(shù),找到合適的學(xué)習(xí)率是使得在誤差最小時迭代次數(shù)最少,找到最優(yōu)參數(shù)[13]。
網(wǎng)格搜索的結(jié)果分別如表3所示。
表3 XGBoost網(wǎng)格搜索結(jié)果Tab.3 XGBoost grid search results
由網(wǎng)格搜索結(jié)果可以得出,max_depth=9,它表示樹的最大深度為9,main_child_weight=7,決定最小葉子節(jié)點樣本權(quán)重和,它是為了防止過擬合。n_estimators=300,是弱學(xué)習(xí)器的最大迭代次數(shù),或者說最大的弱學(xué)習(xí)器的個數(shù)。一般來說n_e s t i m a t o r s太小,容易欠擬合,n_estimators太大,計算量會太大,并且n_estimators到一定的數(shù)量后,再增大n_estimators獲得的模型提升會很小,該模型中選擇的值是300。Scores=0.9345858224796677這個參數(shù)狀態(tài)下的模型打分約為0.935,效果較好。
由網(wǎng)格搜索結(jié)果表4可以得出,樹的深度為7,main_child_weight=1,n_estimators=95時Scores=0.9333038265 163888這個參數(shù)狀態(tài)下的模型打分約為0.933,效果較好。
表4 LightGBM網(wǎng)格搜索結(jié)果Tab.4 LightGBM grid search results
由網(wǎng)格搜索結(jié)果表5可以得出,樹的深度為7,main_samples_split=1,n_estimators=100時Scores=0.93492 00615330541這個參數(shù)狀態(tài)下的模型打分約為0.935,效果較好。
表5 GBDT網(wǎng)格搜索結(jié)果Tab.5 GBDT grid search result
將網(wǎng)格搜索出的最優(yōu)參數(shù)分別帶入到GBDT、Light GBM和XGBoost中進行預(yù)測,得到如表6所示結(jié)果。
由表6對比結(jié)果所示,XGBoost模型在預(yù)測值與實際值的擬合度上表現(xiàn)較好。其預(yù)測性能高于GBDT模型的預(yù)測性能,與lightGBM模型進行比較也具有相對優(yōu)勢。表6顯示XGBoost模型在MSE具有出色的表現(xiàn)。
表6 對比結(jié)果Tab.6 Compare results
本文使用3種機器學(xué)習(xí)模型對二手車價格進行預(yù)測,XGBoost和lightGBM作為機器學(xué)習(xí)近年提出的新方法,比傳統(tǒng)GBDT能達到更好的預(yù)測精度,同時XGBoost在模型擬合程度和均方誤差上的表現(xiàn)都遠超Light GBM和GBDT。本文的不足之處在于XGBoost雖然能夠得到較好的預(yù)測精度,但是XGBoost是基于啟發(fā)式算法,尋找的解為局部最優(yōu)并非全局最優(yōu)。