天池-贷款违约挑战赛(四)-建模与调参

目录

  • 学习目标
  • 学习内容
    • 1. 逻辑回归
    • 2. 决策树模型
    • 3. 集成模型
      • 3.1 GBDT模型
      • 3.2 XGBoost模型
      • 3.3 LightGBM模型
      • 3.4 Catboost模型
    • 4. 模型对比
      • 4.1 逻辑回归
      • 4.2 决策树模型
      • 4.3 集成模型
    • 5. 数据集划分方法

学习目标

由于本次比赛使用机器学习,本人之前的方向一直是深度学习和强化学习,对机器学习数据挖掘与分析特征工程了解的不多,因此本次学习目标是扫盲常用机器学习模型。

文中有很多大佬博客链接,大佬链接中还有很多参考链接,(禁止套娃!),很多我自己还没理解透彻的东西就不往上搬了,直接放个传送门也方便自己以后继续学习,也相当于是给大家归纳一下大佬博客链接哈哈哈哈


学习内容

  1. 逻辑回归模型
  2. 树模型
  3. 集成模型
  4. 模型对比
  5. 数据集划分方法

下面进入正题,由于是扫盲,内容会比较简单,随着以后的学习会不断记录有深度的机器学习内容


1. 逻辑回归

关于逻辑回归的数学推导,可以看一下大佬的这篇博客,讲的很详细

  • 机器学习系列(1)_逻辑回归初步

这里的精髓被大佬总结了

1、逻辑回归始于输出结果为有实际意义的连续值的线性回归,但是线性回归对于分类的问题没有办法准确而又具备鲁棒性地分割,因此我们设计出了逻辑回归这样一个算法,它的输出结果表征了某个样本属于某类别的概率。

2、逻辑回归的成功之处在于,将原本输出结果非常大的范围通过sigmoid函数映射到(0,1),从而完成概率的估测。而直观地在二维空间理解逻辑回归,是sigmoid函数的特性,使得判定的阈值能够映射为平面的一条判定边界,当然随着特征的复杂化,判定边界可能是多种多样的样貌,但是它能够较好地把两类样本点分隔开,解决分类问题。

3、 求解逻辑回归参数的传统方法是梯度下降,构造为凸函数的代价函数后,每次沿着偏导方向(下降速度最快方向)迈进一小部分,直至N次迭代后到达最低点。

下面我就简单说一下自己理解,逻辑回归就是梯度下降不断拟合复杂函数的边界,拟合线性回归拟合不了的高维函数。


线性回归使用的代价函数本质是MSE形式,就是取预测值与真实值差的平方,再做一个样本平均。逻辑回归的代价函数采用交叉熵的形式。

通过代价函数计算出梯度,再用梯度更新网络参数,这就是梯度下降法更新参数的方法。


2. 决策树模型

决策树的思维和人脑很像,就像是在读相亲手册。比如喜欢男生请翻至第二页喜欢女生请翻至第三十页,翻到第二页后又有选项喜欢18-25岁请翻至第五页喜欢25-30岁请翻至第十页,等等。这就是一个不断做选择的过程,最后经历完所有的选择会得到一个结果,获得结果以后回头看,自己从最开始的起点其实只做了一条线的决策,如果把所有的线都遍历完,那么就形成了一个像下面这样的一个树。

天池-贷款违约挑战赛(四)-建模与调参_第1张图片
决策树的构建、可视化、完成分类任务、存储和使用sklearn中的决策树代码可以看这篇大佬的博客

  • 《机器学习实战》学习笔记(二):决策树基础篇之让我们从相亲说起

下面这篇是大佬的进阶篇,第一篇理解后再来看第二篇。

  • 《机器学习实战》学习笔记(三):决策树实战篇之为自己配个隐形眼镜

3. 集成模型

集成学习是打数据分析比赛最常用的方法之一,我也是刚开始学,如果要增加比赛经验和团队参与度的haul,集成模型应该好好看一下。

集成学习,就是指构建多个弱分类器对数据集进行预测,然后用某种策略将多个分类器预测的结果集成起来,作为最终预测结果

