机器学习开发指南(基础篇)

原创
人工智能 机器学习
机器学习是人工智能领域的重要组成,简单来说就是计算机程序学习数据,并产生相应的建议与决策的过程。

【51CTO.com原创稿件】

前言

机器学习是人工智能领域的重要组成,简单来说就是计算机程序学习数据,并产生相应的建议与决策的过程。

一个经典的机器学习的定义是:

A computer program is said to learn from experience E with respect to some class of tasks T and performance measure P, if its performance at tasks in T, as measured by P, improves with experience E.

本文用图文并茂的方式带你深入了解机器学习的概念原理及开发流程。文章结构如下:

  • 前言

  • 一、机器学习概论

  • 二、机器学习开发流程 

一、机器学习概论

机器学习是关于计算机基于数据分布构建出概率统计模型,并运用模型对数据进行分析与预测的方法。按照学习数据分布的方式的不同,主要可以分为监督学习和非监督学习

1、监督学习:

是从有标注的数据(x为变量特征空间, y为标签)中,通过选择的模型及确定的学习策略,再用合适算法计算后学习到最优模型,并用模型预测的过程。

由模型预测结果Y的取值有限的或者无限的,可分为分类模型或者回归模型。

2、非监督学习:

是从无标注的数据(x为变量特征空间),通过选择的模型及确定的学习策略,再用合适算法计算后学习到最优模型,并用模型发现数据的统计规律或者内在结构。

按照应用场景,可以分为聚类,降维和关联分析等模型。

二、机器学习开发流程

1、明确业务问题

明确业务问题是机器学习的先决条件,这里需要抽象出现实业务问题的解决方案:需要学习什么样的数据--输入,目标是得到什么样的模型做决策--输出。

(如:学习已有的新浪新闻及其类别标签数据,得到一个分类模型,通过模型对每天新的新闻做类别预测,以归类到每个新闻频道。)

 

2、数据选择:收集及输入数据

数据决定了机器学习结果的上限,而算法只是尽可能逼近这个上限。 意味着数据的质量决定了模型的最终效果,在实际的工业应用中,算法通常占了很小的一部分,大部分工程师的工作都是在找数据、提炼数据、分析数据。数据选择需要关注的是:

① 数据需具有代表性,否则会导致模型的过拟合,对训练数据之外的新数据无识别能力;

② 如果监督学习的业务与时间有关,数据时间窗口需要明确,否则可能会导致数据泄漏,即存在和利用因果颠倒的feature的现象。(如预测明天会不会下雨,但是训练数据引入明天或者本周的温湿度情况)  

3、特征工程:数据预处理及特征提取

特征工程就是将原始数据转化为模型有用的特征,技术手段如特征表示,缺失值/异常值处理,数据离散化,数据标准化,特征提取等。

  • 特征表示 数据需要转换为计算机能够处理的数值形式。 如果数据是图片数据需要转换为RGB三维矩阵的表示;而文本类的数据可以用多维数组来表示,有Onehot独热编码表示、word2vetor分布式表示及bert动态编码等。

  • 异常值处理

    收集的数据由于人为或者自然因素可能引入了异常值(噪音),这会对模型学习进行干扰。

    通常需要对人为引起的异常值进行处理,通过业务判断和技术手段(python、正则式匹配、pandas数据处理及matplotlib可视化等数据分析处理技术)筛选异常的信息,并结合业务情况删除或者替换数值。 

  • 缺失值处理

    数据缺失的部分,通过结合业务进行填充数值、不做处理或者删除。 根据缺失率情况及处理方式分为以下情况:

    ① 缺失率较高,并结合业务可以直接删除该特征变量。此外可以新增一个bool类型的变量特征记录该字段的缺失情况,缺失记为1,非缺失记为0;

    ② 缺失率较低,结合业务可使用一些缺失值填充手段,如pandas的fillna方法、训练随机森林模型预测缺失值填充;

    ③ 不做处理:部分模型如随机森林、xgboost、lightgbm能够处理数据缺失的情况,不需要对缺失数据做任何的处理。

  • 数据离散化

    数据离散化能减小算法的时间和空间开销(不同算法情况不一),并可以使特征更有业务解释性。

    离散化是将连续的数据进行分段,使其变为一段段离散化的区间,分段的原则有基于等距离、等频率等方法。

  • 数据标准化

    数据各个特征变量的量纲差异很大,可以使用数据标准化消除不同分量量纲差异的影响,加速模型收敛的效率。常用的方法有:

    ① min-max 标准化:

    将数值范围缩放到(0,1),但没有改变数据分布。max为样本最大值,min为样本最小值。

    ② z-score 标准化:

    将数值范围缩放到0附近, 经过处理的数据符合标准正态分布。u是平均值,σ是标准差。

  • 特征提取

    特征提取环节,是结合业务及技术手段生成特征(特征衍生)并最终确认(特征选择/特征降维)进入模型的特征变量,这对模型结果有着决定性的影响。 

    特征衍生:可能现有基础特征对样本信息的表述有限,通过生成新含义的特征进行补充。特征衍生是对现有基础特征的含义进行某种处理(组合/转换之类):

    ① 结合业务的理解做衍生,比如通过12个月工资可以加工出:平均月工资,薪资变化,是否发工资 等等;

    ② 使用特征衍生工具:feature tools等技术;

    特征选择:筛选出显著特征、摒弃非显著特征。 特征选择方法一般分为三类:

