如何快速进行一个机器学习项目的系统设计?(system design)

1 在进行具体的系统设计之前需要进行的准备工作

在机器学习项目中,除了对具体“学习器”的设计工作之外,还需要对以下几个问题进行重点考虑:

  1. 数据来源:如何获得我们需要的数据是一个十分严肃的问题,在面对不同的项目需求时,获取数据的方式差异显著。以“垃圾邮件分类”为例我们既可以收集已有的数据(如购买或项目方给予),也可以通过主动构建“陷阱账户”开放门户来收集大量的垃圾邮件(“草船借箭”)。
  2. 如何组织已有的数据:配合学习器,数据对应了不同的组织方式,数据的组织方式对于提升成功率具有重要意义,同样以垃圾文件分类问题为例,我们可以怎样组织数据呢?
    垃圾邮件由文本构成,有效地组织文本内容是关键。如一些学习器要求将输入组织为向量,以下为一种可能的组织方式:分析大量邮件内容,通过人工或其他有效方式确定邮件常用词汇(一些研究显示,目前邮件内容中的常用词汇在10000-50000个),将这些词汇组织为一维向量,每篇邮件对应一个输入向量,向量值为对应位置词汇出现的次数,如(now, discount, buy, ...)------>(1,1,0,...)。

2 启动一个项目通过 ‘error analysis’

很多人在进行机器项目的时候都倾向于先构建一个“自认为简单”的实现方法,但事实上这个方法可能就需要花上一个星期甚至更长的时间进行设计,这是不合理的。“实践是检验真理的唯一标准”,如果能够接受实践的检验我们将更加高效地进行项目的构建,(个人认为如果能取得一个好的折中是更好的,但是这是需要大量经验支撑的)更推荐的方式是快速组织一个简单粗暴(quick and dirty)的实现方法,快速验证想法再进行根据实验结果进行优化。以下同样以垃圾邮件分类问题为例进行分析:
介绍error analysis 之前我也强烈建议在项目的启动阶段通过绘制learning curve的方法来为项目优化提供方向(learning curve是由样本量m作为横坐标,error作为坐标,通过分别绘制J_cv与J_train来判断学习器目前困境的方法),通过绘制learning curve我们可以快速判断学习器目前所处的状态,是处于欠拟合状态还是过拟合状态?为我们指明方向,避免白用功。以下介绍的error analysis方法则更偏实际应用,十分直观,当然同时也是十分行之有效的方法。
题目描述
以上述题目为例(注意这里划分了validation set,一般而言数据集会划分为三个集合training set,validation set 以及 test set,三者分别对应了训练模型,检验模型,测试模型的功能;部分机器学习的“研究人员”习惯直接在training 或者 test 数据集上畸形检验,这是不合理的(会影响数据分布,降低结果的可靠性,具体数学原理笔者也难以顺清,感兴趣的同学可以自行检索),为保证泛化性能,强烈推荐使用validation数据集进行模型的检验)
在500个validation数据集上,有一百个样本判断错误,利用error analysis我们的分析过程应该是这样的:
1.这些错误样本的特征是什么?
2.面对这些特征我们可以如何改进我们的算法?

有了以上两点疑问,我们就有了模型优化的方向,例如:我们发现100个错误样本中大多数都是关于“电商类”信息,那么我们就应该针对这类邮件进行专门的改进或处理;而对于解决方案则有太多方向可以考虑:如我们是否可能需要考虑各个单词的时态问题(如run与ran是否作为同样的单词进行考虑?),是否要考虑单词的大小写问题(如YOU与you),是否要考虑符号问题(如一些垃圾邮件更喜欢使用“!!!”)等等
同时为了提高效率,我们还需要选定一个统一的评价标准(error metrix)最好是一个简单实数类型的判断标准,更加方便快速;当然这里并不是说更加复杂的统计评价方法不可行以帮助我们快速确定方向,如对于分类问题可以选择“错误率”作为择优标准等。

3 面对不对称分类skew class问题的误差评估

