【ACE成长记第4期】美女程序员分享:机器学习之数据预处理到特征构建模型训练

本文涉及的产品
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 本期由阿里云MVP&优秀ACE(阿里云开发者社群) 郭翔云 为大家分享机器学习之从数据预处理到特征构建谈天池工业AI竞赛模型训练。通过天池工业AI竞赛示例,演示从数据观察到特征构建,再到模型训练验证评估的一个机器学习的完整流程。

本期由阿里云MVP&优秀ACE(阿里云开发者社群) 郭翔云 为大家分享机器学习之从数据预处理到特征构建谈天池工业AI竞赛模型训练。通过天池工业AI竞赛示例,演示从数据观察到特征构建,再到模型训练验证评估的一个机器学习的完整流程。
视频:https://yq.aliyun.com/live/597
_

分享分为三部分:

  • 基于天池工业AI大赛-智能制造质量预测的赛题进行示例分析;
    1.1赛题与数据理解

1.2数据预处理
1.3特征构建
1.4模型与参数选择

  • 个人经验总结;
  • 个人推荐。

一、赛题分析
1.1赛题与数据理解
2
赛题示例分析选取的是阿里云天池大数据竞赛平台上的天池工业AI大赛-智能制造质量预测赛题。

3
首先我们来看赛题分析。
本次比赛提供了生产线上不同工序的参数数据。通过这些参数特征设计模型,预测与之对应的特性数值。
赛题的难点在于生产过程复杂,参数众多,存在空值和异常值。
赛题的价值在于通过建立算法模型,希望能够提前发现当前工序中所存在的问题,避免问题流入到后道工序,减少生产资源浪费,优化产品良率。
评测指标选取的是MSE,MSE的值越小代表预测结果越好。
4

在我们拿到数据的时候,首先要对数据进行观察,通过观察,可以发现数据包含以下特点:
特点1,数据包含ID列、工具列、参数列,训练集包含目标列。
特点2,参数列和目标列经过脱敏处理,无法得知其物理意义。
比如我们来看下面的数据示例,我们会发现参数列的名称为210X1、210X2等,是经过脱敏处理的,也就是说我们无法从业务角度进行考虑。

5
特点3,通过观察时间,发现参数列并不是从左到右依次产生的。
比如我们来看下面的数据示例,我们会发现下面的5列参数列的发生顺序依次是5、4、1、3、2.

6
特点4,部分参数列存在缺失值、单一值和重复列情况。我们可以看下面的数据示例。

7
特点5,一道工序内,机台的种类直接影响了多个参数列的数据分布。
我们来看下面的数据示例。我们可以发现后面的参数列明显受到前面TOOL列的影响,比如参数210X1,在工具M下数值为101左右,在工具N下数值为89左右,而在工具O下数值为98左右。

8
特点6,部分参数列中的缺失值被机器自动以0或其他异常值进行填充,上述现象存在于同工序下的多个工具中。我们可以看下面的数据示例。

1.2 数据与处理
9
基于上面总结的6个数据特点,我进行了以下数据预处理操作。

10
1、将数据集依照工序列分割为不同的工序单元。
大部分工序列都是以Tool开头的,但是也有几列比较特殊的,比如Chamer ID、OPERATION ID和Chamber列。我们来看一下该如何处理。

11
通过观察,可以发现Chamber ID后面的数据,同时受到TOOL1和Chamber ID的影响,因此把TOOL1和Chamber ID合并作为工具列。
而对于OPERATION ID和Chamber列,后面的数据仅受此列数据的影响,因此把它们看做独立的工序列。

12
2、对数据列的初步清理,先后删除空值占全列40%以上的列、方差为0的列和重复列。
3、对日期列的处理。对于8位、14位、16位的日期数据,因为数据是2016年以后的数据,因此把日期列转为2016年1月1日以来所经历的秒数。

13
5、对各列的0值和NA值,填充工具内内非零非NA元素的平均值。

1.3 特征构建
14
在工业生产中,每一项参数都有标准值,我们该如何评价实际参数的好坏呢?
以冰箱这种典型工业产品为例,我们当然是希望冰箱的温度控制越精确越好,能耗越低越好。

