员工离职预测

集成学习的主要思想是将多个弱分类器按照某种方式组合起来,形成一个强分类器。目前集成学习可分为三种类型,分别是Bagging,Boosting,Stacking。

  • Bagging,把数据集通过有放回的抽样方式,划分为多个数据集,分别训练多个模型。针对分类问题,按照少数服从多数原则进行投票,针对回归问题,求多个测试结果的平均值。

  • Boosting,与Bagging一样,使用的相同的弱学习器,不同的是以自适应的方法顺序地学习这些弱学习器,即每个新学习器都依赖于前面的模型,并按照某种确定性的策略将它们组合起来。

  • Stacking,通常是不同的模型,而且每个分类都用了全部训练数据,得到预测结果y1, y2, ..., yk,然后再训练一个分类器 Meta Classifier,将这些预测结果作为输入,得到最终的预测结果。

Boosting与Bagging的区别

  • Bagging是基分类器并行处理,而Boosting是串行处理。

  • Bagging的基分类器训练是独立的,而Boosting的训练集是依赖于之前的模型。

  • Bagging的作用是减少variance,而Boosting在于减少bias。

  • 对于Bagging,对样本进行重采样,通过重采样得到的子样本集训练模型,最后取平均。因为子样本集的相似性,而且使用相同的弱学习器,因此每个学习器有近似相等的bias和variance,因为每个学习器相互独立,所以可以显著降低variance,但是无法降低bias。

  • 对于Boosting,采用顺序的方式最小化损失函数,所以bias自然是逐步下降,子模型之和不能显著降低variance。

两类重要的 Boosting 算法

AdaBoost(自适应提升)和Gradient Boosting(梯度提升)

  • AdaBoost,使用前面的学习器用简单的模型去适配数据,分析错误,然后会给予错误预测的数据更高权重,最后用后面的学习器去修复。

  • Gradient Boosting,包含XGBoost, LightGBM, CatBoost, NGBoost,实际上是对GBDT方法的不同实现,针对同一目标,做了不同的优化处理。

AdaBoost

AdaBoost既可以做分类,也可以做回归。Boosting算法的工作机制是首先从训练集用初始权重训练出一个弱学习器,根据弱学习的学习误差率表现来更新训练样本的权重,使得之前弱学习器学习误差率高的训练样本在后面的弱学习器中得到更大权重。然后基于调整权重后的训练集来训练后面的弱学习器,直到弱学习器数达到事先指定的数目,最终将这N个弱学习器通过集合策略进行整合,得到最终的强学习器。不足之处在于,对异常样本敏感,异常样本在迭代中可能会获得较高的权重,影响最终的强学习器的预测准确性。

XGBoost

  1. 目标函数

    目标函数=损失函数 + 正则化项,损失函数尽量拟合训练数据,正则化项鼓励简单的模型,用于控制树的复杂度,防止过拟合,使得模型更简化,也使得最终的模型的预测结果更稳定。

  1. XGBoost的分裂节点算法

采用近似算法(Histogram 2016 paper),对于连续型特征值,样本数量非常大,该特征取值过多时,遍历所有取值会花费很多时间,且容易过拟合。那么XGBoost在寻找split节点的时候,不会枚举所有的特征值,而会对特征值进行聚合统计,然后形成若干个bucket,只将bucket边界上的特征值作为split节点的候选,从而获得性能提升。从算法伪代码中该流程还可以分为两种,全局的近似是在新生成一棵树之前就对各个特征计算分位点并划分样本,之后在每次分裂过程中都采用近似划分;而局部近似就是在具体的某一次分裂节点的过程中采用近似算法。

  1. XGBoost算法特点

  • XGBoost将树模型的复杂度加入到正则项中,从而避免过拟合,泛化性能好;

  • 损失函数是用泰勒展开式展开的,用到了一阶导和二阶导,可以加快优化速度;

  • 在寻找最佳分割点时,采用近似贪心算法,用来加速计算;不仅支持CART作为基分类器,还支持线性分类器,在使用线性分类器的时候可以使用L1,L2正则化;

  • 支持并行计算,XGBoost的并行是基于特征计算的并行,将特征列排序后以block的形式存储在内存中,在后面的迭代中重复使用这个结构。在进行节点分裂时,计算每个特征的增益,选择增益最大的特征作为分割节点,各个特征的增益计算可以使用多线程并行;

  • 优点:速度快、效果好、能处理大规模数据、支持自定义损失函数等;

  • 缺点:算法参数过多,调参复杂,不适合处理超高维特征数据;