什么是不对称分类?
例如在一个二分类问题中总共用500个样本,其中正例仅有1例,而反例则有499例,这种情况即为不对称分类问题。下面举一个具体的例子:
示例
假设我们面对的是一个判断是否具有癌症的二分类问题。假设当前学习器给出的模型能够做到只有1%的error,即正确率为99%,这听起来已经是一个很多错的模型了。但是如果事实上“患癌症的概率为0.5%”,在这种情况下如果我们将学习器改为“将所有样本预测为非患癌症”(事实上这里是一个直接预测器,不需要学习)那么此时我们的错误率只有0.5%(挺神奇)。如此说来,在面对这样有偏斜类(skew class)的问题的时候,简单地用一个实数来评价一个模型是不够的。
下面介绍一种常用的评价方法:Precision and Recall,中文为查准率与查全率。先给出一张Andrew PPT中的图片:
什么是查全率与查准率
在计算P与R时我们首先需要根据问题以及预测结果绘制预测矩阵,并标定出TP,TN,FP,FN四个值,接着便可以计算P与R的值。上图中有计算公式,我再进行一个我自己所理解的直观解释,希望有助于各位理解:
Precision(查准率):在学习器预测的所有正类(Positive)中,有多少事实上为正类
Recall(查全率):事实上为正类的样本,有多少被学习器所预测出来了
从以上对P-R的解释中,相信大家已经看出,这是一对相互矛盾的定义,很难使得两者都保持在较高的水准,再进行一个直观的解释:假设我们现在在甄别杀人凶手,如果我们的目标是提高Precision,也就是说我们要保证正确率,不冤枉好人,那么我们势必会很谨慎;而如果我们的目标是提高Recall,也就是要保证抓到杀人凶手,那么我们的做法就会是“宁可错杀一千不能放过一个”。相信这样解释后大家能够理解我所说的对立的意义
事实上,如果我们采用了P-R作为评价标准,那么我们可以发现之前所提到的癌症问题中的例子就得到解决了,当我们预测所有都为非癌症时,我们可以算得Recall=0,这显然不是一个好模型。因此使用P-R作为评价标准还可以避免“欺骗”。

4 如何权衡P-R

首先给出一张Andrew PPT上的图片:
权衡P-R
对模型评价有一定了解的同学应该已经看出来了,前面所说的P-R即我们常用的“P-R图”中所指,那么如何来权衡P-R之间的关系呢?
追求更高的准确率与追求更高的查全率需要根据具体的项目需求权衡。如上图中所示,当我们调整分类threshold(大于该阈值认为为positive,否则为negative)值的大小时我们将得到不同的P与R,高的threshold说明我们只有在极其确定的情况下才会认为是正类,而低的threshold则表明有一点迹象就认为是正例。
那么是否有一个更统一的标准来帮助我们判断模型的优劣呢?F_1 score是常用的评价方式之一:
F1
可以看出,普通的Average无法起到有效的判断,而F1 score则起到了不错的效果,事实上,F1 score是P与R的调和平均值,与算数平均值以及集合平均值相比,调和平均值更重视小值

5 Data for machine learning,什么时候我们更需要大量的数据?

在这里插入图片描述
上图中所说的“并非一个算法决定了能够取得好的效果,而是数据量决定”,虽然不愿意承认,但是很多时候我们不得不认为这是有道理的。那么什么时候这句话是正确的,什么时候这句话不那么准确呢?
在这里插入图片描述
如上图所示,一般而言,当我们拥有更多的数据,模型的结果都将保持一个上升的趋势,甚至在大数据量面前,一个不那么优秀的模型甚至能够取得更好的效果。但是事情并非绝对的,如果我们能够分清状况那么能够为我们节省大量的精力与时间,帮助我们快速展开工作。
1.“人类学家”方法(哭笑不得)
在这里插入图片描述
这是一种很直观,但事实上有效的方法。假设现在我们面临一个数据收集的问题:是否需要去收集大量的数据x呢?那么这时我们可以先假设有一个精通该领域的人类学家,面对我们的项目需求(假设是房价预测),当我们给出x时,人类学家能够快速反应给出答案或者说能否做到准确预测呢?如果答案是肯定的,那么就有收集价值;否则,该数据集没有收集的价值。以房价预测为例,这里给出一种可能,如果数据集x表示的是“屋顶的装潢”,那么可能没有太多意义;如果x表示的是“房屋面积,所处位置…”那么就具有收集的意义。(个人认为这个方法是建立在当前的学习器尚且只能处理人类能够反映的问题)

2.模型分析的方法
学习器的bias以及variance,分别表征了学习器的学习偏差与学习波动。越复杂的学习器具有越高的variance,相应而言bias就更小。下图为我自己手画,希望能有助于大家理解:
bias与variance
上图中红色的中心表示真实的问题域,而f_1表示复杂度较低的学习器,f_2表示复杂度更高的学习器(越复杂的学习器所能模拟的问题就越广,所以问题域是一种包含关系),二者都能够描述问题(红心),但是我们可以看出,f_1的bias更大,variance小,而f_2的bias小而variance大。
如果我们的学习器的模拟能力强,那么大量的数据就能够帮助我们逐渐缩小variance,但是如果我们的学习器本身就具有较大的偏差,那么这时大量数据的效果就不会那么显著。
以上就是两种使用地较为广泛的,当面对数据收集问题时我们可以采用的思考角度,希望有帮到大家。

结语:以上即为本篇文章的全部内容,本文对机器学习项目的构建进行了一个简单地总结(基于Andrew课堂内容以及自我的总结,强烈推荐英语基础不错的同学去听Andrew Ng的课,简单易懂),同时也提到了一些项目构建过程中可能遇到的问题及解决方案。

引用请注明来源

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值