机器学习笔记(3.1)

机器学习笔记系列文章目录



第六节

本课时,我将为你介绍数据挖掘操作流程的第三个环节,模型训练。
在上一课时,我们解决了一系列又脏又累的数据问题,现在终于可以进入模型训练阶段了。
在数据挖掘中,算法是很多的,而且随着大家研究的深入,有越来越多的优秀算法被设计出来。所以,
该怎么去选一个适合需求的算法呢?首先你得明白你面对的是什么问题,虽然算法众多,但是要解决的
难题往往有共同点,针对每一类型的问题,就可以找到对应的算法,再根据算法的特性去进行选择。这
一课时,我就来介绍一下在工作中最常遇到的一些问题。

分类问题

在内容理解场景下,我遇到最多的问题就是分类问题。一个用户写了一篇游记,我想对它做非常详细的
理解,比如:

  • 游记类别,是关于 “滑雪” 的,还是关于 “徒步” 的;
  • 用户情感,是 “正向” 的,还是 “负向” 的;
  • 内容质量,是 “高”“中”,还是 “低”;
  • 内容风险,是 “有风险” 的,还是 “无风险” 的。

诸如此类给数据进行明确标签区分的问题都可以看作分类问题。
分类是有监督的学习过程。 处理分类问题首先要有一批已经有标签结果的数据,经过分类算法的学习,
就可以预测新的未知数据的分类。如果缺少这些已知的信息,那分类就没办法进行,要么考虑使用其他
方法,如聚类算法,要么考虑处理数据,比如说人工进行标注。
分类问题中包括以下 3 种情况:

  • 二分类。 这是分类问题里最简单的一种,因为要回答的问题只有 “是” 或“否”。比如我在处理用户
    内容时,首先要做一个较大的分类判断,即一条内容是否属于旅游相关内容,这就是二分类问题,
    得出的结论是这条内容要么是旅游相关,要么不是旅游相关。
  • 多分类。 在二分类的基础上,将标签可选范围扩大。要给一条内容标注它的玩法,那种类就多
    了,比如冲浪、滑雪、自驾、徒步、看展等,其种类甚至多达成百上千个标签。
    多标签分类。 是在多分类基础上再升级的方法。对于二分类和多分类,一条内容最后的结果只有
    一个,标签之间是互斥的关系。但是多标签分类下的一条数据可以被标注上多个标签。比如一个人
    在游记里既可以写玩法,也可以写美食,这两者并不冲突。
    由于分类问题众多,所以用来解决分类问题的算法也非常多,像 KNN 算法、决策树算法、随机森林、
    SVM 等都是为解决分类问题设计的。看到这些名字你可能会感到陌生,但是不要担心,关于算法的具体
    细节,我会在后面的课时进行讲解。

聚类问题