模型参数

  1. 通用参数

  • booster,模型选择,gbtree或者gblinear。gbtree使用基于树的模型进行提升计算,gblinear使用线性模型进行提升计算。[default=gbtree];

  • silent,缄默方式,0表示打印运行时,1表示以缄默方式运行,不打印运行时信息。[default=0];

  • nthread,XGBoost运行时的线程数,[default=缺省值是当前系统可以获得的最大线程数];

  • num_feature,boosting过程中用到的特征个数,XGBoost会自动设置;

  1. Booster参数

  • eta [default=0.3],为了防止过拟合,更新过程中用到的收缩步长。在每次提升计算之后,算法会直接获得新特征的权重。eta通过缩减特征的权重使提升计算过程更加保守,取值范围为[0,1];

  • gamma [default=0],分裂节点时,损失函数减小值只有大于等于gamma节点才分裂,gamma值越大,算法越保守,越不容易过拟合,但性能就不一定能保证,需要trade off,取值范围 [0,∞];

  • max_depth [default=6] ,树的最大深度,取值范围为[1,∞],典型值为3-10;

  • min_child_weight [default=1],一个子集的所有观察值的最小权重和。如果新分裂的节点的样本权重和小于min_child_weight则停止分裂 。这个可以用来减少过拟合,但是也不能太高,会导致欠拟合,取值范围为[0,∞];

  • subsample [default=1],构建每棵树对样本的采样率,如果设置成0.5,XGBoost会随机选择50%的样本作为训练集;

  • colsample_bytree [default=1],列采样率,也就是特征采样率;

  • lambda [default=1, alias: reg_lambda],L2正则化,用来控制XGBoost的正则化部分;

  • alpha [default=0, alias: reg_alpha],L1正则化,增加该值会让模型更加收敛;

  • scale_pos_weight [default=1],在类别高度不平衡的情况下,将参数设置大于0,可以加快收敛;

  1. 学习目标参数

  • objective [ default=reg:linear ],定义学习目标,reg:linear,reg:logistic,binary:logistic,binary:logitraw,count:poisson,multi:softmax,multi:softprob,rank:pairwise;

  • eval_metric,评价指标,包括rmse,logloss,error,merror,mlogloss,auc,ndcg,map等;seed[ default=0 ],随机数的种子;dtrain,训练的数据;

  • num_boost_round,提升迭代的次数,也就是生成多少基模型;

  • early_stopping_rounds,早停法迭代次数;evals:这是一个列表,用于对训练过程中进行评估列表中的元素。形式是evals = [(dtrain,'train'),(dval,'val')]或者是evals = [(dtrain,'train')],对于第一种情况,它使得我们可以在训练过程中观察验证集的效果;

  • verbose_eval ,如果为True,则对evals中元素的评估输出在结果中;如果输入数字,比如5,则每隔5个迭代输出一次;

  • learning_rates:每一次提升的学习率的列表;

员工离职预测

kaggle比赛链接:

https://www.kaggle.com/c/bi-attrition-predict/

我们有员工的各种统计信息,以及该员工是否已经离职,统计的信息包括了(工资、出差、工作环境满意度、工作投入度、是否加班、是否升职、工资提升比例等);现在需要你来通过训练数据得出 员工离职预测,并给出你在测试集上的预测结果。我们将给出课程上公开的榜单。

关注公众号,回复“离职”,获取数据及代码。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值