解決的問題是給每個災(zāi)后建筑提出不同的修復(fù)指導(dǎo)建議(無需處理、小規(guī)模修復(fù)、大規(guī)模修繕、重建)
比賽提供了lightGBM和樸素貝葉斯兩種公開的標(biāo)桿算法。本文是基于公開的lightGBM標(biāo)桿算法的基礎(chǔ)上進(jìn)行優(yōu)化二次優(yōu)化,目前排名40。
從標(biāo)桿算法準(zhǔn)度0.78856到0.79571
本文的優(yōu)化步驟分為三步:
1、數(shù)據(jù)處理
2、特征選擇
3、調(diào)參
(一)、數(shù)據(jù)處理
1.1數(shù)據(jù)結(jié)構(gòu)
首先,讓我先來了解一下數(shù)據(jù)結(jié)構(gòu)。

優(yōu)化第一步是要對數(shù)據(jù)進(jìn)行一定處理,方便我們可以選擇對應(yīng)的數(shù)據(jù)或者特征值進(jìn)行預(yù)測
【代碼】

info()函數(shù)說明:
功能:用于給出樣本數(shù)據(jù)的相關(guān)信息概覽 :行數(shù),列數(shù),列索引,列非空值個數(shù),列類型,內(nèi)存占用
使用格式:data.info()
【分析】運行效果如下:有652936個觀測值,沒有缺失值

接下來檢查是否存在重復(fù)值
【代碼】

?輸出結(jié)構(gòu)是0,不存在重復(fù)值。
基于標(biāo)桿算法的思想,我們這里引入兩個特征,floor_decline和height_decline,用地震前的高度(樓層)減去地震后的高度(樓層)所生成的新的變量。

1.2異常值處理
地震前后的樓層高度應(yīng)該是有變化的,或者是不變的,不可能存在地震后的樓層高度比地震前的樓層高度還要高,在此處表達(dá)為height_before>=height_after和floor_before>=floor_after,因此我對不滿足條件的數(shù)據(jù)進(jìn)行篩選并刪除掉。
【代碼】

運行結(jié)果如下

我們可以看到刪掉了3360條數(shù)據(jù)。
我們也可以用均值或者眾數(shù)中位數(shù)等數(shù)據(jù)來替代異常值,我此處選的的刪掉異常值。大家也可以采取不同的方法進(jìn)行嘗試。data.loc()可以來進(jìn)行處理
1.3離群值處理
【介紹】
在建模預(yù)測之前,我們先對離群值進(jìn)行處理。根據(jù)正態(tài)分布的3sigma原則,我們將在3sigma之外的數(shù)據(jù)進(jìn)行刪除。3sigma原理可以簡單描述為:若數(shù)據(jù)服從正態(tài)分布,則異常值被定義為一組結(jié)果值中與平均值的偏差超過三倍標(biāo)準(zhǔn)差的值。即在正態(tài)分布的假設(shè)下,距離平均值三倍(為標(biāo)準(zhǔn)差)之外的值出現(xiàn)的概率很小,因此可認(rèn)為是異常值。樣本數(shù)目足夠大認(rèn)為近似服從正態(tài)分布。
【代碼】

通過代碼我們刪掉了異常值,我們查看一下刪除前后的數(shù)值對比。

1.4分類特征處理
由最開始的數(shù)據(jù)結(jié)構(gòu)我們可以看出存在很多分類特征,比如ground_floor_type、land_condition等,我們可以采用獨熱編碼的方式來對分類特征進(jìn)行處理。(此處基于標(biāo)桿算法的處理思路)
【代碼】

以position_attached為例,獨熱編碼結(jié)果如下

(二)、特征選擇
2.1整體相關(guān)性分析
根據(jù)以上的數(shù)據(jù)處理之后,我們發(fā)現(xiàn)仍然存在很多的特征,那么這些特征是否都對我們的預(yù)測起到一定的作用呢?答案肯定不是。那么我們可以通過繪制熱力圖的方式來查看各個特征之間的相關(guān)性,刪除相關(guān)性差的特征來進(jìn)行更好地預(yù)測。
【代碼】

運行結(jié)果如下

【分析】
1、我們可以看出district_id、floor_before等變量與y的相關(guān)性較弱,那我們將這些特征刪除進(jìn)行最后的特征選擇。(此處選擇刪掉相關(guān)性小于0.2的特征)。
2、此處我們可以看出標(biāo)桿算法所引入的height_decline和floor_decline的相關(guān)與預(yù)測結(jié)果相關(guān)性較高。
3、我們可以看出floor_after與height_after具有強(qiáng)烈的相關(guān)性。這和我們的常識相符,這兩個預(yù)測變量存在強(qiáng)共線性,應(yīng)該考慮刪去一個。
【代碼】

基于以上的選擇,我們最終選擇了age、floor_decline、height_decline、height_after四個特征進(jìn)行預(yù)測
(三)調(diào)參
首先我們來了解lightGBM的參數(shù)調(diào)整有哪些

3.1用gridSearchCV調(diào)參
關(guān)于調(diào)參的細(xì)節(jié)可以查看鏈接:關(guān)于lightGBM和gridsearchcv的參數(shù)調(diào)整
首先我們要初始化我們的模型,即給lightGBM的參數(shù)傳值,基于gridsearchcv來調(diào)參
【代碼】

我們處理的多分類問題,故此處選擇的評價標(biāo)準(zhǔn)采用"accuracy",其他的相關(guān)參數(shù)在鏈接可以查看,此處不贅述。

初始化完我們的模型之后,我們每次選擇兩個或者一個參數(shù)來進(jìn)行調(diào)參。雖然不能保證達(dá)到全局最優(yōu),但是至少滿足局部最優(yōu)。這對我們的選取的調(diào)參組合就有了一定要求,盡量選擇相互獨立的參數(shù)為一個組來進(jìn)行調(diào)參。
3.2調(diào)參結(jié)果
【介紹】lightGBM根本上來講是決策樹。可以固定樹的不同深度,對其他參數(shù)調(diào)整,返回準(zhǔn)確度最好的組合,作為最優(yōu)參數(shù)組合。調(diào)參的大體思路大體分為7步針對12個參數(shù)進(jìn)行調(diào)參。具體參考鏈接。以下是我的調(diào)參表:
