知行编程网知行编程网  2022-04-01 13:01 知行编程网 隐藏边栏 |   抢沙发  21 
文章评分 0 次,平均分 0.0

过关斩将打进 Kaggle 竞赛 Top 0.3%,我是这样做的

来自 | AI科技大本营

作者 | Lavanya Shukla   译者 | Monanfei   责编 | 夕颜

【导读】刚开始接触数据竞赛时,我们可能会被一些高大上的技术吓到。各界大佬云集,各种技术令人眼花缭乱,新手们就像蜉蝣一般渺小无助。今天本文就分享一下在 kaggle 的竞赛中,参赛者取得 top0.3% 的经验和技巧。让我们开始吧!


Top 0.3% 模型概览


赛题和目标


  • 数据集中的每一行都描述了某一匹马的特征

  • 在已知这些特征的条件下,预测每匹马的销售价格

  • 预测价格对数和真实价格对数的RMSE(均方根误差)作为模型的评估指标。将RMSE转化为对数尺度,能够保证廉价马匹和高价马匹的预测误差,对模型分数的影响较为一致。


模型训练过程中的重要细节


  • 交叉验证:使用12-折交叉验证

  • 模型:在每次交叉验证中,同时训练七个模型(ridge, svr, gradient boosting, random forest, xgboost, lightgbm regressors)

  • Stacking 方法:使用 xgboot 训练了元 StackingCVRegressor 学习器

  • 模型融合:所有训练的模型都会在不同程度上过拟合,因此,为了做出最终的预测,将这些模型进行了融合,得到了鲁棒性更强的预测结果


模型性能


从下图可以看出,融合后的模型性能最好,RMSE 仅为 0.075,该融合模型用于最终预测。

 

In[1]:


 

Output[1]:

       过关斩将打进 Kaggle 竞赛 Top 0.3%,我是这样做的       

现在让我们正式开始吧!

 

In[2]:

 

Output[2]:


['model_training_advanced_regression.png']


In[3]:


Output[3]:

((1460, 81), (1459, 80))


EDA


目标



对原始数据进行可视化


In[4]:


Output[5]:

       过关斩将打进 Kaggle 竞赛 Top 0.3%,我是这样做的      

SalePrice:目标值的特性探究


In[5]:

      过关斩将打进 Kaggle 竞赛 Top 0.3%,我是这样做的
     


In[6]:


Skewness: 1.882876

Kurtosis: 6.536282


可用的特征:深入探索

数据可视化

 

In[7]:


   

过关斩将打进 Kaggle 竞赛 Top 0.3%,我是这样做的

      

 

探索这些特征以及 SalePrice 的相关性

 

In[8]:


Output[8]:

<span style="font-size: 15px;color: rgb(63, 63, 63);letter-spacing: 1px;"><br  />        </span><img class="" data-ratio="0.8747099767981439"  data-type="png" data-w="862" height="auto" width="862" src="https://www.zkxjob.com/wp-content/uploads/2022/03/wxsync-2022-03-08bf126f693755e854ed70ec0bfb985c.jpg"><span style="font-size: 15px;color: rgb(63, 63, 63);letter-spacing: 1px;"><br  />      </span><br  />

 

选取部分特征,可视化它们和 SalePrice 的相关性

 

Input[9]:


       过关斩将打进 Kaggle 竞赛 Top 0.3%,我是这样做的      

Input[10]:


       过关斩将打进 Kaggle 竞赛 Top 0.3%,我是这样做的      

Input[11]:

.3, ylim=(0,800000));

       过关斩将打进 Kaggle 竞赛 Top 0.3%,我是这样做的      

Input[12]:

lim=(0,800000));

       过关斩将打进 Kaggle 竞赛 Top 0.3%,我是这样做的      

Input[13]:

ylim=(0,800000));

       过关斩将打进 Kaggle 竞赛 Top 0.3%,我是这样做的      

Input[14]:


Output[14]:


((1460, 80), (1459, 79))


可视化 salePrice 的分布


Input[15]:


       过关斩将打进 Kaggle 竞赛 Top 0.3%,我是这样做的      

从上图中可以看出,SalePrice 有点向右边倾斜,由于大多数机器学习模型对非正态分布的数据的效果不佳,因此,我们对数据进行变换,修正这种倾斜:log(1+x) 

 

Input[16]:


对 SalePrice 重新进行可视化

 

Input[17]:

mu = 12.02 and sigma = 0.40

 

       过关斩将打进 Kaggle 竞赛 Top 0.3%,我是这样做的      

 

从图中可以看到,当前的 SalePrice 已经变成了正态分布

Input[18]:


Input[19]:

 

Input[19]:

(2917, 79)

填充缺失值


Input[20]:

Percent of missing data

Output[20]:

