新手入门赛-(o2o)离线赛实战视频|学习笔记

简介: 快速学习新手入门赛-(o2o)离线赛实战视频

开发者学堂课程【天池大赛算法教程及获奖选手答辩新手入门赛-(o2o)离线赛实战视频】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/389/detail/4995


新手入门赛-(o2o)离线赛实战视频


内容介绍:

一、常见的模型重要参数解释

二、训练集、测试集划分经验

三、常用的模型融合方法

 

一、常见的模型重要参数解释

几种概念的解释

第一个概念是关于机器学习当中集成学习,也有称之为提升方法基本思想。

基本思想是从多个简单模型当中,通过集成,得到一个比较复杂的模型来解决一个问题。

常见的材料总结,其他学习主要有两个主要思路,分别是 bargain 和 boost in。么,个 RF 和 GBDT,其中分别属于这两种思路的实践成果。

第二个概念是机器学习当中模型的偏差和方差。模型的偏差可以理解成对于模型预测精确度的估量

偏差越小,模型预测越精确。模型的方差可以理解为模型的泛化能力,模型预测的稳定性。

不稳定的模型通常表现为在训练集上预测的非常精准,但在测试题上预测的很差,出现了过拟合现象。

1常见的模型重要参数解释:RF

(参sklearn.ensemble.RandomForestClassifier)

n_estimators 随机森林中决策树(子模型)的个数(根据数据规模设定,一般100-10000均可,越大时间开销越高,但可以降低模型整体方差)

criterion 判断节点是否继续分裂采用的计算方法(entropy或gini)

max _features 节点分裂时参与判断的最大特征数(根据特征规模,可设固定值,百分比、sqrt(开方)、log2(对数)等,可以给子模型引入随机性)

max_depth: 最大深度,如果 max_leaf_nodes 参数指定,则忽略此参数(一般6-10,越大子模型偏差越低,方差越高)

min_samples_split: 分裂所需要的最小样本(根据数据规模设定,一般1-100均可,越小越容易过拟合)

min_samples_leaf: 叶结点最小样本数(根据数据规模设定,一般1-100均可,越小于模型越复杂,越容易过拟合)

class_weight: 类别权值(根据实际情况设定,可以用来处理样本类别不均衡)

bootstrap:是否进行有放回采样(一般为 True,可以降低子模型间相关度,降低模型整体方差)

2常见的模型重要参数解释:GBDT

(参sklearn.ensemble.GradientBoostingClassifier)

n_estimators: 同 RF

loss: 模型的损失函数(可选 deviance,和 LR 的损失函数一致,可用于需要概率输出的多分类务;或 exponential,模型等同于二分类 AdaBoost)

learning_rate:学习率,也成为缩减(一般设0.01-0.3都有,越小模型训练时间开销越大,模型偏差越小,方差越大,通常与 n_estimators 联调)

subsample :子采样率(样本采集率,降低子采样率可以降低子模型间相关度,可以降低模型差,但是也会增加模型偏差,所以一般设0.6-1)

max_features :同 RF

max_ depth: 同 RF

min_samples_split :同 RF

min_ samples_ leaf :同 RF

3RF GBDT 的对比

一般情况下,RF 整体模型的训练和调参主要关注降低方差,所以可以设定较少的子模型并适当提高子模型复杂度,并且可以适当降低子模型间的相关度。

而 GBDT 一般情况下主要关注于降低偏差,所以可以设定较多的子模型并适当降低子模型的复杂度,但是降低子模型间的相关度起到的作用则比较小

神器推荐:XGBOOST

XGBOOST。几乎可以在各种国内外的大小竞赛当中看到它的身影。在工业界当中也有广泛的应用。在基于传统机械学习的基础上,在实践过程当中进行了很多的改进。

主要有以下这几个方面。

第一,在函数当中引入了正则项。可以控制模型的复杂度,从而减少过拟合的风险。

第二,模型的分裂会一直分裂到参数设定的最大的深度,再回过头来剪枝。这样的好处是避免一些更深层次的分裂因为一些初期条件不满足被忽略掉。

第三,可以自动处理缺失值,这点是在用 XGBOOST 的时候是直观感受最明显的一点。因为缺失值是很多数据当中都会出现的,过往的做法都是自己进行评估,然后赋予缺失着一个给定的值。但 XGBOOST 是把缺失值也作为一个有意义的值,然后考虑当遇到趋势的时候是否分裂,再决定如何分裂。

第四点,允许自定义优化目标和评价标准。可以使模型更加的灵活。

第五点,支持列采样。借鉴了RF当中,对于特征进行采样的特点。这样不仅可以降低风险,同时也减少了计算量,提高了效率。还有支持并行等一些其他特点。

没有再对 XGBOOST 进行详细的参数解释,一个原因是因为都是树模型,很多参数在之前都有体现。

另外一个原因则是有不错的官方文档,非常全面,包括对于每个参数的解释。推荐大家仔细的研读,在实践过程当中发现 XGBOOST 的强大之处。

XGBOOST 与传统 GBDT 的不同

在代价函数中引入正则项,控制模型复杂度

分裂至最大深度,再剪枝

自动处理缺失值

允许自定义优化目标和评价标准

支持列抽样,不仅可以降低过拟合,还可以提高效率支持并行等等

官方参数文档 

 

二、训练集、测试集划分经验

首先需要讲到一条机器学习当中的重要的原则。就是不管做什么及其学习的任务分类、回归或者是标注,都需要尽可能的来模拟真实的测试环境。

非常重要是因为机器学习的本质就是从数据当中发现规律,我们就必须要保证数据和任务的目标的一致性。