15
基于以上思考,我们可以总结出两种评价参数好坏的方式。1、与标准值的差值,也就是所谓的能耗越低越好。2、相对标准值差值的绝对量,也就是温度控制越精确越好。
在这种思路下,除了原值以外,我又建立了两类额外特征备选。
将组内平均值看做标准值。特征1,与标准值的差,看作偏差值err。特征2,与标准值的差的绝对值,看作偏离量errabs。

16
进一步地,两列交互能否作为特征呢?比如时间列,单一的时间戳是无意义的,那么两列时间戳之差就有可能表示某道工序所耗费的时间,可以作为一列新特征。
同样的,既然差我们可以做,那么和差积商我们是不是都可以尝试。

17
因此,对于双因子,我构建了加减乘除反除5个备选特征,将这些因子当做新的独立的因子,像单因子一样考虑原值、偏差值和偏离量。

18
我们来看特征构建的流程。
1、计算单因子和双因子交互列并纳入备选特征。
对于单因子X,建立原始值X,X与组内平均值的偏差值X_err,X与组内平均值的偏差绝对量X_errabs。
对于双因子X和Y。计算X和Y的和差积商反除,同时建立上述五列值的样本值与组内平均值的偏差值err,平均值的偏差绝对量errabs。

19
那么单双因子备选特征具体是怎么计算的呢?
我们首先看单因子备选特征。以210X1为例,假设数据仅包含如下12行,对于工具M,我们计算210X1的平均值为101.6375,原始值与平均值的差为210X1_err,差的绝对值为210X1_errabs。工具N、O也是一样的计算方式。我们将210X1、210X1_err和210X1_errabs作为备选特征。

20
对于双因子备选特征。我们以210X1乘210X2为例,假设数据仅包含以下12行。对于工具M,先分别计算210X1乘210X2,对乘法结果计算均值mean。用乘法结果与均值的差作为err,差的绝对值作为errabs。同理,工具N、O也是一样的计算方式。将210X1210X2、210X1210X2_err、210X1*210X2_errabs作为备选特征。对于加减乘除反除都是同样的计算方式。

21
我们来约定一下单双因子的描述方式。单因子记作X、Xerr、Xerrabs,双因子记作f(X,Y)、f (X,Y)_ err 、f (X,Y)_ erabs。

22
接下来我们对构建产出的特征进行筛选。这里选用的方法是计算备选特征与特征值Value的pearson相关性。
记某特征X与特征值Value的pearson相关性(绝对值)为Pearson(X,Value)。
对于单因子,我们要求Pearson相关性大于0.2。

23
对于双因子,我们要求双因子的pearson大于0.24并且双因子的pearson分别比各自的单因子pearson大于0.05。这里主要是为了强调因子交互带来的额外相关性。
对于单双因子的阈值,是基于当前数据的实验结果给出的,可以进行适当调整。

24
随后填充inf和标准化,共计产出单因子425列,双因子4756列。
单双因子相关系数最高的十维如下所示。
这里需要注意的一点是,下表列出的仅为相关系数较高的列,并不是模型中的重要特征列。

1.4 模型与参数选择
25
在初赛及复赛阶段,在testA公布前,采用的是Train五折交叉验证。在testA公布后,采用的是Train训练的模型结果预测testA。评价指标选用的是mse和R方。
选用这样的模型评价方式主要是为了客观考察模型在新数据集的泛化能力。

26
在初赛阶段,标准化尝试过全体标准化、组内标准化、将训练集测试集分开和和合并标准化等。最后选用的方案是基于当前的特征构建结果,最后标准化。
降维尝试过PCA、SelectKBest等,一直效果不佳,复赛后因提交机会有限,就不再尝试降维。
模型尝试过SVR、Lasso、XGBoost等,最后根据模型效果,主要选用Lasso、XGBoost和GBDT。