跟分类不同,聚类是无监督的, 也就是说没有已经标注好的结果数据供算法学习。你只知道一些数据,
而且你需要为这些数据分组,甚至很多时候你连要划分多少个组都不清楚。比如,在一个旅游 APP 上
有上千万的用户,你可能会需要把用户划分成若干个组,以便针对特定的用户群体去开发一些特定的功
能,比如为爱滑雪的用户,推送一些滑雪的信息。但是用户数量很大,用户的属性也很多,这个时候你
就要用到聚类分析。
聚类就是把一个数据集划分成多个组的过程,使得组内的数据尽量高度集中,而和其他组的数据之间尽
量远离。这种方法是针对已有的数据进行划分,不涉及未知的数据。
既然是要划分小组,就要先看看小组之间可能存在的 4 种情况。
互斥:小组和小组之间是没有交集的,也就是说一个用户只存在于一个小组中。
相交:小组和小组之间有交集,那么一条数据可能既存在于 A 组,也存在于 B 组之中,如一个用
户既可以爱滑雪,也可以爱爬山。
层次:一个大组还可以细分成若干个小组,比如将高消费用户继续细分,可以有累积高消费用户和
单次高消费用户。
模糊:一个用户并不绝对属于某个小组,只是用概率来表示他和某个小组的关系。假设有五个小
组,那么他属于这五个小组的模糊关系就是 [0.5,0.5,0.4,0.2,0.7]。
所以,对应上面 4 种不同的小组情况,也有 4 种不同的聚类方法。
第一种:基于划分的聚类,通常用于互斥的小组。 划分的方法就好像在数据之间画几条线,把数
据分成几个小组。想象你的数据散落在一个二维平面上,你要把数据划分成三个类,那么在划分完
之后,所有数据都会属于一个类别。
第二种:基于密度的聚类,可以用来解决数据形状不均匀的情况。 有些数据集分布并不均匀,而
是呈现不规则的形状,而且组和组之间有一片空白区域,这个时候用划分的方法就很难处理,但是
基于密度的聚类不会受到分布形状的影响,只是根据数据的紧密程度去聚类。
第三种:基于层级的聚类,适用于需要对数据细分的情况。 就像前面说的要把数据按照层次进行
分组,可以使用自顶向下的方法,使得全部数据只有一个组,然后再分裂成更小的组,直到满足你
的要求。如有从属关系,需要细分的数据,就非常适合这种方法。同样,也可以使用自底向上的方
法,最开始每一条数据都是一个组,然后把离得近的组合并起来,直到满足条件。
最后一种:基于模型的聚类。 这种聚类方法首先假设我们的数据符合某种概率分布模型,比如说
高斯分布或者正态分布, 那么对于每一种类别都会有一个分布曲线,然后按照这个概率分布对数
据进行聚类,从而获得模糊聚类的关系。
下面是我在 scikit-learn 官网上找的一张聚类算法对比图,通过数据图形化的形式,对比了针对不同类
型的数据情况,使用各个聚类算法得到的结果。图中的每一行都是同一种数据通过不同算法得出的聚类
结果,不同颜色表示使用了某个聚类算法之后,该数据集被聚成的类别情况,可以比较直观地理解某个
算法适合什么样的数据集。比如第一行的数据分布是两个圆环,可以看到第四个、第六个、第七个和第
八个算法的效果比较好,能够成功地按照两个圆环去聚成类别,而其他几种的效果就比较差了。
聚类算法对比图

回归问题

与分类问题十分相似,都是根据已知的数据去学习,然后为新的数据进行预测。但是不同的是,分类方
法输出的是离散的标签,回归方法输出的结果是连续值。
分类 回归
输出 离散数据 连续数据
目的 寻找决策边界 找到最优拟合
那什么是离散的标签呢?“云青青欲雨”这个典型的分类问题,就能说明这一问题。根据特征 “云青青” 输 出“雨”,雨、雪、阴、晴这类标签,就是不连续的。而回归就是要通过拟合数据找到一个函数,当你有
一组新的数据时,就可以根据这个函数算出一个新的结果值。
回归的英文单词是 Regression,有消退、复原的含义,这种方法是由生物统计学家高尔顿发明的。他
在统计父母身高与子女身高的关系时发现,父母的身高都非常高或者都非常矮的情况下,子女身高经常
出现衰退的情况,也就是高的父母孩子变矮,矮的父母孩子变高,有回归到平均身高的倾向。
我画了两幅图来说明回归的结果,就是要找到一条线:
回归分析图
这张图不是要进行对比,只是想告诉你不管是线性还是非线性的数据,都可以使用回归分析。
可以看到,数据散落在坐标系上,通过学习你可以得到一条线,较好地拟合了这些数据。这条线可能不
通过任何一个数据点,而是使得所有数据点到这条线的距离都是最短的,或者说是损失最小的。根据这
条线,如果给出一个新的 x,那么你就能算出对应的 y 是多少。
事实上,回归方法和分类方法可以相互转化,比如:

  • 在使用回归方法得到函数方程式以后,你可以根据对新数据运算的结果进行区间分段,高于某个阈
    值给定一个标签,低于该阈值给定另外一个标签。比如你使用回归方法预测完房价之后,不想让客
    户看到真实的房价,而是给予一个范围的感受,就可以设定高于 500w 的就是 “高房价” 标签,低
    于 100w 的就是 “低房价” 标签;
  • 相反,对于通过分类方法得到的标签,你可以根据给定标签的概率值为其增加一些运算逻辑,将标
    签转换到一个连续值的结果上。
    下面我再用一个表格总结一下分类和回归的情况,你在实际使用时可以根据自己的需要进行选择和处
    理。

