美文网首页
机器学习-XGBoost 及参数调整

机器学习-XGBoost 及参数调整

作者: 4282a0e145f5 | 来源:发表于2017-06-07 14:00 被阅读176次

    原文:Updated: XGBoost with parameter tuning

    整体思路总结:

    1. 导入包
    2. 导入数据
    3. 数据清洗:
      1. 去掉缺失数据过多的变量(标准未给出)
      2. 模拟变量:直接变为整数
      3. 空数据替换为 0
    4. 描述性分析:观察数据特点
      1. 绘制相关图,寻找与 y 强相关变量
      2. 绘制这些变量的相关图
      3. 考虑多重共线性对变量选择的影响
      4. 适可而止(?)
    5. 套用模型并分别检查误差,选取最低的那个(XGBoost)
    6. 最终预测

    作者的话:如果想要获得更高分数,看来必须要使用 XGBoost。这个包很好用,但是我遇到了调参的问题。同时,我的 feature engineering 也貌似太幼稚了。对于不同的分类型变量,我应该一个个检查,而不是直接转换成整数。之后会尝试这些,看看 feature engineering 的奇效。

    1. 读取数据,导入包

    在此之后就是程序主体。主体程序分为四步:

    • 数据清洗
    • 描述性分析
    • 模型选择
    • 最终预测

    2. 数据清洗

    对于数据清洗,重点是有特定的规则,否则会影响结果的准确性。对 training set 总结一下之后,不难发现很多字段都有数据缺失。首先要处理每个变量下的缺失数据。

    在 1460 个变量里,‘Alley’, ‘PoolQC’, ‘Fence’ 和 ‘MiscFeature’ 下的缺失数据极多。因此我决定去掉这些变量。处理之后,有效变量降到了 75 个(不含 id)。

    然后把假/模拟变量变成数字的形式。由于这部分变量非常多,我决定直接通过“as integer”(变整数)的方式处理。这也是在读取数据文件的时候我把字符串作为因素的原因(???)。数字形式的变量按照描述性分析的需求进行了排序。

    最后,对于剩余的空数据,我直接替换成了 0. 到这里数据清洗结束。

    3. 描述性分析

    变量特别多的时候,很难直观从数据集里获得有效信息。所以我主要观察了数字型变量。假/模拟变量的描述性分析主要通过绘制盒图的方式进行的。部分假/模拟变量,比如 ‘Street’,根据盒图的极端情况来看,是无效的。在把假/模拟变量转换为数字变量之前,就已经对数字变量进行排序了。

    首先绘制一个数字变量的相关性图。重点观察与售价强相关的变量。

    ‘OverallQual’,‘TotalBsmtSF’,‘GarageCars’ 和 ‘GarageArea’ 彼此之间有相对较强的相关性。所以作为例子,把这四个变量与售价的相关性图绘制出来。

    看起来售价与其他变量有不错的线性关系。但是,还有一点不能忽略,部分依赖性的变量与其他变量也有线性关系。这里很明显有多重共线性的问题,回归公式的变量非常多的时候需要处理一下。

    我最终放在这里的描述性分析是 ‘YearBu’ 和售价的关系。

    不难发现,随着建造年份,房屋售价整体在上升,趋势很明显。

    探寻数据的工作量巨大,所以我打算就此停住。通过描述性分析可以获得更多的细节。

    模型选择

    采用模型之前,首先需要把 training set 数据分为两部分:training 和 test。我个人喜欢按照 6:4 的比例来分,但是如果有人能告诉我一个科学的分配比例我会非常感激的。我会用 training set 套三个回归模型,然后通过 RMSE 来选最合适的模型。

    Model 1: Linear Regression

    第一个也是最简单但是有用的模型是线性回归模型。第一步,把所有变量放入模型里。

    R Square 结果不错(???),但是很多变量没能通过 Hypothesis Testing。所以模型不够好。如果坚持用这个模型,可能会出现 overfit。所以,在建立模型的过程中需要加入变量选择。我偏好使用 Step AIC 方法。

    仍然有几个变量应该去掉,通过检查 Hypothesis Test 结果,我手动建立了最终的线性回归模型。

    ……代码

    The R Square 结果不错,所有变量都通过了 Hypothesis Test。residual 结果也不错。结果可以看下图。

    用 RMSE 检查线性回归模型的表现:0.1808267

    Model 2: LASSO Regression

    为避免多重共线性,可以使用 LASSO 回归模型。(它)把变量转换为矩阵的格式,可以自动进行变量选择,使用 Lars 包里的 lars 方法就可以。

    因为变量太多了,图很乱。但尽管如此,还是可以用 R 找到多重共线性最低的模型。筛选的步骤是根据 Marrow’s cp 的值来的,这个值能够预测多重共线性。预测结果可以通过脚本最优步骤来完成,RMSE 可以用于评估模型。

    Model 3: Random Forest

    另外还选了一个 Random Forest model。以下语法略。

    Model 4: XGBoost

    这个包真的让我印象深刻!我非常想继续探索这个包。第一步是把数据集转换为稀疏矩阵。

    然后调参,建立了一个 20 层的 for 循环。不清楚这个方法是否可靠不过真的很费时间。

    然后通过随机选择参数。由于过程比较无聊,我就在 RMarkdown 文档里跳过了。用了我本地 R 脚本里的预测和评估后的最优参数。能否问下有没有更好的 smart Kagglers 调参方式?

    最终决定之前应该测试一下模型。

    Final Prediction

    选完参数之后,再用 training 数据集去做一下 training。最终预测之前,test 数据集需要转换成 training set 的形式。

    相关文章

      网友评论

          本文标题:机器学习-XGBoost 及参数调整

          本文链接:https://www.haomeiwen.com/subject/bfoofxtx.html