6

AI产品经理的入门必修课(2)——实战篇

 3 years ago
source link: http://www.woshipm.com/ai/4282941.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

导语:上一篇文章里简单介绍了AI产品经理需要具备的能力和对数据、算法需要理解的程度;本篇计划介绍一下机器学习的实际训练过程,来进一步的理解AI产品在日常工作中需要关注的内容。我们一起来了解一下。

UNBb2uz.jpg!mobile

现简单的将训练流程划分为:定位要解决的任务类型 -> 选择合适的算法模型 -> 准备数据集 -> 训练模型 -> 调整参数 -> 模型评估及验收。

一、根据场景定位要解决的任务类型

结合不同的应用场景,机器学习核心解决的任务类型可以简单归纳为分类问题、回归问题、聚类问题、时间序列问题。

1. 分类问题

原理:根据样本特征提前定义好数据的分类,把具有相同特征的数据点落到提前定义好的类别标签上完成分类。

特点:数据样本有标签。

应用场景:人脸识别、垃圾邮件检测、图像识别、信用卡评估…

2. 回归问题

原理:通过历史数据的表现,拟合成一个目标函数,利用误差分析方法去确定拟合后表现最好的函数。

特点:数据是相互独立的点,且有对应标签。

应用场景:预估业务增量、房价增长、股票增长…

3. 聚类问题

原理:不需要提前去定义期望的数据需要怎样划分,根据样本特征的距离去决定分类,保持最小的组内相似。

特点:数据样本无标签,不需要提前去定义期望的数据需要怎样划分,根据样本特征的距离去决定分类,保持最小的组内相似。

应用场景:用户分群、商品聚类…

4. 时间序列问题

原理:与回归的逻辑相似,但对数据的要求不一样,数据按照时间顺序排列,根据相等间隔的时间段的数据表现规律去预估未来的表现。

特点:数据点之间彼此相关。

应用场景:需要进行周期性预测类的场景。

二、选择合适的算法模型

根据不同任务类型选择合适的算法模型,如果要解决的是分类问题,即对应的要选择擅长处理分类问题的算法模型,选择合适的模型可以提高数据训练的效率。

通常选择什么样的算法是由算法工程师主导的,产品经理只需要简单理解所解决的问题范围即可。

scikit-learn上支持的分类算法:

  • 朴素贝叶斯分类器(Naive Bayes)
  • K近邻分类器(KNeighbors Classifier)
  • 决策树(Decision Tree)
  • 支持向量机(SVC)
  • 线性支持向量机(Linear SVC)
  • 随机梯度下降分类器(SGD Classifier)
  • 核估计(kernel approximation)
  • 集成分类器(EnsembleClassifiers)

要解决聚类的问题,如用户分群,可以选择聚类的算法模型。

scikit-learn上支持的聚类算法:

  • K均值(KMeans)
  • 谱聚类(Spectral Clustering)
  • GMM – 高斯混合模型
  • MeanShift
  • VBGMM
  • MiniBatch KMeans

如果要依赖趋势做数值预测,如业务量增长,可以选择回归算法模型。

scikit-learn上支持的回归算法:

  • 贝叶斯岭回归
  • Logistic回归
  • 支持向量机回归
  • 决策树回归
  • LASSO
  • 随机梯度下降回归(SGD Regressor)

三、准备数据集

准备数据集包含了数据处理、特征提取、训练集、测试集的分割。

1. 数据预处理

通常来说,我们收集上来的数据来源比较多,可能会存在一些问题,例如数据缺失、数据格式不一致、数据集分布不均匀、数据重复等问题,因此需要进行数据的预处理。

不同问题的处理方式:

  • 数据缺失:如果数据缺失占比不大,可以把有缺失的数据进行删除,若本身数据量级就不是很多,可以进行人工填补,通常经过经验填补或者均值填补。
  • 数据格式不统一/量纲不统一:进行格式转化,数据归一化处理。
  • 数据分布不均匀:可以根据样本分布特点进行随机重复采样,以补充数据量少的分布,但容易丢失重要特征。

2. 特征提取

在机器学习的训练中,需要将业务维度相关的数据进行向量转化,解决部分复杂问题时,如果维度较多在转化过程中很容易造成大量的计算资源的消耗,一般会先进行特征的提取,也就是常说的特征工程,来进行维度的简化。

