来自 | 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]:
现在让我们正式开始吧!
In[2]:
Output[2]:
['model_training_advanced_regression.png']
In[3]:
Output[3]:
((1460, 81), (1459, 80))
EDA
目标
-
数据集中的每一行都描述了某一匹马的特征
-
在已知这些特征的条件下,预测每匹马的销售价格
对原始数据进行可视化
In[4]:
Output[5]:
SalePrice:目标值的特性探究
In[5]:
In[6]:
Skewness: 1.882876
Kurtosis: 6.536282
可用的特征:深入探索
数据可视化
In[7]:
探索这些特征以及 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]:
Input[10]:
Input[11]:
.3, ylim=(0,800000));
Input[12]:
lim=(0,800000));
Input[13]:
ylim=(0,800000));
Input[14]:
Output[14]:
((1460, 80), (1459, 79))
((1460, 80), (1459, 79))
可视化 salePrice 的分布
Input[15]:
从上图中可以看出,SalePrice 有点向右边倾斜,由于大多数机器学习模型对非正态分布的数据的效果不佳,因此,我们对数据进行变换,修正这种倾斜:log(1+x)
Input[16]:
对 SalePrice 重新进行可视化
Input[17]:
mu = 12.02 and sigma = 0.40
从图中可以看到,当前的 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]:
接下来,我们将分别对每一列填充缺失值
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]:
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]:
从上图可以看到,所有特征都看上去呈正态分布了。
创建一些有用的特征
机器学习模型对复杂模型的认知较差,因此我们需要用我们的直觉来构建有效的特征,从而帮助模型更加有效的学习。
特征转换
通过对特征取对数或者平方,可以创造更多的特征,这些操作有利于发掘潜在的有用特征。
对集合特征进行编码
对集合特征进行数值编码,使得机器学习模型能够处理这些特征。
(2917, 379)
<span style="font-size: 15px;color: rgb(63, 63, 63);letter-spacing: 1px;"> </span><br />
<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))
对训练集中的部分特征进行可视化
模型训练
模型训练过程中的重要细节
-
交叉验证:使用12-折交叉验证
-
模型:在每次交叉验证中,同时训练七个模型(ridge, svr, gradient boosting, random forest, xgboost, lightgbm regressors)
-
Stacking 方法:使用xgboot训练了元 StackingCVRegressor 学习器
-
模型融合:所有训练的模型都会在不同程度上过拟合,因此,为了做出最终的预测,将这些模型进行了融合,得到了鲁棒性更强的预测结果
初始化交叉验证,定义误差评估指标
建立模型
训练模型
计算每个模型的交叉验证的得分
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
各模型性能比较
从上图可以看出,融合后的模型性能最好,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 岗位需求正放缓
本篇文章来源于: 深度学习这件小事
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
内容反馈