27
复赛阶段基于多版本数据和多模型的比较,选择最优的数据和模型。
数据包括单双因子带err、纯单因子、跨工序单双因子无err等,模型包括Lasso和XGBoost。最后根据数据和模型结果,选用的是单双因子带err,XGBoost。

28
最终数据及XGBoost模型参数如下。
利用train数据训练testA的结果,mse为0.02013,R方为0.63564.
将train和testA拼接,利用全部单、双因子数据,最终预测testB。

29
预测结果中的30维重要因子排序如上所示。

30
那么整套数据处理的全流程如下。我们拿到数据的时候首先要对数据进行观察,基于数据理解进行数据预处理,包括分工序、删无效字段和NA、0的补值。然后构建单双因子特征,计算特征相关性,利用相关性阈值进行特征筛选,补inf后进行Z-Score标准化。模型尝试Lasso、SVR等,最后选取Lasso、XGBoost和GBDT。根据模型评估结果选用XGBoost。最后进行参数优化并产出最终预测结果。

二、总结与讨论
31
在进行数据分析建模的过程中,我的个人经验包含以下几点:
观察数据,理解业务。在解决问题的全过程中,要保持对数据的重视,甚至可以尝试“人工”智能。
注重特征。在机器学习领域有一句名言,数据和特征决定了机器学习的上限,模型只是去逼近它。我们可以尝试基于业务逻辑和自身的问题理解,积极构造新特征。
模型选择。当特征很复杂时,可以考虑使用简单模型。当特征较为简单时,可以尝试考虑复杂模型。
最后一定要注重模型的泛化能力和可解释性。

三、 个人推荐
32
在机器学习领域,经常有一些小伙伴自称自己是“炼丹师”,模型调参和改bug就像炼丹一样,靠的是经验和运气。那么对于经验,可以从书籍、课程中获得理论指导,论文中获取原理推导,在公开数据集、项目和竞赛中进行实践,同时通过一些博客或者技术沙龙学习他人的经验。