[('PoolQC', 99.69),

('MiscFeature', 96.4),

('Alley', 93.21),

('Fence', 80.43),

('FireplaceQu', 48.68),

('LotFrontage', 16.66),

('GarageYrBlt', 5.45),

('GarageFinish', 5.45),

('GarageQual', 5.45),

('GarageCond', 5.45)]

 

Input[21]:


       过关斩将打进 Kaggle 竞赛 Top 0.3%,我是这样做的      

 

接下来,我们将分别对每一列填充缺失值


Input[22]:


Input[23]:


Input[24]:


Output[14]:

Percent of missing data

 [('MSSubClass', 0.0),

('MSZoning', 0.0),

('LotFrontage', 0.0),

('LotArea', 0.0),

('Street', 0.0),

('Alley', 0.0),

('LotShape', 0.0),

('LandContour', 0.0),

('Utilities', 0.0),

('LotConfig', 0.0)]


从上面的结果可以看到,所有缺失值已经填充完毕

 

调整分布倾斜的特征


Input[25]:


Input[26]:

       过关斩将打进 Kaggle 竞赛 Top 0.3%,我是这样做的      

Input[27]:


Output[27]:

There are 25 numerical features with Skew > 0.5 :

MiscVal          21.939672

PoolArea         17.688664

LotArea          13.109495

LowQualFinSF     12.084539

3SsnPorch        11.372080

KitchenAbvGr      4.300550

BsmtFinSF2        4.144503

EnclosedPorch     4.002344

ScreenPorch       3.945101

BsmtHalfBath      3.929996

dtype: float64

 

使用 scipy 的函数 boxcox1来进行 Box-Cox 转换,将数据正态化



Input[29]:


       过关斩将打进 Kaggle 竞赛 Top 0.3%,我是这样做的       

从上图可以看到,所有特征都看上去呈正态分布了。

 

创建一些有用的特征


机器学习模型对复杂模型的认知较差,因此我们需要用我们的直觉来构建有效的特征,从而帮助模型更加有效的学习。

 


特征转换


通过对特征取对数或者平方,可以创造更多的特征,这些操作有利于发掘潜在的有用特征。

 



对集合特征进行编码


对集合特征进行数值编码,使得机器学习模型能够处理这些特征。

 

(2917, 379)

<span style="font-size: 15px;color: rgb(63, 63, 63);letter-spacing: 1px;"> </span><br  />

       过关斩将打进 Kaggle 竞赛 Top 0.3%,我是这样做的  

<p style="margin-right: 8px;margin-left: 8px;line-height: 1.75em;"><span style="color: rgb(136, 136, 136);font-size: 15px;letter-spacing: 1px;">(2917, 379)</span></p><br  />


重新创建训练集和测试集


((1458, 378), (1458,), (1459, 378))

 

对训练集中的部分特征进行可视化

 

      过关斩将打进 Kaggle 竞赛 Top 0.3%,我是这样做的


模型训练



模型训练过程中的重要细节



初始化交叉验证,定义误差评估指标


建立模型



训练模型


计算每个模型的交叉验证的得分

 

lightgbm: 0.1159 (0.0167)

xgboost: 0.1364 (0.0175)

SVR: 0.1094 (0.0200)

ridge: 0.1101 (0.0161)

rf: 0.1366 (0.0188

<blockquote class="js_blockquote_wrap" data-type="2" data-url="" data-author-name="" data-content-utf8-length="18" data-source-title=""><section class="js_blockquote_digest"><section>gbr: 0.1121 (0.0164)</section></section></blockquote>

 

拟合模型

<blockquote class="js_blockquote_wrap" data-type="2" data-url="" data-author-name="" data-content-utf8-length="9" data-source-title=""><section class="js_blockquote_digest"><section>stack_gen</section></section></blockquote>

lightgbm

xgboost

Svr

Ridge

RandomForest

GradientBoosting


融合各个模型,并进行最终预测


 

RMSLE score on train data:

0.07537440195302639

各模型性能比较



       过关斩将打进 Kaggle 竞赛 Top 0.3%,我是这样做的      

 

从上图可以看出,融合后的模型性能最好,RMSE 仅为 0.075,该融合模型用于最终预测。


提交预测结果



(1459, 2)

<p style="margin-right: 8px;margin-left: 8px;line-height: 1.75em;"><br  /></p>
<br  />


原文链接:

https://www.kaggle.com/lavanyashukla01/how-i-made-top-0-3-on-a-kaggle-competition

— 完 —

为您推荐

李宏毅:1 天搞懂深度学习(附思维导图)

阿里 90 后科学家研发,达摩院开源新一代 AI 算法模型!曾获国际顶级大赛双料冠军

如何利用Python开发人工智能入门项目

阿里达摩院刷新纪录,超越微软、Facebook!

AI 就业排名出炉:机器学习霸榜、薪资最高;但 AI 岗位需求正放缓

本篇文章来源于: 深度学习这件小事

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写

你可能也喜欢

热评文章

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享