<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Kaggle on 300.Watts</title><link>https://300watts.me/tags/kaggle/</link><description>Recent content in Kaggle on 300.Watts</description><generator>Hugo</generator><language>en</language><managingEditor>morristai01@gmail.com (Morris)</managingEditor><webMaster>morristai01@gmail.com (Morris)</webMaster><copyright>This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.</copyright><lastBuildDate>Thu, 17 Aug 2017 11:51:08 +0800</lastBuildDate><atom:link href="https://300watts.me/tags/kaggle/index.xml" rel="self" type="application/rss+xml"/><item><title>Kaggle Tatanic Stacking 學習模型整理</title><link>https://300watts.me/posts/kaggle-tatanic-stacking-%E5%AD%B8%E7%BF%92%E6%A8%A1%E5%9E%8B%E6%95%B4%E7%90%86/</link><pubDate>Thu, 17 Aug 2017 11:51:08 +0800</pubDate><author>morristai01@gmail.com (Morris)</author><guid>https://300watts.me/posts/kaggle-tatanic-stacking-%E5%AD%B8%E7%BF%92%E6%A8%A1%E5%9E%8B%E6%95%B4%E7%90%86/</guid><description>&lt;p&gt;在看過&lt;a href="https://google.com" target="_blank" rel="noopener noreferrer"&gt;Kaggle&lt;/a&gt;上Titanic的一些kernels，其中不乏用SVM, RandomForest, LogisticRegression, etc. 而這Kernel有趣的是他利用6種不同的learning models去建模。&lt;br&gt;
&lt;a href="https://www.kaggle.com/arthurtok/introduction-to-ensembling-stacking-in-python" target="_blank" rel="noopener noreferrer"&gt;Introduction to Ensembling/Stacking in Python Using data from Titanic: Machine Learning from Disaster&lt;/a&gt;&lt;br&gt;
在Level 1用了&lt;code&gt;RandomForestClassifier&lt;/code&gt;, &lt;code&gt;AdaBoostClassifier&lt;/code&gt;, &lt;code&gt;GradientBoostingClassifier&lt;/code&gt;, &lt;code&gt;ExtraTreesClassifier&lt;/code&gt;, &lt;code&gt;SVM&lt;/code&gt;，而Level 2用了&lt;code&gt;XGBoost&lt;/code&gt;。
我大致畫出整個模型的流程架構，以便於理解，光看源碼其實很難短時間理解在幹嘛，作者靈活的用了class來降低在jupyter notebook內程式碼的複雜度，方便之後修改和整理。&lt;/p&gt;
&lt;p&gt;&lt;img class="tw-inline" loading="lazy" src='https://300watts.me/images/tatanic_stacking.png' alt="tatanic_stacking_flow" &gt;&lt;/p&gt;
&lt;h3 id="level-1" class="headerLink"&gt;
 &lt;a href="#level-1" class="header-mark"&gt;&lt;/a&gt;Level 1&lt;/h3&gt;&lt;p&gt;這裡最重要的是數據處理，Kaggle只給了我們兩份資料：train ＆ test，其中&lt;code&gt;train.shape&lt;/code&gt; = (891, 12)，&lt;code&gt;test.shape&lt;/code&gt; = (418,11)。
用交叉驗證切割train之後會有178 x 5的數據集，由於我們n-fold有五組，Model也有五個，這裡容易腦袋打結。所以我們先用model 1(隨機森林)舉例：train切成五組之後丟給隨機森林訓練，第一組有713人當訓練集，178人當驗證集(validation set)，第二組則換成另一批713人當訓練集，178人當驗證集，以此類推。驗證出來的答案打包成一組178 x 4+179剛好成為891的et_oof_train(注意！KFold把我們的資料切成5份時，實際上是把第一份切成712 x 179，其餘切成713 x 178，我就是卡在這裡..囧)。
當我們對每個模型這樣做的時候，就得到五個out-of-fold_train，結合在一起就變成891 x 5的訓練集(就是XGBoost的訓練集)！
那XGBoost的測試集哪裡來？再用剛剛隨機森林做例子：我們把訓練集分成五組，所訓練出來的隨機森林就有5個，現在就用5個隨機森林去對test預測，所預測出來的結果就是之5 x 418! 我們在將其求平均並reshape(-1, 1)，所得到的結果是(418,)的ndarray，數值介在0~1之間。
又我們有5個models，所以最後的x_test有418 x 5個數。&lt;/p&gt;
&lt;h3 id="level-2" class="headerLink"&gt;
 &lt;a href="#level-2" class="header-mark"&gt;&lt;/a&gt;Level 2&lt;/h3&gt;&lt;p&gt;最後在XGBoost中剩下調參數了，放一下作者的參數做參考
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;gbm&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;xgb&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;XGBClassifier&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;#learning_rate = 0.02,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;n_estimators&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;max_depth&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;min_child_weight&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;#gamma=1,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;gamma&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;subsample&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;colsample_bytree&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;objective&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="err"&gt;‘&lt;/span&gt;&lt;span class="n"&gt;binary&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;logistic&lt;/span&gt;&lt;span class="err"&gt;’&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;nthread&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;scale_pos_weight&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x_train&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y_train&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;predictions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;gbm&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;predict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x_test&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
這樣基本上就完成我們的stacking模型了~
如有錯誤歡迎指正&lt;/p&gt;</description></item></channel></rss>