① 过滤法:按照特征的发散性或者相关性指标对各个特征进行评分后选择,如方差验证、相关系数、卡方检验及信息增益等方法。

② 包装法,每次选择部分特征,或者排除部分特征,根据模型预测效果评分选择特征。

③ 嵌入法:使用某些模型进行训练,得到各个特征的权值系数,根据权值系数从大到小来选择特征,如XGBOOST特征重要性输出。

特征降维:如果特征选择后的特征数目仍太多,这种情形下经常会有数据样本稀疏、距离计算困难的问题(称为 “维数灾难”),可以通过特征降维解决。 常用的降维方法有:主成分分析法(PCA), 线性判别分析法(LDA)等。

4、模型训练

模型训练是选择模型学习数据分布的过程。这过程还需要依据训练结果调整算法的(超)参数,使得结果变得更加优良。

  • 数据集划分

    训练模型前,一般会把数据集分为训练集和测试集,并可再对训练集再细分为训练集和验证集,从而对模型的泛化能力进行评估。

    ① 训练集(training set):用于运行学习算法。

    ② 开发验证集(development set)用于调整参数,选择特征以及对算法其它优化。常用的验证方式有交叉验证Cross-validation,留一法等;

    ③ 测试集(test set)用于评估算法的性能,但不会据此改变学习算法或参数。

  • 模型选择

    常见的机器学习算法如下:

     

模型选择取决于数据情况和预测目标。可以训练多个模型,根据实际的效果选择表现较好的模型或者模型融合。

 

  • 模型训练

    训练过程可以通过调参进行优化,调参的过程是一种基于数据集、模型和训练过程细节的实证过程。超参数优化需要基于对算法的原理的理解和经验,此外还有自动调参技术:网格搜索、贝叶斯优化等。 

5、 模型评估

模型学习的目的:使学到的模型对新数据能有很好的预测能力(泛化能力)。

模型评估的标准:基于给定损失函数的模型训练误差(training error)和测试误差(test error)评估模型,现实中通常由测试误差评估模型的泛化能力。

  • 评估指标

    ① 评估分类模型: 常用的评估标准有查准率P、查全率R、两者调和平均F1-score 等,并由混淆矩阵的统计相应的个数计算出数值:

    查准率是指分类器分类正确的正样本(TP)的个数占该分类器所有预测为正样本个数(TP+FP)的比例;

    查全率是指分类器分类正确的正样本个数(TP)占所有的正样本个数(TP+FN)的比例。

    F1-score是查准率P、查全率R的调和平均:

    ② 评估回归模型: 常用的评估指标有RMSE均方根误差 等。反馈的是预测数值与实际值的拟合情况。

    ③ 评估聚类模型:可分为两类方式,一类将聚类结果与某个“参考模型”的结果进行比较,称为“外部指标”(external index):如兰德指数,FM指数 等; 另一类是直接考察聚类结果而不利用任何参考模型,称为“内部指标”(internal index):如紧凑度、分离度等。

  • 评估模型

    根据训练集及测试集的指标表现,分析原因并对模型进行优化,常用的方法有:

6、决策

决策是机器学习最终目的,对模型预测信息加以分析解释,并应用于实际的工作领域。

需要注意的是工程上是结果导向,模型在线上运行的效果直接决定模型的成败,不仅仅包括其准确程度、误差等情况,还包括其运行的速度(时间复杂度)、资源消耗程度(空间复杂度)、稳定性的综合考虑。

[[280630]] 

参考文献

《面向程序员数据挖掘指南》

《机器学习》--周志华

《统计学习方法》--李航

Google machine-learning

作者:

大白,多年算法开发经验,熟悉自然语言处理,银行金融风控,知识图谱等领域。

【51CTO原创稿件,合作站点转载请注明原文作者和出处为51CTO.com】

 

责任编辑:庞桂玉 来源: 51CTO
相关推荐

2011-07-25 16:21:22

Sencha touc

2022-08-02 08:01:09

开发插件Chrome前端技术

2012-03-26 09:27:40

谷歌安卓开发谷歌安卓

2011-06-09 18:24:36

QT Wince

2023-05-15 18:44:07

前端开发

2015-03-10 10:59:18

Node.js开发指南基础介绍

2009-06-24 16:30:21

JSF组件模型

2015-11-12 16:14:52

Python开发实践

2010-06-13 09:27:56

Widget开发

2015-12-16 10:30:18

前端开发指南

2021-08-09 09:47:34

Blazor 路由开发

2011-12-29 10:48:49

移动Web

2012-05-18 10:08:56

TitaniumAndroid

2011-04-18 11:00:34

使用音频BlackBerry

2021-06-21 15:21:52

鸿蒙HarmonyOS应用开发

2011-08-02 17:58:09

iPhone开发 事件

2014-06-12 09:35:25

设备定向API移动开发

2014-05-16 11:09:38

Handlebars模板引擎

2022-03-23 15:17:00

Harmony鸿蒙操作系统

2022-08-11 10:43:23

前端开发实践
点赞
收藏

51CTO技术栈公众号