举个例子,通过观测北京人的患肺病的数据能够说明中国人的发病的概率。

因为即使是同为中国人,大多数的外界因素还有环境,比如说雾霾,这种因素也可能会导致北京人的患病几率更高,或者一些其他影响,这都是显而易见的。

将这个例子一般化,就是说如果训练集当中的数据采样有偏差,那么学习得到的模型也一定是有偏差的。这就要求我们必须尽量保证训练集的数据分布和整体的数据分布是基本一致的。这样训练得到的结果才会尽可能的接近真实的情况。

在实际的比赛当中,普及方给我们的训练集和测试几并不都是具有与之分布的。数据如果划分的不好一般情况下都会导致严重的过拟合现象。

因此,正确地理解数据分布,通常是我们拿到赛题之后,第一步要做的事情。同时也是成功的第一步。

机器学习重要原则:模拟真实的测试环境!

如果训练集的数据采样有偏差,学习得到的模型也一定有偏差

若样本整体分布基本一致:常用的随机 K-Fold 的 CV 方法即可

若样本整体分布不一致,如受“时间”影响等

使用随机划分的方法通常会带来极其严重的过拟合

如果数据呈现明显的时间序列特征,可采用滑窗法

 

三、常用的模型融合法

模型融合旨在通过融合多个单模型的结果,降低模型方差

融合基础:多个有差异性的基本模型

常用方法:

线性加权融合

Rank 融合

tacking

Blending

线性加权融合:赋予每个模型一个权重 Weight,然后加权得到最终结果。权值的决定一般遵循较优模型给予较大权值的原则,且所有权重和为1。

∑weighti *resulti

Rank融合:取结果中排名的倒数,加权得到最终结果适合排序评估指标,如 AUC.

∑weighti/ranki

Stacking

训练:将训练数据进行K-Fold划分,训练出K个不同的基础模型,其中每个基础模型对于每个训练样本的预测值作为新的训练集的特征值,在新得到的训练集上再进行第二层训练。

预测:经过所有基础模型的预测形成第二层模型的测试集,再对测试集进行预测。

Blending又称为 stacked ensembling

与 stacking 很类似,区别在于不需要对训练集进行 K-Fold 划分,直接划出一部分训练集数据作为留出集,第一层模型只在留出集上训练。

优点:比 stacking 简单;能防止信息泄露

缺点:只使用了整体数据的一部分;最终的模型可能会对留出集过拟合;相对来说 stacking 更为健壮。

参考:Kaggle ensemble guide

Blending 实战—— O2O 优惠券使用预测

1.将训练集划分为两份,Dataset_1 和 Dataset_2。

2. 基于 Dataset_1训练了12个不同模型。

3. 将第一层模型在 Dataset2 的特征上预测的结果作为第二层模型的新的特征,标签不变,训练第二层模型 XGBOOST。

4. 基于这两层模型做最终的测试集预测。

 image.png

常用的模型融合方法

机器学习重要原则:No Free Lunch!

模型融合多数时候是有效的。

但并非越复杂的模型融合方法带来的结果一定越好,实践过程中最好的方法还是多尝试,多思考。

相关文章
|
关系型数据库 MySQL 网络安全
|
缓存 前端开发 JavaScript
flask各种版本的项目,终端命令运行方式的实现
flask各种版本的项目,终端命令运行方式的实现
715 4
github项目文件大小查看方法
github项目文件大小查看方法
3059 1
github项目文件大小查看方法
|
Linux
finalshell编码问题
finalshell编码问题
179 0
|
数据挖掘 大数据 API
Polars实践(1):阿里天池——淘宝用户购物行为分析
Polars实践(1):阿里天池——淘宝用户购物行为分析
642 0
|
9月前
|
Python
变量名能用中文吗_汉语拼音变量名_蛇形命名法_驼峰命名法
本文探讨了变量命名规范,包括汉语拼音、中文和英文变量名的使用。主要内容如下: 1. **回顾上次内容**:介绍了命名法(如大驼峰、小驼峰、蛇形命名法)。 2. **Python命名规范**:常量用全大写加下划线(如`MATH_PI`),类名和类型名用大驼峰(如`MyClass`),异常名也用大驼峰(如`NameError`)。 3. **拼音变量名**:虽然可以使用拼音缩写或全拼,但易读性较差,建议避免。 4. **中文变量名**:Python 3 支持中文作为变量名,但不推荐广泛使用,因其不利于国际合作。
423 5
|
存储 弹性计算 前端开发
阿里云服务领域Agent智能体:从概念到落地的思考、设计与实践
本文讲述了作者团队在阿里云的服务领域Agent是如何设计与实践的,以及到目前为止的一些阶段性成果,作者做出了总结和整理。
|
12月前
|
数据可视化 数据挖掘 定位技术
MATLAB数据可视化
【10月更文挑战第8天】本文详细介绍了MATLAB中的数据可视化功能,涵盖基本绘图、特定绘图类型(如三维绘图、极坐标图)、高级图形功能(如自定义图形属性、子图、交互式图形、动画与动态可视化)以及地理数据可视化工具箱等内容。同时,文章还提供了性能优化建议,帮助用户在处理大型数据集时提升绘图效率。
|
编译器 Linux C语言
[Eigen中文文档] 从入门开始...
这是一个非常简短的Eigen入门文章。该文章有两层目的。对于想要尽快开始编码的人来说,该文章是对Eigen库的最简单介绍。你可以把该文章作为教程的第一部分,这更加详细的解释了Eigen库。看完这个教程后可以继续阅读 The Matrix class教程。
969 0