机器学习神器
# 1/2预测全家桶
# Project A:员工离职预测
https://www.kaggle.com/c/bi-attrition-predict/ (opens new window)
- 我们有员工的各种统计信息,以及该员工是否已经离职,统计的信息包括了(工资、出差、工作环境满意度、工作投入度、是否加班、是否升职、工资提升比例等)
- 现在需要你来通过训练数据得出 员工离职预测,并给出你在测试集上的预测结果。 我们将给出课程上公开的榜单
数据表字段:


# 预测全家桶
常用预测(分类,回归)模型:
- 分类算法:LR, SVM,KNN
- 树模型:GBDT, XGBoost,LightGBM,CatBoost,NGBoost
特征工程:好的特征工程是拿分的关键
模型:懂原理,会调参
# 常用预测模型
- 数据预处理
- 分类算法:LR, SVM,KNN
- 树模型:GBDT, XGBoost,LightGBM,CatBoost,NGBoost
# ProjectB:男女声音识别
数据集:3168个录制的声音样本(来自男性和女性演讲者),采集的频率范围是0hz-280hz,已经对数据进行了预处理
一共有21个属性值,请判断该声音是男还是女?
使用Accuracy作为评价标准

Step1,数据加载
Step2,数据预处理
分离特征X和Target y
使用标签编码,male-> 1, female-> 0
将特征X矩阵进行规范化
#标准差标准化,处理后的数据符合标准正态分布
scaler = StandardScaler()Step3,数据集切分,train_test_split
Step4,模型训练
SVM,Linear SVMStep5,模型预测
# 总结
每种模型都有适用的场景
LR优点:
- 实现简单,广泛的应用于工业问题上;
- 分类时计算量非常小,速度很快,使用资源低;
- 方便观测样本概率分数;
LR缺点:
- 当特征空间很大时,LR的性能不是很好;
- 容易欠拟合,准确度不太高;
- 不能很好地处理大量多类特征或变量;
- 通常只处理二分类问题,多分类需要使用softmax(LR在多分类的推广),且必须线性可分;
- 对于非线性特征,需要进行转换;
SVM优点:
- 可以解决高维问题,即大型特征空间;
- 能够处理非线性特征的相互作用;
- 需要先对数据进行归一化,因为计算是基于距离的模型,所以SVM和LR都需要对数据进行归一化处理
SVM缺点:
- 当样本很多时,效率并不是很高;
- 对非线性问题没有通用解决方案,可能会很难找到合适核函数
- 对缺失数据敏感;
SVM核的选择是有技巧的,样本数量<特征数,线性核,大于特征数使用非线性核
- 可以使用LR模型作为预测的Baseline
- FM衍生模型在推荐系统,尤其是CTR预估中有广泛应用,弥补了LR模型的不足(需要人工组合特征,耗费大量时间和人力)
- Attention机制,对于Diversity多样性的情况,Attention机制可以提升效率,并且得出更好的结果
- Tree Ensemble模型,比如GBDT,使用广泛,因为训练模型更可控
对于LR模型,如果欠拟合,需要增加feature,才能提高准确率。而对于tree-ensemble来说,解决方法是训练更多的决策树tree。Kaggle比赛中使用很多
常用预测模型:
- 分类算法:LR, SVM,KNN
- 矩阵分解:FunkSVD,BiasSVD,SVD++
- FM模型:FM, FFM,DeepFM, NFM,AFM
- 树模型:GBDT, XGBoost,LightGBM,CatBoost,NGBoost
- Attention模型:DIN, DIEN, DSIN
# 2/2机器学习神器
# 什么是集成学习
思想,将多个弱分类器按照某种方式组合起来,形成一个强分类器(三个臭皮匠赛过诸葛亮)
- Bagging,把数据集通过有放回的抽样方式,划分为多个数据集,分别训练多个模型。针对分类问题,按照少数服从多数原则进行投票,针对回归问题,求多个测试结果的平均值
- Stacking,通常是不同的模型,而且每个分类都用了全部训练数据,得到预测结果y1, y2, ..., yk,然后再训练一个分类器Meta Classifier,将这些预测结果作为输入,得到最终的预测结果
- Boosting,与Bagging一样,使用的相同的弱学习器,不过是以自适应的方法顺序地学习这些弱学习器,即每个新学习器都依赖于前面的模型,并按照某种确定性的策略将它们组合起来
- 两个重要的Boosting算法:AdaBoost(自适应提升)和GradientBoosting(梯度提升)
- AdaBoost,使用前面的学习器用简单的模型去适配数据,然后分析错误。然后会给予错误预测的数据更高权重,然后用后面的学习器去修复
- Boosting通过把一些列的弱学习器串起来,组成一个强学习器
# Boosting与Bagging:
- 结构上,Bagging是基分类器并行处理,而Boosting是串行处理
- 训练集,Bagging的基分类器训练是独立的,而Boosting的训练集是依赖于之前的模型
- 作用,Bagging的作用是减少variance,而Boosting在于减少bias
对于Bagging,对样本进行重采样,通过重采样得到的子样本集训练模型,最后取平均。因为子样本集的相似性,而且使用相同的弱学习器,因此每个学习器有近似相等的bias和variance,因为每个学习 器相互独立,所以可以显著降低variance,但是无法降低bias
对于Boosting,采用顺序的方式最小化损失函数,所以bias自然是逐步下降,子模型之和不能显著降低variance
# XGBoost算法特点:
- XGBoost将树模型的复杂度加入到正则项中,从而避免过拟合,泛化性能好
- 损失函数是用泰勒展开式展开的,用到了一阶导和二阶导,可以加快优化速度
- 在寻找最佳分割点时,采用近似贪心算法,用来加速计算
- 不仅支持CART作为基分类器,还支持线性分类器,在使用线性分类器的时候可以使用L1,L2正则化
- 支持并行计算,XGBoost的并行是基于特征计算的并行,将特征列排序后以block的形式存储在内存中,在后面的迭代中重复使用这个结构。在进行节点分裂时,计算每个特征的增益,选择增益最大的特征作为分割节点,各个特征的增益计算可以使用多线程并行
- 优点:速度快、效果好、能处理大规模数据、支持自定义损失函数等
- 缺点:算法参数过多,调参复杂,不适合处理超高维特征数据
# LightGBM
- 常用的机器学习算法,例如神经网络等算法,都可以以mini-batch的方式训练,训练数据的大小不会受到内存限制
- GBDT在每一次迭代的时候,都需要遍历整个训练数据多次。如果把整个训练数据装进内存则会限制训练数据的大小;如果不装进内存,反复地读写训练数据又会消耗非常大的时间。对于工业级海量的数据,普通的GBDT算法是不能满足其需求的
- LightGBM的提出是为了解决GBDT在海量数据遇到的问题,让GBDT可以更好更快地用于工业场景
LightGBM与XGBoost:
- 模型精度:两个模型相当
- 训练速度:LightGBM训练速度更快=> 1/10
- 内存消耗:LightGBM占用内存更小=> 1/6
- 特征缺失值:两个模型都可以自动处理特征缺失值
- 分类特征:XGBoost不支持类别特征,需要对其进行OneHot编码,而LightGBM支持分类特征
# CatBoost
- 俄罗斯科技公司Yandex开源的机器学习库(2017年)
- https://arxiv.org/pdf/1706.09516.pdf
- CatBoost= Catgorical+ Boost
- 高效的处理分类特征(categorical features),首先对分类特征做统计,计算某个分类特征(category)出现的频率,然后加上超参数,生成新的数值型特征(numerical features)
- 同时使用组合类别特征,丰富了特征维度
- 采用的基模型是对称决策树,算法的参数少、支持分类变量,通过可以防止过拟合
# 总结
- LighGBM效率高,在Kaggle比赛中应用多
- CatBoost对于分类特征多的数据,可以高效的处理,过拟合程度小,效果好
- XGBoost, LightGBM, CatBoost参数较多,调参需要花大量时间
- Boosting集成学习包括AdaBoosting和Gradient Boosting
- Boosting只是集成学习中的一种(Bagging, Stacking)
# 如何防止模型过拟合
# 在模型层面进行优化
正则化技术:
树模型:调整max_depth(建议5-8)、min_samples_leaf(建议10-20,代表每个叶子节点至少包含的样本数)
神经网络:添加dropout层(0.2-0.5) + L2正则化
线性模型:增大L1/L2正则化系数早停机制: 监控验证集loss,设置patience=10-20个epoch,patience代表允许验证集损失validation loss连续不改善的轮次(epochs)数量
集成方法:
使用Blending(用70%训练基模型,30%训练元模型)
# Blending集成学习方法
Blending是一种分层集成学习技术,通过以下两步组合多个模型:
- 基模型(Base Models):用训练集的70%训练多个不同模型(如随机森林、XGBoost、神经网络等)。
- 元模型(Meta Model):用剩下的30%数据生成基模型的预测结果作为新特征,训练一个次级模型(通常为线性模型)进行最终预测。
神经网络是一种受人脑神经元结构启发的机器学习模型。核心思想是通过大量“神经元”节点的层层连接和非线性变换,自动学习输入特征与输出目标之间的复杂映射关系。