集成算法分为分为两种,baggingboosting,顾名思义,bag的意思是打包,包与包之间是独立的,我们选最好的那个包;boost的意思是提升,就好像打游戏在不断升级,每一级的战斗力都要比之前高,这样当前的模型就与以前的模型建立了联系。

现在打比赛常用的模型比如XGBoost、LightGBM都属于boosting流派。
本小节会给四篇大佬级博客,分别对应四种最常用的集成学习模型

3.1 GBDT模型

  • 机器学习大杀器——梯度提升树GBDT

代个人感觉上面这篇知乎专栏有点晦涩,下面一篇博客里涉及到Adaboost的概念,可以看一下

  • 白话机器学习算法理论+实战之AdaBoost算法

3.2 XGBoost模型

  • 白话机器学习算法理论+实战番外篇之Xgboost
    文后有参考文献连接
    里面也有对Adaboosting和GBDT的简单介绍

AdaBoost,是英文"Adaptive Boosting"(自适应增强),它的自适应在于:前一个基本分类器分错的样本会得到加强,加权后的全体样本再次被用来训练下一个基本分类器。同时,在每一轮中加入一个新的弱分类器,直到达到某个预定的足够小的错误率或达到预先指定的最大迭代次数。

AdaBoost训练弱分类器关注的是那些被分错的样本,AdaBoost每一次训练都是为了减少错误分类的样本。 而GBDT训练弱分类器关注的是残差,也就是上一个弱分类器的表现与完美答案之间的差距,GBDT每一次训练分类器,都是为了减少这个差距

事实上,如果不考虑工程实现、解决问题上的一些差异,xgboostGDBT比较大的不同就是目标函数的定义,但这俩在策略上是类似的,都是聚焦残差(更准确的说, xgboost其实是gbdt算法在工程上的一种实现方式),GBDT旨在通过不断加入新的树最快速度降低残差,而XGBoost则可以人为定义损失函数(可以是最小平方差、logistic loss function、hinge loss function或者人为定义的loss function),只需要知道该loss function对参数的一阶、二阶导数便可以进行boosting,其进一步增大了模型的泛化能力,其贪婪法寻找添加树的结构以及loss function中的损失函数与正则项等一系列策略也使得XGBoost预测更准确。

小总结:
Adaboost、GBDT、xgboost同属于boosting流派,但是Adaboost关注错误样本,后二者关注结果与标签的残差。GBDT通过不断加入新的决策树想在残差减少最快的方向上建立一个新的模型。xgboost对于某个样本的预测结果就是多个弱分类器的预测结果相加,没有权重。

如果想看XGBoost模型和LightGBM模型数学公式推导的话,可以看看datawhale这篇文章

  • XGBoost 和 LightGBM公式推导

其实我看到这里的时候也是囫囵吞枣,只知道个大体意思,脑袋有点蒙,这种算法光看别人的解析就跟吃别人嚼过的馒头一样,虽然好消化,但是不知道本来的滋味是什么,这里就先把链接放上,如果你跟我一样想以后慢慢看就可以收藏一下,等有时间再慢慢啃原文

  • xgboost 论文原文

3.3 LightGBM模型

  • 白话机器学习算法理论+实战番外篇之LightGBM
    文后有参考文献连接

LightGBM在xgboost的基础上进行了很多的优化, 可以看成是XGBoost的升级加强版,它延续了xgboost的那一套集成学习的方式,但是它更加关注模型的训练速度,相对于xgboost, 具有训练速度快和内存占用率低的特点。

  • LightGBM 论文原文

3.4 Catboost模型

  • 深入理解CatBoost
    文后有参考文献连接

想看书的同学可以参考以下几本
  • 周志华–西瓜书《机器学习》
  • 李航–统计学习方法
  • Feature Engineering for Machine Learning Models

4. 模型对比

4.1 逻辑回归

  1. 优点
    a. 训练速度较快,分类的时候,计算量仅仅只和特征的数目相关;
    b. 简单易理解,模型的可解释性非常好,从特征的权重可以看到不同的特征对最后结果的影响;
    c. 适合二分类问题,不需要缩放输入特征;
    d. 内存资源占用小,只需要存储各个维度的特征值

  2. 缺点
    a. 逻辑回归需要预先处理缺失值和异常值【可参考task3特征工程】;
    b. 不能用Logistic回归去解决非线性问题,因为Logistic的决策面是线性的;
    c. 对多重共线性数据较为敏感,且很难处理数据不平衡的问题;
    d. 准确率并不是很高,因为形式非常简单,很难去拟合数据的真实分布