关联问题

关联问题对应的方法就是关联分析。这是一种无监督学习,它的目标是挖掘隐藏在数据中的关联模式并
加以利用。与分类和回归不同,关联分析是要在已有的数据中寻找出数据的相关关系,以期望能够使用
这些规则去提升效率和业绩。比如在我们津津乐道的啤酒与尿布的故事中,通过分析销售产品的情况发
现,很多购买尿不湿的人也会去买啤酒。你可能不知道这到底是出于什么原因,但是这背后却隐藏着巨
大的经济效益,这个案例我会在后面的课时具体分析。
所以,关联分析被广泛地用于各种商品销售分析、相关推荐系统分析、用户行为分析等情况。比如我在
第一课时中举的京东套装推荐的例子,就是利用这样的挖掘方法得到的结果,给用户进行各种套装推
荐、搭配商品销售、特价组合等。但是在进行大量数据的关联分析时,你会发现各种奇怪的组合,这可
能是数据偏差产生的影响,所以在最终结果应用的时候还需要加入一些知识校验。
说到这里,我已经把四大问题都介绍完了,每个问题都可以通过相应的机器学习算法来进行解决。但
是,在实践的时候,很多问题不是靠一个算法、一个模型就能解决的,往往要针对具体的细节使用多个
模型以获得最佳效果,所以就要用到模型集成。

模型集成

模型集成也可以叫作集成学习,其思路就是去合并多个模型来提升整体的效果。
既然是要合并多个模型,那么很容易想到训练多个并列的模型,或者串行地训练多个模型。下面我就来
讲一下模型集成的 3 种方式。

  • Bagging(装袋法): 比如多次随机抽样构建训练集,每构建一次,就训练一个模型,最后对多
    个模型的结果附加一层决策,使用平均结果作为最终结果。随机森林算法就运用了该方法,这种算
    法我会在后面的课时具体介绍。这一方法的过程如下图所示:
    装袋法图
  • Boosting(增强法): 这个就是串行的训练,即每次把上一次训练的结果也作为一个特征,不断
    地强化学习的效果
    增强法图
  • Stacking(堆叠法): 这个方法比较宽泛,它对前面两种方法进行了扩展,训练的多个模型既可
    以进行横向扩展,也可以进行串行增强,最终再使用分类或者回归的方法把前面模型的结果进行整
    合。其中的每一个模型可以使用不同的算法,对于结构也没有特定的规则,真正是 “黑猫白猫,抓
    住老鼠就是好猫”。所以,在使用堆叠法时,就需要你在具体业务场景中不断地去进行尝试和优
    化,以达到最佳效果。

总结

在这一课时,我介绍了工作中最常见的四大问题以及模型集成,我想你应该学到了这些问题的内部机
理,并且知道要解决这些问题需要有什么样的思路。但是在这一课时中,我并没有介绍算法的细节,别
担心,我会在后面的课时中详细展开。

第七节

