[关闭]
@zmycoco 2017-03-02T14:04:31.000000Z 字数 5645 阅读 588

学习机器学习之如何根据需求选择一种算法

随着机器学习的进一步火热,越来越多的算法已经可以用在许多任务的执行上,并且表现出色。

但是动手之前到底哪个算法可以解决我们特定的实际问题并且运行效果良好,这个答案很多新手是不知道的。如果你处理问题时间可以很长,你可以逐个调研并且尝试它们,反之则要在最短的时间内解决技术调研任务。

Michael Beyeler的一篇文章告诉我们整个技术选型过程,一步接着一步,依靠已知的技术,从模型选择到超参数调整。

此处输入图片的描述

在Michael的文章里,他将技术选型分为6步,从第0步到第5步,事实上只有5步,第0步属于技术选型预积累步骤。

第0步:了解基本知识

在我们深入之前,我们要明确我们了解了基础知识。具体来说,我们应该知道有三个主要的机器学习分类:监督学习(supervised learning)、无监督学习(unsupervised learning),以及强化学习(reinforcement learning)。

此处输入图片的描述

第1步:对问题进行分类

下一步,我们要对手头上的问题进行分类。这是一个两步步骤:

就是那么简单。总而言之,我们可以通过问自己算法需要解决什么问题,进而发现算法的正确分类。

此处输入图片的描述

上面这张图包含了一些我们还没有讨论的技术术语:

第2步:找到可用的算法

现在我们有分类问题,我们可以使用工具去调研和验证算法是可行的和可实践的。

Microsoft Azure已经创建了一个方便的算法表格,这个表格显示算法可以被用于哪些问题分类。虽然这个表格是针对Azure软件,它一般适用于:

此处输入图片的描述

一些值得关注的算法是:

分类(Classification):

回归(Regression):

聚合(Clustering):

异常检测(Anomaly detection):

第3步:实现所有适用的算法

对于给定的问题,通常会有一些候选算法可以适用。所以我们如何知道哪一个可以挑选?通常,这个问题的答案不是那么直截了当的,所以我们必须反复试验。

原型开发最好分两步完成。第一步,我们希望通过最小化特征工程快速而简单地完成几种算法的实现。在这个阶段,我们主要兴趣在粗略来看那个算法表现更好。这个步骤有点类似招聘:我们会尽可能地寻找可以缩短我们候选算法列表的理由。

一旦我们将列表缩减为几个候选算法,真正的原型开发开始了。理想地,我们想建立一个机器学习流程,使用一组经过精心挑选的评估标准比较每个算法在数据集上的表现。在这个阶段,我们只处理一小部分的算法,所以我们可以把注意力转到真正神奇的地方:特征工程。

第4步:特征工程

或许比选择算法更重要的是正确选择表示数据的特征。从上面的列表中选择合适的算法是相对简单直接的,然而特征工程却更像是一门艺术。

主要问题在于我们试图分类的数据在特征空间的描述极少。利如,用像素的灰度值来预测图片通常是不佳的选择;相反,我们需要找到能提高信噪比的数据变换。如果没有这些数据转换,我们的任务可能无法解决。利如,在方向梯度直方图(HOG)出现之前,复杂的视觉任务(像行人检测或面部检测)都是很难做到的。

虽然大多数特征的有效性需要靠实验来评估,但是了解常见的选取数据特征的方法是很有帮助的。这里有几个较好的方法:

当然,你也可以想出你自己的特征描述方法。如果你有几个候选方法,你可以使用封装好的方法进行智能的特征选择。
前向搜索:

反向搜索:

使用交叉验证的准则来移除和增加特征!

第5步:超参数优化(可选)

最后,你可能想优化算法的超参数。例如,主成分分析中的主成分个数,k 近邻算法的参数 k,或者是神经网络中的层数和学习速率。最好的方法是使用交叉验证来选择。

一旦你运用了上述所有方法,你将有很好的机会创造出强大的机器学习系统。但是,你可能也猜到了,成败在于细节,你可能不得不反复实验,最后才能走向成功。

相关知识

二项式分类(binomial classification):

适用环境: 

1.各观察单位只能具有相互对立的一种结果,如阳性或阴性,生存或死亡等,属于两分类资料。
2.已知发生某一结果(阳性)的概率为p,其对立结果的概率为1−p,实际工作中要求p是从大量观察中获得比较稳定的数值。
3.n次试验在相同条件下进行,且各个观察单位的观察结果相互独立,即每个观察单位的观察结果不会影响到其他观察单位的结果。如要求疾病无传染性、无家族性等。

符号:b(x,n,p)
概率函数*:Cxnpxqn−x,其中x=0,1,⋯,n为正整数即发生的次数,Cxn=n!x!(n−x)!

例题:
掷硬币试验。有10个硬币掷一次,或1个硬币掷十次。问五次正面向上的概率是多少?

解:根据题意n=10,p=q=12,x=5
  b(5,l0,12)=C510p5q10=10!(5!(10−5)!)×(12)5×(12)5=252×(132)×(132)=0.2469
所以五次正面向上的概率为0.24609

Support vector machines

是一种监督式学习的方法,可广泛地应用于统计分类以及回归分析。支持向量机属于一般化线性分类器,也可以被认为是提克洛夫规范化(Tikhonov Regularization)方法的一个特例。这族分类器的特点是他们能够同时最小化经验误差与最大化几何边缘区,因此支持向量机也被称为最大边缘区分类器。

全文总结

所有的技术选型原理都是类似的,首先需要你的自身知识积累,然后是明确需要解决的问题,即明确需求。接下来确定一个较大的调研范围,进而进一步调研后缩小范围,最后通过实际应用场景的测试挑选出合适的技术方案或者方法。机器学习算法选择,也不例外。

参考文献主要作者介绍

Michael Beyeler:Moore/­Sloan/­WRF创新公司联合创始人、华盛顿大学生物信息学研究员,主攻仿生视觉计算理论模型,研究目标是提高视网膜假体植入患者的知觉体验。著有《OpenCV with Python Blueprints》一书,该书使用OpenCV和Python开发高级计算机视觉项目。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注