常用的方法是主成分分析,原理是将两个或几个独立的特征组合到一起形成一个特征;利用这种方式进行降维,使训练的维度减少,提高训练效率。

3. 训练集、测试集的分割

在机器学习模型训练之前,通常要进行数据的分割,常用的有1/4分割、1/10分割,具体需要根据自己的数据样本量去拆分。

AbmYRjy.png!mobile

四、训练模型 & 调整参数

准备好数据集,确定了要使用的算法,下一步要进行具体的模型训练;上一篇文章中我们提到机器学习模型训练中经常遇到的两个问题,过拟合和欠拟合。

1. 过拟合

特点:在训练集上表现非常好,但是在测试数据或者验证数据上表现很差,说明模型缺失泛化能力。

原因:训练数据太少或者学习后的模型过于复杂。

解决方法:增加训练样本,或者减少数据维度,或者为模型添加一个正则项来扩大模型在训练上的误差。

2. 欠拟合

特点:在训练集上表现不好,在测试数据上表现也不好。

原因:维度较少拟合的函数不足以表达数据规律。

解决方法:补充维度增加模型的复杂程度。

zumeAr.png!mobile

图上是线性回归模型表现出的三种状态,中间图为模型训练好后该具备的样子;紫色线为模型训练好后拟合出的函数,绿色线为真实数据该拟合出的函数,点代表样本数据。

3. 参数调整

针对调参的环节,一般会通过交叉验证来确定最优参数。当然,一些对模型训练做的比较多的算法大牛,也会根据自己的经验去指定参数进行算法调优。

以KNN算法为例:

最简单的方式:K=1、2、3,然后分别进行实验,对比结果,选择最优参数。

交叉验证:将一部分数据从训练集上分割出来,从这小部分数据集中进行验证;例如下图,把训练集划分为5份,分别采用每一小份当作交叉实验的测试集,对比每一次实验的结果,去分别记录预估的准确率,最后选择准确率最高的参数作为模型最优参数。

这里需要注意分组实验只是为了确定最优参数,在参数确认后,还是需要将全部数据合并到一起进行模型训练,得到目标函数,很多人在调参的环节容易忽视此步骤。

nqMziuf.png!mobile

五、模型评估及验收

最常见的方法是看模型的准确率,但模型整体准确率高,不代表模型表现就好;因为在某些任务场景下,更多关注的是某个类别或者某个分布下的准确率,而非整体的准确率。

例如在图像识别的场景下,首先会去关注模型对于图像内容识别的召回率,所谓召回率就是在所有要检测的图片样本中,被预测正确的个数,也叫做查全率;然后在去看模型的精准度,也就是所有预测出的结果中,预估正确的个数。

二者的区别在于,前者关注的是在所有真实样本中被正确检测的情况,后者关注的是预测结果中被正确检测的情况,下表是分类问题的混淆矩阵。

QFVzIva.png!mobile

举例:数据样本中有猫和狗的图片,我们用图像识别来检测是猫的图片。

  • 真正例(TP):图片预测结果是猫,真实图片结果是猫;
  • 假正例(FP):图片预测结果是猫,真实图片结果是狗;
  • 真反例(TN):图片预测结果是狗,真实图片结果是狗;
  • 假返例(FN),图片预测结果是狗,真实图片结果是猫;

本次任务是“检测出猫”的图片,即使模型正确检测出狗,也不满足于我们当前的分析任务,因此基于任务而言,正确预测出是狗的情况为真返例。

真返利的数据在“检测出猫”的任务中不会被算到准确率中,基于“检测出猫”这个任务的召回率和准确率的计算为:

  • 召回率TP/(TP+FP)
  • 准确率TP/(TP+FN)

另外一种评估模型准确率的方法是观察ROC、AUC和EER数据,并进行对比评估。

ROC曲线图如下:

绿线为ROC曲线。

AUC代表了蓝色面积,蓝色面积越大,说明模型预估越准确。

EER为绿色线上的原点,值越小代表了模型的误差越小。

BVfaauy.png!mobile

#专栏作家#

大鹏,公众号:一个数据人的自留地。人人都是产品经理专栏作家,《数据产品经理修炼手册》作者。

本文原创发布于人人都是产品经理。未经许可,禁止转载

题图来自Unsplash,基于CC0协议。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK