编者按:机器学习的算法很多,如何选择一直是初学者的一个痛点。本文给出了机器学习算法选择的方法和实例,不仅适用于Microsoft Azure框架,同样可以应用于其他场合。
本文目录
关于问题“我应该使用什么机器学习算法”?我们总是回答“这取决于“。这取决于数据的大小,质量和性质。这取决于你想要解决什么问题。这取决于算法上的数学知识如何转换为您正在使用的计算机的指令。这取决于你有多少时间。在尝试之前,即使是最有经验的数据科学家也不知道哪种算法的性能最好。
1、机器学习算法速查卡
Microsoft Azure机器学习算法速查卡可以帮助您从Microsoft Azure机器学习算法库中为您的预测分析解决方案选择正确的机器学习算法。本文将向您介绍如何使用它。
( 点击阅读原文下载pdf打印版)
这个速查卡的受众非常明确:即一个尝试选择一个算法在Azure Machine Learning Studio中开始机器学习的本科初级数据科学家。 这意味着它会高度概括及简化,但它会指向一个稳妥的方向。这也意味着有很多算法没有在这里列出。 随着Azure机器学习发展到包含更完整的可用方法集,我们将会添加更多算法。
这些建议是从许多数据科学家和机器学习专家的反馈和建议中汇总得来的。对此我们没有全部认同,但我试图协调我们的意见,达成粗略的共识。大多数不赞成的描述从“它取决于...”开始。
如何使用速查卡
用标签“For <path label> use <algorithm>”读取图表上的路径和算法。例如:“For speed use two class logistic regression.”有时候有多个分支都能应用。有时候,没有一个可以完美地匹配。他们提出的都是有经验的意见,所以不需要担心它的准确性。我谈到的几个数据科学家说,找到最好的算法的唯一确定的方法就是把所有的算法都试一遍。
下面是一个实验Cortana智能画廊(http://gallery.cortanaintelligence.com/)的示例,该实验针对相同的数据尝试多种算法,并比较结果:比较多类分类器:字母识别(http://gallery.cortanaintelligence.com/Details/a635502fc98b402a890efe21cec65b92)。
2、机器学习的类别
2.1、监督
监督学习算法是基于一组示例进行预测的算法。 例如,历史股票价格可用于未来价格的风险预测。每个用于训练的例子都对利益价值标上标签,在本例中是股票价格的值。监督学习算法在这些标签中识别模式。它可以使用任何有关的信息——一周的几天,季节,公司财务数据,工业的类型,地缘政治的分裂事件,并且每个算法可以识别不同类型的模式。当算法已经识别到它可识别的最佳模式,它就使用这种模式来预测没有标签的测试数据——明天的股票价格。
这是一种流行和有用的机器学习类型。除了一个例外,Azure机器学习中的所有模块都是监督学习算法。在Azure机器学习中有几种特定类型的监督学习:分类,回归和异常检测。
2.2、无监督
在无监督学习中,数据点没有与它们相关联的标签。相反,无监督学习算法的目标是以某种方式组织数据或描述其结构。这意味着将其分组到集群中或者找到不同的方式来查看复杂数据,使得它看起来更简单或更有组织。
2.3、增强学习
在增强学习中,算法选择对每个数据点进行响应。 学习算法也在短时间后接收到奖励信号,表明决定有多好。 基于此,算法修改其策略,以实现最高的奖励。目前在Azure机器学习中没有增强学习算法模块。增强学习在机器人技术中较常见,其中在一个时间点传感器读取的数据集合是数据点,并且算法必须选择机器人的下一个动作。它也是一种合适的物联网应用程序。
3、选择算法的注意事项
3.1 准确性
我们没有必要一味追求最准确的答案,有时得到近似值就足够了,这取决于你想要使用它做什么。如果是这样,您可以通过坚持使用更多的近似方法,这样可大大缩短处理时间。求近似值方法的另一个优点是它们自然倾向于避免过度拟合。
3.2 训练时间
训练模型所需的分钟或小时数在算法之间变化很大。训练时间通常与准确度密切相关,两者密不可分。此外,一些算法对数据点的数量比其他算法更敏感。当时间有限时,它可以驱动算法的选择,特别是当数据集较大时。
3.3 线性
许多机器学习算法利用线性关系。线性分类算法假定类可以由直线(或其更高维的模拟)分离。这些包括逻辑回归和支持向量机(如在Azure机器学习中实现的)。 线性回归算法假定数据趋势遵循直线。这些假设对于一些问题来说并不糟糕,但在另一些问题上,它们会使精度降低。
非线性类边界 - 依赖于线性分类算法将导致较低的准确度。
具有非线性趋势的数据 - 使用线性回归方法将产生更大的不必要的误差。
尽管它们危险,线性算法作为第一攻击线非常流行。它们倾向于在算法上简单和快速地训练数据。
3.4 参数数量
参数是数据科学家在设置算法时要进行的转换。它们是影响算法行为的数字,例如错误容限或迭代次数,或算法运行方式的变换之间的选项。训练时间和算法的准确性有时可能对正确的设置相当敏感。通常,具有大量参数的算法需要最多的试验和误差来找到良好的组合。
或者,Azure机器学习中有一个参数扫描(https://docs.microsoft.com/en-us/azure/machine-learning/machine-learning-algorithm-parameters-optimize)模块,可以结合任何您选择的粒度自动尝试所有参数组合。虽然这是确保跨越参数空间的好方法,但训练模型所需的时间随参数数量呈指数增长。
上面所指的具有较多参数表明了一个算法的灵活性较好。它通常可以达到非常好的精度。 只要您能找到正确的参数设置组合。
3.5 特征数
对于某些类型的数据,与数据点的数量相比,特征的数量可能非常大。这通常是遗传问题或文本数据的情况。大量的特征可以使一些学习算法停滞,使训练时间长得不现实。支持向量机特别适合这种情况(见下文)。
3.6 特殊情况
一些学习算法对数据的结构或期望的结果做出特定的假设。如果你能找到一个符合你需要的假设,它可以给你更有用的结果,更准确的预测或更快的训练时间。
算法 | 准确性 | 训练时间 | 线性关系 | 参数 | 备注 |
二分类 | |||||
逻辑回归 | ● | ● | 5 | ||
决策森林 | ● | ○ | 6 | ||
决策丛林 | ● | ○ | 6 | 占用内存低 | |
boosted决策树 | ● | ○ | 6 | 占用内存大 | |
神经网络 | ● | 9 | 可以进行其它定制 | ||
平均感知器 | ○ | ○ | ● | 4 | |
支持向量机 | ○ | ● | 5 | 适合大型特征集 | |
局部支持向量 | ○ | 8 | 适合大型特征集 | ||
贝叶斯分类器 | ○ | ● | 3 | ||
多分类 | |||||
逻辑回归 | ● | ● | 5 | ||
决策森林 | ● | ○ | 6 | ||
决策丛林 | ● | ○ | 6 | 占用内存低 | |
神经网络 | ● | 9 | 可以进行其它定制 | ||
one-v-all | - | - | - | - | 依赖于二元分类器 |
回归 | |||||
线性 | ● | ● | 4 | ||
贝叶斯线性 | ○ | ● | 2 | ||
决策森林 | ● | ○ | 6 | ||
boosted决策树 | ● | ○ | 5 | 占用内存大 | |
快速森林分位数 | ● | ○ | 9 | 预测分布而不是点 | |
神经网络 | ● | 9 | 可以进行其它定制 | ||
泊松 | ● | 5 | 技术上对数线性。 用于预测计数 | ||
序数 | 0 | 用于预测秩序 | |||
异常值检测 | |||||
支持向量机 | ○ | ○ | 2 | 特别适用于大型特征集 | |
基于PCA的异常检测 | ○ | ● | 3 | ||
K-means | ○ | ● | 4 | 一个聚类算法 |
算法属性:
● - 具有出色的准确度,快速的训练时间和线性的使用
○ - 显示良好的准确性和适度的训练时间
算法注释
4.1 线性回归
如前所述,线性回归(https://msdn.microsoft.com/library/azure/dn905978.aspx)拟合数据集的线(或平面或超平面)。这个方法比较耐用,简单和快速,但它可能对一些问题过于简单。在这里查看线性回归教程(https://docs.microsoft.com/en-us/azure/machine-learning/machine-learning-linear-regression-in-azure)。
有线性趋势的数据。
4.2 逻辑回归
虽然此名称中包含“回归”较容易混淆,逻辑回归实际上是一个强大的工具,可用于两类(https://msdn.microsoft.com/library/azure/dn905994.aspx)和多类(https://msdn.microsoft.com/library/azure/dn905853.aspx)分类。它快速和简单。事实上,它使用“S”形曲线而不是直线,这使得它自然适合将数据分组。逻辑回归给出线性类边界,因此当您使用它时可以做到确保线性近似。
对只有一个特征的两类数据的逻辑回归- 类边界是逻辑曲线与两个类接近的点。
4.3 树,森林和丛林
决策树(回归,两类和多类),决策丛林(两类和多类)和boosted决策树(回归和两类)都基于一个基础机器学习概念——决策树。决策树有许多变量,但它们都做同样的事情,就是将特征空间细分成具有大致相同标签的区域。这些可以是类别一致或恒定值的区域,取决于您是进行分类还是回归。
决策树将特征空间细分为大致均匀值的区域。
因为特征空间可以被细分为任意小的区域,所以很容易想象将它分得很似足以使每个区域具有一个数据点 - 过拟合的极端例子。为了避免这种情况,使用特殊的数学计算来构建树的一个很大的集合,使得树之间不相关。这个“决策森林”的平均值是一个避免过度拟合的树。决策森林可以使用大量的内存。决策丛林是决策森林的一种变体,其消耗较少的内存,但是牺牲了稍长的训练时间。
Boosted决策树通过限制它们可以细分的次数以及在每个区域中允许多少数据点来避免过度拟合。该算法构造树的序列,每个树都学习补偿树之前剩下的错误。结果是一个非常精确的学习,倾向于使用大量的内存。有关完整的技术说明,请查看Friedman的原始论文(http://www-stat.stanford.edu/~jhf/ftp/trebst.pdf)。
快速森林分位数回归(https://msdn.microsoft.com/library/azure/dn913093.aspx)是决策树的变体,对于特殊情况,您不仅要了解区域内数据的典型(中值)值,还要了解其以分位数形式的分布。
4.4 神经网络和感知器
神经网络是涵盖多类,两类和回归问题的脑启发学习算法。它们有无限种类,但Azure机器学习中的神经网络都是有向无环图的形式。这意味着输入特征在被转换成输出之前通过一系列层向前(不向后)传递。在每个层中,输入以各种组合加权,求和,并传递到下一层。这种简单计算的结合导致了学习复杂的类边界和数据趋势的能力,就像魔法一样。这种多层次的网络进行了“深度学习”助长了如此多的技术报告和科幻小说。
但是这种高性能不是那么容易就能得到的。神经网络可能需要很长时间来训练,特别是对于具有大量特征的大数据集。它们还具有比大多数算法更多的参数,这意味着参数扫描大大扩展了训练时间。对于那些希望指定自己的网络结构(http://go.microsoft.com/fwlink/?LinkId=402867)的超越者来说,可能性是不竭的。
神经网络学习的边界可能是复杂和不规则的
两类平均感知器是(https://msdn.microsoft.com/library/azure/dn906036.aspx)神经网络对飞涨训练时间的回答。它使用给出线性类边界的网络结构。根据今天的标准,它几乎是原始的,但它在历史上一直工作稳定,且足够小去快速学习。
4.5 SVM
支持向量机(SVM)用以找到尽可能宽的边界分隔类的边界。当两个类不能被清楚地分开时,算法找到它们能找到的最佳边界。正如在Azure机器学习中所写的,两类SVM仅使用直线。(在SVM中,它使用线性内核。)因为它使得这种线性近似,它能够相当快地运行。它真正发光的是功能强大的数据,如文本或基因组。在这些情况下,除了仅需要适量的存储器之外,SVM能够比大多数其他算法更快地分离类并且具有更少的过拟合。
典型的支持向量机类边界使分离两个类的边缘最大化
Microsoft Research的另一个产品,二分类局部SVM(https://msdn.microsoft.com/library/azure/dn913070.aspx)是SVM的非线性变体,保留线性版本的大部分速度和内存效率。它是理想的情况下,线性方法不能提供足够准确的答案。开发人员通过将问题分解成一系列小的线性SVM问题来保持快速。阅读完整的描述(http://research.microsoft.com/um/people/manik/pubs/Jose13.pdf)以了解他们如何脱离这个伎俩的细节。
使用非线性SVM的一个聪明的扩展,一类SVM(https://msdn.microsoft.com/library/azure/dn913103.aspx)绘制一个严格概括整个数据集的边界。它对异常检测很有用。远在该边界之外的任何新数据点是不寻常的,值得注意。
4.6 贝叶斯方法
贝叶斯方法具有非常理想的质量:它们能避免过度拟合。它们通过事先对回答的可能分布做出一些假设来做到这一点。这种方法的另一个副产品是它们具有非常少的参数。 Azure机器学习具有用于分类(贝叶斯分类器https://msdn.microsoft.com/library/azure/dn905930.aspx)和回归(贝叶斯线性回归https://msdn.microsoft.com/library/azure/dn906022.aspx)的贝叶斯算法。注意,这些假设数据可以被分割或用直线拟合
在历史上,Bayes' point machines由微软研究所开发的。他们有一些非常美丽的理论工作在他们身后。感兴趣的学生可参考MLR中的原始文章(http://jmlr.org/papers/volume1/herbrich01a/herbrich01a.pdf)和Chris Bishop的有见地的博客(http://blogs.technet.com/b/machinelearning/archive/2014/10/30/embracing-uncertainty-probabilistic-inference.aspx)。
4.7 专业算法
如果你有一个非常具体的目标,你可能是幸运的。在Azure机器学习集合中有专门用于排序预测(有序回归https://msdn.microsoft.com/library/azure/dn906029.aspx),计数预测(泊松回归https://msdn.microsoft.com/library/azure/dn905988.aspx)和异常检测(基于主成分分析https://msdn.microsoft.com/library/azure/dn913102.aspx和基于支持向量机https://msdn.microsoft.com/library/azure/dn913103.aspx的一种)的算法。还有一个孤立的聚类算法(K均值https://msdn.microsoft.com/library/azure/5049a09b-bd90-4c4e-9b46-7c87e3a36810/)。
基于PCA的异常检测 - 绝大多数数据落入定型分布; 怀疑与该分布显着偏离的点
使用K均值将数据集合分成5个聚类
还有一个集合one-v-all的多类分类器,它将N类分类问题分解成N-1个两类分类问题。 准确度、训练时间和线性属性由所使用的两类分类器确定。
一对二类分类器组合形成三类分类器
Azure机器学习还包括访问标题Wowpal Wabbit(https://msdn.microsoft.com/library/azure/8383eb49-c0a3-45db-95c8-eb56a1fef5bf)下的一个强大的机器学习框架。VW在这里分类,因为它可以学习分类和回归问题,甚至可以从部分未标记的数据学习。您可以将其配置为使用多种学习算法,丢失函数和优化算法中的任何一种。它的设计从根本上是高效,平行,非常快的。它可以轻易地处理大型功能集。由微软研究公司自己的John Langford领导,VW是一个股票汽车算法领域的一级方程式。不是每个问题都适合VW,但如果你的适合,这值得你在其界面上爬学习曲线。它也可以作为多种语言的独立开源代码(https://github.com/JohnLangford/vowpal_wabbit)。
PPV课翻译 转载请申请授权
博客地址:http://blog.yoqi.me/?p=2774
这篇文章还没有评论