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