本课时,我将为你介绍数据挖掘操作流程的倒数第二个步骤:模型评估。
在每次训练一个模型之后,尤其是现在的深度模型,通常要消耗大量的时间等待模型的产出,那种心情
是可想而知的,谁都希望能够有一个好的结果。模型评估就是对你的模型进行多种维度的评估,来确认
你的模型是否可以放到线上去使用。
这一课时,我将介绍一些常用的评估指标,其中会涉及一些比较难理解的名词和计算,不过不用担心,
我会带你逐个突破难关。当然,我也准备了一个关于 “训练一个小猪图片分类模型” 的例子,让你能够更
加直观地理解如何去评估模型。好了,我们先来看看这个例子。
假设我们训练了一个 “识别图片是不是关于小猪” 的分类模型,这是一个二分类器,当你给它一张图片的
时候,它会告诉你这是一张小猪的图片,或者不是一张小猪的图片。我们有 1000 张图片用于测试该模
型的效果,并且预先已经进行了人工的标注(这里假设人工标注的数据都是 100% 正确),每张图都会
标注是或者不是小猪的图片,假设有 800 张标注“是”,200 张标注“否”。

评估指标

混淆矩阵与准确率指标

准确率相关指标是在模型评估时最受关注的指标,它可以直接反映一个模型对于样本数据的学习情况,
是一种标准化的检验。就像老师教给你 10 道计算题,然后又用这 10 道题来出考题,如果你都答对
了,说明你已经学会了。准确率相关的指标就反映了这样一种结果,下面看看模型学习的直接效果。
我们把这 1000 张图放进分类器进行分类计算,每张图都会得到一个预测结果,通过对预测结果的统计
可以知道,被模型预测为 “是” 的图片有 770 张,被模型预测为 “否” 的图片有 230 张。这个时候每张图
上会有两个结果:一个人工标注结果、一个模型预测结果。根据这两个数据的统计,可以得到一个混淆
矩阵:
样本 1000 份 模型预测:是 模型预测:否
人工标注:是 745(TP) 55(FN)
人工标注:否 25(FP) 175(TN)

矩阵中包含以下 4 种数值:

  1. 真阳性(True Positive,TP):小猪图被判定为小猪图。样本的真实类别是正例,并且模型预测的
    结果也是正例(在本案例中此数值为 745)。
  2. 真阴性(True Negative,TN):不是小猪图被判定为不是小猪图。样本的真实类别是负例,并且
    模型将其预测成为负例(在本案例中此数值为 175)。
  3. 假阳性(False Positive,FP):不是小猪图被判定为小猪图。样本的真实类别是负例,但是模型将
    其预测成为正例(在本案例中此数值为 25)。
  4. 假阴性(False Negative,FN):小猪图被判定为不是小猪图。样本的真实类别是正例,但是模型
    将其预测成为负例(在本案例中此数值为 55)。
    根据上述混淆矩阵,我们可以计算一些数值
    具体是怎么构建混淆矩阵的呢?仍然以这个小猪图分类为例,在有些模型的产出中,通常给出 “是” 和 “否”的概率值(这两个概率值相加为 1),我们根据概率值来判定最终的结果,那么这时就有个问题
    了,我们选多少概率值来判定结果?比如可以指定 “是” 的概率为 0.1 及以上时,就判定结果为 “是”; “是” 的概率小于 0.1 的时候,判定结果为“否”。那么,选定若干组判定的概率,就能得到若干组混淆矩
    阵。
    那么在每一组混淆矩阵中,我们获取两个值:真正例率和假正例率。
  • 真正例率:TP/(TP+FN)
  • 假正例率:FP/(FP+TN)
    使用这两个值在坐标系上画出一系列的点,纵坐标是真正例率,横坐标是假正例率,把这些点连起来形
    成的曲线就是 ROC 曲线(Receiver Operating Characteristic,接收者操作特征)。ROC 曲线下方的
    面积是 AUC 值(Area Under Curve,曲线下面积),ROC 曲线和 AUC 值可以反映一个模型的稳定
    性,当 ROC 曲线接近对角线时,说明模型输出很不稳定,模型就越不准确。
十分重要的业务抽样评估

除了上面一系列的指标评估,我们还有一项重要的评估需要进行,那就是业务抽样。因为我们的模型是
基于业务制定的,最终的效果还是要回归到业务上。
在理想的状况下,使用上面的指标基本可以判定模型的效果,但是在实际中还存在着一些问题,这通常
都是由数据本身并不完美导致的。对于标注数据,人工标注通常也存在一定的错误率,而不是 100% 正
确,所以在使用前面的指标进行评估的时候可能会与实际结果存在一些差异。进行业务抽样评估可以减
弱这种情况,在多方背靠背评估之后再进行意见的统一,最终得到一个在业务上认可的准确率情况