33
书籍推荐:李航老师的《统计学习方法》、周志华老师的《机器学习》,还有《集体智慧编程》、《机器学习实战》以及《深度学习》
论文推荐:arXiv.org
竞赛推荐:kaggle、阿里云天池大数据竞赛平台。
以上就是本次的技术分享内容,如有不足,请多多指教,谢谢Thanks(・ω・)ノ

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
1天前
|
机器学习/深度学习 Python
训练集、测试集与验证集:机器学习模型评估的基石
在机器学习中,数据集通常被划分为训练集、验证集和测试集,以评估模型性能并调整参数。训练集用于拟合模型,验证集用于调整超参数和防止过拟合,测试集则用于评估最终模型性能。本文详细介绍了这三个集合的作用,并通过代码示例展示了如何进行数据集的划分。合理的划分有助于提升模型的泛化能力。
|
1天前
|
机器学习/深度学习 Python
验证集的划分方法:确保机器学习模型泛化能力的关键
本文详细介绍了机器学习中验证集的作用及其划分方法。验证集主要用于评估模型性能和调整超参数,不同于仅用于最终评估的测试集。文中描述了几种常见的划分方法,包括简单划分、交叉验证、时间序列数据划分及分层抽样划分,并提供了Python示例代码。此外,还强调了在划分数据集时应注意随机性、数据分布和多次实验的重要性。合理划分验证集有助于更准确地评估模型性能并进行有效调优。
|
2天前
|
机器学习/深度学习 人工智能 自然语言处理
机器学习模型之深度神经网络的特点
深度神经网络(Deep Neural Networks, DNNs)是一类机器学习模型,通过多个层级(层)的神经元来模拟人脑的工作方式,从而实现复杂的数据处理和模式识别任务。
8 1
|
14天前
|
机器学习/深度学习 资源调度 分布式计算
阿里PAI-ChatLearn:大规模 Alignment高效训练框架正式开源
PAI-ChatLearn现已全面开源,助力用户快速、高效的Alignment训练体验。借助ChatLearn,用户可全身心投入于模型设计与效果优化,无需分心于底层技术细节。ChatLearn将承担起资源调度、数据传输、参数同步、分布式运行管理以及确保系统高效稳定运作的重任,为用户提供一站式解决方案。
|
10天前
|
机器学习/深度学习 算法 前端开发
R语言基础机器学习模型:深入探索决策树与随机森林
【9月更文挑战第2天】决策树和随机森林作为R语言中基础且强大的机器学习模型,各有其独特的优势和适用范围。了解并熟练掌握这两种模型,对于数据科学家和机器学习爱好者来说,无疑是一个重要的里程碑。希望本文能够帮助您更好地理解这两种模型,并在实际项目中灵活应用。
|
9天前
|
机器学习/深度学习 数据采集 存储
一文读懂蒙特卡洛算法:从概率模拟到机器学习模型优化的全方位解析
蒙特卡洛方法起源于1945年科学家斯坦尼斯劳·乌拉姆对纸牌游戏中概率问题的思考,与约翰·冯·诺依曼共同奠定了该方法的理论基础。该方法通过模拟大量随机场景来近似复杂问题的解,因命名灵感源自蒙特卡洛赌场。如今,蒙特卡洛方法广泛应用于机器学习领域,尤其在超参数调优、贝叶斯滤波等方面表现出色。通过随机采样超参数空间,蒙特卡洛方法能够高效地找到优质组合,适用于处理高维度、非线性问题。本文通过实例展示了蒙特卡洛方法在估算圆周率π和优化机器学习模型中的应用,并对比了其与网格搜索方法的性能。
81 1
|
12天前
|
机器学习/深度学习 PHP 开发者
探索PHP中的面向对象编程构建你的首个机器学习模型:以Python和scikit-learn为例
【8月更文挑战第30天】在PHP的世界中,面向对象编程(OOP)是一块基石,它让代码更加模块化、易于管理和维护。本文将深入探讨PHP中面向对象的魔法,从类和对象的定义开始,到继承、多态性、封装等核心概念,再到实战中如何应用这些理念来构建更健壮的应用。我们将通过示例代码,一起见证PHP中OOP的魔力,并理解其背后的设计哲学。
|
11天前
|
机器学习/深度学习 存储 前端开发
实战揭秘:如何借助TensorFlow.js的强大力量,轻松将高效能的机器学习模型无缝集成到Web浏览器中,从而打造智能化的前端应用并优化用户体验
【8月更文挑战第31天】将机器学习模型集成到Web应用中,可让用户在浏览器内体验智能化功能。TensorFlow.js作为在客户端浏览器中运行的库,提供了强大支持。本文通过问答形式详细介绍如何使用TensorFlow.js将机器学习模型带入Web浏览器,并通过具体示例代码展示最佳实践。首先,需在HTML文件中引入TensorFlow.js库;接着,可通过加载预训练模型如MobileNet实现图像分类;然后,编写代码处理图像识别并显示结果;此外,还介绍了如何训练自定义模型及优化模型性能的方法,包括模型量化、剪枝和压缩等。
22 1
|
14天前
|
机器学习/深度学习
机器学习回归模型相关重要知识点总结
机器学习回归模型相关重要知识点总结
|
13天前
|
机器学习/深度学习 人工智能 Android开发
揭秘AI编程:从零开始构建你的第一个机器学习模型移动应用开发之旅:从新手到专家
【8月更文挑战第29天】本文将带你走进人工智能的奇妙世界,一起探索如何从零开始构建一个机器学习模型。我们将一步步解析整个过程,包括数据收集、预处理、模型选择、训练和测试等步骤,让你对AI编程有一个全面而深入的理解。无论你是AI初学者,还是有一定基础的开发者,都能在这篇文章中找到你需要的信息和启示。让我们一起开启这段激动人心的AI编程之旅吧! 【8月更文挑战第29天】在这篇文章中,我们将探索移动应用开发的奇妙世界。无论你是刚刚踏入这个领域的新手,还是已经有一定经验的开发者,这篇文章都将为你提供有价值的信息和指导。我们将从基础开始,逐步深入到更复杂的主题,包括移动操作系统的选择、开发工具的使用、