4.2 决策树模型

  1. 优点
    a. 简单直观,生成的决策树可以可视化展示
    b. 数据不需要预处理,不需要归一化,不需要处理缺失数据
    c. 既可以处理离散值,也可以处理连续值

  2. 缺点
    a. 决策树算法非常容易过拟合,导致泛化能力不强(可进行适当的剪枝)
    b. 采用的是贪心算法,容易得到局部最优解

4.3 集成模型

通过组合多个学习器来完成学习任务,通过集成方法,可以将多个弱学习器组合成一个强分类器,因此集成学习的泛化能力一般比单一分类器要好。

集成方法主要包括BaggingBoosting,Bagging和Boosting都是将已有的分类或回归算法通过一定方式组合起来,形成一个更加强大的分类。两种方法都是把若干个分类器整合为一个分类器的方法,只是整合的方式不一样,最终得到不一样的效果。常见的基于Bagging思想的集成模型有:随机森林、基于Boosting思想的集成模型有:Adaboost、GBDT、XGBoost、LightGBM等。

Baggin和Boosting的区别总结如下:

  1. 样本选择上: Bagging方法的训练集是从原始集中有放回的选取,所以从原始集中选出的各轮训练集之间是独立的;而Boosting方法需要每一轮的训练集不变,只是训练集中每个样本在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整
  2. 样例权重上: Bagging方法使用均匀取样,所以每个样本的权重相等;而Boosting方法根据错误率不断调整样本的权值,错误率越大则权重越大
  3. 预测函数上: Bagging方法中所有预测函数的权重相等;而Boosting方法中每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重
  4. 并行计算上: Bagging方法中各个预测函数可以并行生成;而Boosting方法各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果。

5. 数据集划分方法

对于数据集的划分,我们通常要保证满足以下两个条件:

  1. 训练集和测试集的分布要与样本真实分布一致,即训练集和测试集都要保证是从样本真实分布中独立同分布
    采样而得;
  2. 训练集和测试集要互斥

对于数据集的划分有三种方法:留出法,交叉验证法和自助法,下面挨个介绍:

  1. ①留出法
    留出法是直接将数据集D划分为两个互斥的集合,其中一个集合作为训练集S,另一个作为测试集T。需要注意的是在划分的时候要尽可能保证数据分布的一致性,即避免因数据划分过程引入额外的偏差而对最终结果产生影响。为了保证数据分布的一致性,通常我们采用分层采样的方式来对数据进行采样。
    Tips: 通常,会将数据集D中大约2/3~4/5的样本作为训练集,其余的作为测试集。

  2. ②交叉验证法
    k折交叉验证通常将数据集D分为k份,其中k-1份作为训练集,剩余的一份作为测试集,这样就可以获得k组训练/测试集,可以进行k次训练与测试,最终返回的是k个测试结果的均值。交叉验证中数据集的划分依然是依据分层采样的方式来进行。对于交叉验证法,其k值的选取往往决定了评估结果的稳定性和保真性,通常k值选取10。当k=1的时候,我们称之为留一法

  3. ③自助法
    我们每次从数据集D中取一个样本作为训练集中的元素,然后把该样本放回,重复该行为m次,这样我们就可以得到大小为m的训练集,在这里面有的样本重复出现,有的样本则没有出现过,我们把那些没有出现过的样本作为测试集。
    进行这样采样的原因是因为在D中约有36.8%的数据没有在训练集中出现过。留出法与交叉验证法都是使用分层采样的方式进行数据采样与划分,而自助法则是使用有放回重复采样的方式进行数据采样

数据集划分总结

  1. 对于数据量充足的时候,通常采用留出法或者k折交叉验证法来进行训练/测试集的划分;
  2. 对于数据集小且难以有效划分训练/测试集时使用自助法;
  3. 对于数据集小且可有效划分的时候最好使用留一法来进行划分,因为这种方法最为准确

你可能感兴趣的:(天池-贷款违约,决策树,python,神经网络,机器学习,数据挖掘)