泛化能力评估

除了要求模型的准确情况,还有一项重要的能力也是我们非常重视的,那就是模型的泛化能力。泛化能
力反映的是模型对未知数据的判断能力,就好像学生具备举一反三的能力,老师教了 1+1=2、1+2=3,
考试时出了一道 1+1+1=3 也能够计算正确,这就有良好的泛化能力。因为在数据挖掘中,数据的维度
通常有很多,而且数据也都是非标准值,任意记录之间的数据都会存在着差异,所以泛化能力好的模型
在数据存在着波动的情况下,仍然能够做出正确的判断。
过拟合与欠拟合
我们通过两个指标可以评估模型的泛化能力是好还是坏,那就是过拟合(overfitting)和欠拟合
(underfitting)。

  • 过拟合:模型在训练集上表现良好,而在测试集或者验证集上表现不佳。这就是说,模型对样本学习有
    些过度了,已经进入了死记硬背的程度,而不是掌握了普适规律,这个时候可以说泛化能力比较差。
  • 欠拟合:在训练集和测试集上的表现都不好。这就是说模型连最基本的内容都没有学到,比如老师教你
    1+1=2、1+2=3,考试也考 1+1=2,结果还是做错了。
    下面我们再来看看小猪的例子。
    通常情况下,我们的小猪图都像左侧一样,右侧有两张图,上面一张可以看出仍然是小猪图,但是后背
    上的线条有一个缺口,如果此时模型告诉我们,这个后背上有个缺口,这不是小猪图,那么这时就出现
    了过拟合(判断条件过于苛刻)。右下侧是一张小羊图,如果模型告诉我们这个也有四条腿,这个是小
    猪,那就是欠拟合(特征学习不完全)。

关于泛化性能的评估,主要依赖于在不同的数据集上的准确结果之间的比较。要处理过拟合和欠拟合的
问题,通常需要对我们的数据进行重新整理,总结出现过拟合和欠拟合的原因,比如是否数据量太少、
数据维度不够丰富、数据本身的准确性较差等,然后调整数据重新进行训练。

其他评估指标

除了上述的两大类指标,还可以从以下几个方面来对模型进行评估。
模型速度:主要评估模型在处理数据上的开销和时间。这个主要是基于在实际生产中的考虑,由于模型
的应用在不同的平台、不同的机器会有不同的响应速度,这直接影响了模型是否可以直接上线使用,关
于更多模型速度相关的问题,我们将在下一课时模型应用中介绍。
鲁棒性:主要考虑在出现错误数据或者异常数据甚至数据缺失时,模型是否可以给出正确的结果,
甚至是否可以给出结果,会不会导致模型运算的崩溃。
可解释性:随着机器 学习算法越来越复杂,尤其是在深度学习中,模型的可解释性越来越成为一个问
题。由于在很多场景下(比如金融风控),需要给出一个让人信服的理由,所以可解释性也是算法研究
的一大重点。

评估数据的处理

关于数据集的处理,重点目标在于消减评估时可能出现的随机误差。在前面准备数据的课时内容中已经
提过,这里我们再对一些方案详细介绍一下。

  • 随机抽样:即最简单的一次性处理,把数据分成训练集与测试集,使用测试集对模型进行测试,得
    到各种准确率指标。
  • 随机多次抽样:在随机抽样的基础上,进行 n 次随机抽样,这样可以得到 n 组测试集,使用 n 组
    测试集分别对模型进行测试,那么可以得到 n 组准确率指标,使用这 n 组的平均值作为最终结
    果。
  • 交叉验证:交叉验证与随机抽样的区别是,交叉验证需要训练多个模型。譬如,k 折交叉验证,即
    把原始数据分为 k 份,每次选取其中的一份作为测试集,其他的作为训练集训练一个模型,这样
    会得到 k 个模型,计算这 k 个模型结果作为整体获得的准确率。
  • 自助法:自助法也借助了随机抽样和交叉验证的思想,先随机有放回地抽取样本,构建一个训练
    集,对比原始样本集和该训练集,把训练集中未出现的内容整理成为测试集。重复这个过程 k
    次、构建出 k 组数据、训练 k 个模型,计算这 k 个模型结果作为整体获得的准确率,该方法比较
    适用于样本较少的情况。

总结

这一课时我们终于进入了模型评估环节,这是检验模型效果的重要阶段,直接决定一个模型是进入下一
个环节,还是回到上一个环节回炉重炼。我们主要讲了模型的各种评估指标,从一个混淆矩阵出发,衍
生出一系列的准确度评测;然后对模型泛化能力进行评估。在评估指标后面,我们又介绍了如何在数据
上进行一些优化从而减少评估时产生误差,这部分是准备数据的延伸。
在这里需要说明的是,这一课时我们所介绍的模型评估方法中,主要适用于分类模型,因为分类模型是
一种有监督模型,所以通过指标来进行评测相对容易。对于无监督模型,由于本身没有非常明确的结果
标准,所以也比较难找到一个衡量指标

第八节

在经过了与业务方多次沟通和迭代后,模型的效果终于获得了大家的一致认可,我们的模型进入了生产
待命的状态,即将迎来曙光。不过需要注意的一点就是,我们的目标是业务需求,而数据挖掘产出的结
果,不管是预测型的还是关联型的,都要结合业务场景,融入业务流程中去。

模型部署

我们的业务形态不同,部署的方案也就不同。你的模型可能独立部署成服务运行,也可能嵌入到其他的
项目代码中去,但是都逃不脱一个本质,那就是回归业务。所以,在这个阶段,我们就要考虑具体的业
务场景了:模型如何保存?如何根据业务需求优化?以及如何最终上线服务?下面为大家详细解答。

模型的保存

在有了优秀的模型之后,首先就是要把它保存好,以方便应用。我们要给它定义一个好的名字,甚至需
要维护一个详细的文档来记录模型所使用的算法、训练数据、评估结果等信息。因为在整个过程中会进
行很多次训练,产生很多的模型,或者要把很多的模型组合在生产中使用,同时还需要跟后面的重新训
练进行效果的对比,有时候模型的训练和部署可能由不同的人来实施,如果保存时没有注意到这些问
题,很有可能导致出现混乱的情况。
所以我们要制定好模型保存的规范,包括存放的位置、名字的定义、模型所使用的算法、参数、数据、
效果等内容,防止发生比如遗忘、丢失、误删除,甚至是服务器崩坏等人为的事故,造成不必要的损
失。

模型的优化

在模型训练阶段已经讲了一部分模型优化或者说提升效果的方法,为什么这里又出现了模型的优化呢?
这主要是因为在模型部署应用阶段的很多限制条件在模型训练阶段并不会显现出来,模型训练阶段优化
所追求的目标是效果要尽量好;而在模型应用阶段优化所追求的目标是在效果尽量不降低的前提下,适
配应用的限制。
比如,在对时延要求比较高的场景下,如果业务应用无法忍受模型的响应时间,那么我们就需要想办法
解决,是增加机器还是降低模型的复杂度以提高速度;还有,在对模型大小要求比较高的场景下,我们
期望把人脸识别模型部署到一个摄像装置的小型存储芯片上面,那么模型的大小就会受到限制,需要考
虑降低模型的参数维度等。

离线应用还是在线应用?

想想我们的业务需求,如果是要使用新闻分类的类别标签结果,实时分发到用户 App 中,那我们的分
类模型就需要部署成在线的应用服务以实时响应新的内容请求。如果我们只是需要对一批已有的新闻数
据进行分类处理,而之后只是使用这些结果而不会新增新闻内容,那我们的模型就可以离线运行,把存
储的新闻处理完就可以了,或者是每隔一段时间去处理一下新的数据。
这里我主要来说一下在线应用。随着算力和业务需求的不断提升,公司里有越来越多的在线服务需
要数据挖掘模型的支撑。这里我画了一幅可能的服务架构:

在通常的业务中,有很多客户端在发起请求,我们要在不同的服务器或者 Docker 中部署多个环境及模
型,然后使用 Web 框架和 HTTP 服务响应请求,当然中间还有一层负载均衡去处理请求负载转发,以
平均服务器的压力。

一个方案

通常算法工程师或者数据挖掘工程师都忙于解决模型问题,到了模型部署阶段就头疼不已,尤其是需要
大规模并行的线上服务,可能会耗费很多时间。我在这里介绍一个简单的部署方案,希望能够为大家节
约一点时间。
Flask Web 框架:在日常的任务中可以使用 Flask 作为构建我们的 Web 服务框架,它是用 Python 来
实现的。
Gunicorn HTTP 服务:可以理解成 HTTP 服务器,需要注意的是 Gunicorn 只能运行在 Linux 服务器
上面。
Nginx 负载均衡:Nginx 是一个功能很强大的 Web 服务项目,它可以用作负载均衡器,很多大公司都
在使用。负载均衡用于通过集群中的多个服务器或实例将工作负载进行分布,目的是避免任何单一资源
发生过载,进而将响应时间最小化、程序吞吐量最大化。在上图中,负载均衡器是面向客户端的实体,
会把来自客户端的所有请求分配到集群中的多台服务器上。
客户端:业务的具体场景,可能是手机 App,也可能是其他服务器应用,客户端会向托管用于模型预测
的架构服务器发送请求。比如今日头条 App 页面下拉,将会调用推荐算法模型进行推荐内容的计算。
当然,这里的方案并不是唯一的,在实际的工作中也有很多其他的工具具备同样的功能,可以根据自己
环境和需求灵活选用。如果是在一些大公司,这些环节可能甚至不需要你考虑,会有一些成熟的平台项
目来帮你实施算法模块,不过了解一下对自己也有帮助。

项目总结

记录项目经历,学会总结和反思

在项目部署上线之后,我们的项目算是告一小小的段落了,但是不要忘了对我们的工作进行总结,整理
一下文档。总结的内容包括:从项目的需求发起,到数据准备,再到模型训练、评估、上线,这些环节
都遇到了什么样的问题,我们解决了什么问题,又有哪些问题尚未解决,如果在时间等条件充裕的情况
下还可以做哪些尝试。同时认真地做一下反思,把整个项目中的重点知识内化成自己的能力。
良好的项目总结文档会带给我们很多便利,方便我们在项目迭代时查阅,同时也是对自己工作的总结,
在做过很多项目之后,这些积累将成为你宝贵的经验与财富

多考虑一点,如何适合更多场景

当你完成了一个又一个需求之后,会发现很多需求似曾相识,但是又总有不一样的点。所以我们的数据
挖掘模型或结果能不能做成统一的服务,能不能应用在更多的地方?比如,我们在做标签系统之初,业
务 A 有一个分类标签的需求,业务 B 有一个分类标签的需求,业务 C 有一个分类标签的需求,那我们
就要一个一个地去做,A 模型给 A 用,B 模型给 B 用,C 模型给 C 用。但是过了不久又有 D 来提一个
类似 AB 的需求,所以我们就开始规划一个面向全公司更底层的标签体系架构,以应对各种类似的业
务。多考虑一点就可以把数据挖掘前置到业务需求之前,最终形成完整的业务数据闭环,而不需要再进
行冗余的开发。

监控与迭代

模型终于部署上线,但这不是说我们的数据挖掘工作就已经结束了。如今社会变动的速度也十分迅速,
我们已经做好的模型很可能在经过一段时间的运行之后就不再符合当前的线上情况了,有可能我们的产
品形态、业务需求发生了变化,这在互联网公司再正常不过了。为了我们的模型保持良好的效果,需要
有一份迭代计划去维护和更新我们的模型

