Kaggle HousePrice : LB 0.11666(排名前15%), 用搭積木的方式(1.原理)
關鍵詞: 機器學習, 特徵工程,調參, 比賽, Kaggle, House Price, 搭積木, 管道, Pandas Pipe, Sklearn Pipeline
本文預計閱讀時間需要15分鐘。 假定讀者已經對Kaggle 和機器學習比賽有一定了解。
我參加了兩個Kaggle 比賽,一個是Titanic (分類),另一個是HousePrice(回歸)。分別獲得了前7% (花了約3個月業餘時間)和前13%排名(花了約2個月業餘時間)的成績。由於剛剛上手5個月機器學習,其中花了很多時間作重複和無用功。
本文的目的主要是分享和探討:
- 我總結的搭積木式刷分大法。(即,利用Pandas 的Pipe 和 Sklearn的 Pipeline)
- 特徵工程中做法的自我理解。(例如:為什麼要Log transfer,正態化等)
3。將自己碰到的問題(特徵工程導致的過擬合)分享出來,求高人解惑
1。首先,重要的事情說三遍。
特徵工程
特徵工程
特徵工程
機器學習的目的是已知的數據(包含X(特徵), Y(標籤)),採用一定演算法,訓練出某模型。用這個模型對新的數據進行預測 ,到預測的結果(標籤)。
對於,已知的數據以及新的數據中的(特徵)都需要通過特徵工程處理。才能去訓練模型,或者進行預測。
採用不同特徵工程方法處理過的數據,訓練時得出的模型不一樣,調參的結果不一樣,預測的結果更是有不同的結果。 因此在機器學習中,特徵工程往往花掉80%時間,而模型訓練之用到了20%的時間。
我在第一個Titanic 比賽中花了大量的時間,學習和測試各種調參,集成方法。 在House Price 比賽中也試圖採用同樣的策略,結果效果不是很好。往往結果會互相影響,甚至有的時候有機器學習是玄學的感覺。
重新審視了之後,我將整個House Price 的機器學習分成兩個大步驟 :即:
1 . 特徵工程(只使用Pandas, StatsModel,scipy,numpy, seaborn等庫)
1.1 輸入: 原始Train, Test 數據集,將原始Train和Test 合併成一個數據集combined
1.2 處理: Pandas Pipe
根據各種可能和各種特徵工程方法定義各種函數(輸入combined, 輸入pre_combined)
用PandasPipe 將這個函數像搭積木一樣連在一起。用列表按序存放這些函數)
例如: pipe_basic = [pipe_basic_fillna,pipe_fillna_ascat,pipe_bypass,pipe_bypass,pipe_log_getdummies,pipe_export,pipe_r2test]
這個列表就是,1. 基本的填充空值, 2. 轉換數據類型, 3. 空白函數(為了對齊美觀而以,啥事不做),4. log 轉換,類別數據啞元處理, 5. 導出到hdf5文件, 6.檢查R2值
利用各種排列組合,或者各種參數組合,可以產生豐富的pipes,每一個pipes都可以產生一個預處理過的文件。
1.3 輸出:某文件夾下 的N個預處理過的hdf5文件。 針對各種特徵工程的排列組合,或者是Kaggle上面的各種新奇的特徵工程方法。
在特徵工程處理完後, 已經產生了大量的預處理數據。 和這些預處理數據的R2值[0~1]。如果R2值過低,例如小於80%,那麼可以考慮直接刪除。因為預處理的數據中的X只能解釋80%的Y值。R2值太低,沒有進一步處理的價值。
2. 機器學習階段(訓練和產生模型,目標是儘可能獲得儘可能低的RMSE值(針對訓練數據),同時要具有范化的能力(針對測試數據))
第一步,建立基準,篩選出最好的一個(幾個)預處理文件(隨機數設成固定值)
第二步,針對篩選出來的預處理文件,進行調參。找到最合適的幾個演算法(通常是RMSE值最低,且不同Kernel)(隨機數設成固定值)
第三步,用調好的參數來預處理文件中的Traing數據的做average 和stacking.
第四部,生成csv文件,提交到Kaggle 看看得分如何。
我採用上述方法後,基本上獲得的LB 分數就比較穩定向上,避免了之前的忽上忽下。而且避免了大量的重複工作。
上面是原理部分。 如果大家覺得寫的值得一看,請隨手點贊。贊數過50,我再繼續分享實踐部分。一步一步,屆時如何做。後續的分享可能比較枯燥,裡面就有一些代碼了。
分享是對自己最好的投資!
相關鏈接:
Kaggle HousePrice : LB 0.11666(前15%), 用搭積木的方式(2.實踐-特徵工程部分)
Kaggle HousePrice : LB 0.11666(排名前15%), 用搭積木的方式(1.原理)
用Python分析指數: 11月16日熱門指數Z值表
用Python分析指數: 10月18日指數高低Z值表。
滬深300進入低估區了嗎? 沒有。好像中證環保現在低估了。
一個韭菜用Python採集,清洗和分析中證指數
推薦閱讀:
※用深度學習檢測WAF惡意請求
※數學 · RNN(一)· 從 NN 到 RNN
※譯文|LIME-分類器預測結果的解釋
※AI安全如何入門(上)