模型的监控

要了解什么时候该做出调整,我们需要有一套监控的策略。这里所说的模型监控不仅仅是对服务运行状
况的监控,更是对于模型输出的结果进行监控,以查看模型在线上运行的效果是否符合预期,是否有比
较大的变化。假设我们的新闻分类模型已经部署上线,每一条新闻流过将会被标注上若干个标签,然后
进到推荐系统被召回排序分发给用户。
模型的监控可以从三个方面入手,分别是结果监控、人工定期复审以及 Case 收集与样本积累。
结果监控
结果监控主要是针对一些具体的指标进行监控,包括我们在评估环节用到的准确率、召回率等,另外还
可以根据具体产出的结果在业务中的效果进行监控。
首先可以想到的是针对每天新闻的分类标签进行排名统计,来查看每个标签的占比情况与我们的初始数
据是否接近;还可以监控到一些数据较少的类别是否能够被预测出来,这属于稳定性指标。
其次,在推荐系统中,我们还会有 CTR(点击率预估)这样的总体指标,可以对标签与 CTR 的关系进
行计算,来查看每个标签的 CTR 情况。
在一些 App 中还会有主动负反馈,让用户自己选择不喜欢的标签。通过分析这些数据可以知道我们的
模型结果是否还符合业务场景,是否需要做出一些调整。在一些长期的大型项目中,我们甚至需要建设
一些 Debug 平台,对这些数据进行持续的、可视化的监控,观察每天每周的变化情况。
人工定期复审
第二个方法就是定期进行人工复审,该方法主要针对业务需求准确率的情况进行评估,查看当前的模型
效果是否还满足业务的需求,准确率情况是否有所变化,同时也可以跟业务进行沟通评估,确认当前的
情况是否需要对模型进行重新训练。
Case 收集与样本积累
第三个,在整个监控的过程中,也需要进行 Case 的收集。通过具体的 Case 我们可以知道当前的模型
存在哪些问题,有些 Case 可能是由于模型本身的问题造成的;有些 Case 是由于我们的业务场景数据
发生了变化造成的。通过对收集的 Case 进行分析,也可以知道我们需要往哪个方向去优化模型。同
时,收集足够的 Case 也可以作为我们重新训练的样本积累,所以要注意在前期准备数据时遇到的数据
不充分或者不准确的情况,也可以在收集环节重点关注,以补全我们上一版训练时的一些缺失情况,这
样在下一次训练迭代时能够有更好的样本集。

重新开启

此时此刻,再回想一下最开始画的那张数据挖掘流程图。虽然我这里按照顺序一步步进行讲解,但实际
上,每一个步骤并不是严格独立存在的,比如我们在准备数据阶段发现数据无法解决业务需求时,那就
要返回去重新讨论业务需求与数据的问题;在训练模型阶段发现数据与模型无法匹配,或者如果要更换
其他模型时,那要回到准备数据环节;如果在模型评估的时候发现效果达不到预期,那可能要回到准备
数据环节重新处理数据,甚至要回到理解业务阶段。而在这里,我们的模型已经上线应用,但不代表工
作已经完全结束了。
我们的公司无时无刻不在发生着变化,用户群体、用户行为也在发生变化,数据采集的技术也在不断更
新,所以我们的模型也不是一成不变的,在经过一段时间的运行之后,它的能力可能无法适配当前的情
况,此时我们又要回到故事的开头,去思考业务,理解数据了。
所以说,时刻准备好重新开始。

总结

到了模型应用这一课时,关于数据挖掘流程相关的部分就已经讲完了。在这一课时,我介绍了一些关于
模型保存、模型优化、模型部署的思路,又讲了关于项目总结,乃至模型监控等内容,知识点比较零
散,难免会有一些疏漏和不足,不过这些都是平时工作中的一些总结,权当抛砖引玉。如果关于这部分
内容有什么好的想法和实践,也欢迎你提出来,集思广益、共同进步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值