在我们了解了需要解决的机器学习问题的类型之后,我们可以开始考虑搜集来的数据的类型以及我们可以尝试的机器学习算法。在这个帖子里,我们会介绍一遍最流行的机器学习算法。通过浏览主要的算法来大致了解可以利用的方法是很有帮助的。
可利用的算法非常之多。困难之处在于既有不同种类的方法,也有对这些方法的扩展。这导致很快就难以区分到底什么才是正统的算法。在这个帖子里,我希望给你两种方式来思考和区分在这个领域中你将会遇到的算法。
第一种划分算法的方式是根据学习的方式,第二种则是基于形式和功能的相似性(就像把相似的动物归为一类一样)。两种方式都是有用的。
学习方式
基于其与经验、环境,或者任何我们称之为输入数据的相互作用,一个算法可以用不同的方式对一个问题建模。在机器学习和人工智能教科书中,流行的做法是首先考虑一个算法的学习方式。
算法的主要学习方式和学习模型只有几个,我们将会逐一介绍它们,并且给出几个算法和它们适合解决的问题类型来作为例子。
-
监督学习:输入数据被称为训练数据,它们有已知的标签或者结果,比如垃圾邮件/非垃圾邮件或者某段时间的股票价格。模型的参数确定需要通过一个训练的过程,在这个过程中模型将会要求做出预测,当预测不符时,则需要做出修改。
-
无监督学习:输入数据不带标签或者没有一个已知的结果。通过推测输入数据中存在的结构来建立模型。这类问题的例子有关联规则学习和聚类。算法的例子包括Apriori算法和K-means算法。
-
半监督学习:输入数据由带标记的和不带标记的组成。合适的预测模型虽然已经存在,但是模型在预测的同时还必须能通过发现潜在的结构来组织数据。这类问题包括分类和回归。典型算法包括对一些其他灵活的模型的推广,这些模型都对如何给未标记数据建模做出了一些假设。
-
强化学习:输入数据作为来自环境的激励提供给模型,且模型必须作出反应。反馈并不像监督学习那样来自于训练的过程,而是作为环境的惩罚或者是奖赏。典型问题有系统和机器人控制。算法的例子包括Q-学习和时序差分学习(Temporal Difference Learning)。
当你处理大量数据来对商业决策建模时,通常会使用监督和无监督学习。目前一个热门话题是半监督学习,比如会应用在图像分类中,涉及到的数据集很大但是只包含极少数标记的数据。
算法相似性
通常,我们会把算法按照功能和形式的相似性来区分。比如树形结构和神经网络的方法。这是一种有用的分类方法,但也不是完美的。仍然有些算法很容易就可以被归入好几个类别,比如学习矢量量化,它既是受启发于神经网络的方法,又是基于实例的方法。也有一些算法的名字既描述了它处理的问题,也是某一类算法的名称,比如回归和聚类。正因为如此,你会从不同的来源看到对算法进行不同的归类。就像机器学习算法自身一样,没有完美的模型,只有足够好的模型。
在这个小节里,我将会按照我觉得最直观的方式列出许多流行的机器学习算法。虽然不管是类别还是算法都不是全面详尽的,但我认为它们都具有代表性,有助于你对整个领域有一个大致的了解。如果你发现有一个或一类算法没有被列入,将它写在回复里和大家分享。让我们来开始吧。
回归分析
回归是这样一种建模方式,它先确定一个衡量模型预测误差的量,然后通过这个量来反复优化变量之间的关系。回归方法是统计学的主要应用,被归为统计机器学习。这有些让人迷惑,因为我们可以用回归来指代一类问题和一类算法。实际上,回归是一个过程。以下是一些例子:
- 普通最小二乘法
- 逻辑回归
- 逐步回归
- 多元自适应样条回归(MARS)
- 局部多项式回归拟合(LOESS)
基于实例的方法
基于实例的学习模型对决策问题进行建模,这些决策基于训练数据中被认为重要的或者模型所必需的实例。这类方法通常会建立一个范例数据库,然后根据某个相似性衡量标准来把新数据和数据库进行比较,从而找到最匹配的项,最后作出预测。因此,基于实例的方法还被叫做“赢者通吃”方法和基于记忆的学习。这种方法的重点在于已有实例的表示以及实例间相似性的衡量标准。
- K最近邻算法(kNN)
- 学习矢量量化(LVQ)
- 自组织映射(SOM)
正则化方法
这是对另一种方法(通常是回归分析方法)的扩展,它惩罚复杂度高的模型,倾向推广性好的更加简单的模型。我在这里列下了一些正则化的方法,因为他们流行、强大,而且通常只是对其他方法简单的改进。
- 岭回归
- 套索算法(LASSO)
- 弹性网络
决策树学习
决策树方法对决策过程进行建模,决策是基于数据中属性的实际数值。决策在树形结构上分叉直到对特定的某个记录能做出预测。在分类或者回归的问题中我们用数据来训练决策树。
- 分类与回归树算法(CART)
- 迭代二叉树3代(ID3)
- C4.5算法
- 卡方自动互动检视(CHAID)
- 单层决策树
- 随机森林
- 多元自适应样条回归(MARS)
- 梯度推进机(GBM)
贝叶斯算法
贝叶斯方法是那些明确地在分类和回归问题中应用贝叶斯定理的算法。
- 朴素贝叶斯算法
- AODE算法
- 贝叶斯信度网络(BBN)
核函数方法
核函数方法中最为出名的是流行的支持向量机算法,它其实是一系列方法。核函数方法关心的是如何把输入数据映射到一个高维度的矢量空间,在这个空间中,某些分类或者回归问题可以较容易地解决。
- 支持向量机(SVM)
- 径向基函数(RBF)
- 线性判别分析(LDA)
聚类方法
就像回归一样,聚类既表示一类问题,也表示一类方法。聚类方法一般按照建模方式来划分:基于质心的或者层级结构的。所有的方法都是利用数据的内在结构来尽量地把数据归入具有最大共性的一类里。
- K均值法
- 最大期望算法(EM)
关联规则学习
关联规则学习是提取规则的一类算法,这些规则能最好地解释观测到的数据中的变量之间的关系。这些规则能在大型多维数据集中发现重要且在商业上有用的关联,然后进一步被利用。
- Apriori算法
- Eclat算法
人工神经网络
人工神经网络是受启发于生物神经网络的结构和/或功能的算法。它们是一类常用在回归和分类问题中的模式匹配方法,但其实这个庞大的子类包含了上百种算法和算法的变形,可以解决各种类型的问题。一些经典流行的方法包括(我已经把深度学习从这个类中分出来了):
- 感知器
- 反向传播算法
- Hopfield神经网络
- 自适应映射(SOM)
- 学习矢量量化(LVQ)
深度学习
深度学习方法是利用便宜冗余的计算资源对人工神经网络的现代改进版。这类方法试图建立大得多也复杂得多的神经网络,就如前面说到的,许多方法都是基于大数据集中非常有限的标记数据来解决半监督学习问题。
- 受限玻尔兹曼机(RBM)
- 深度信念网(DBN)
- 卷积神经网络
- 层叠自动编码器(SAE)
降维方法
如同聚类方法,降维方法试图利用数据中的内在结构来总结或描述数据,所不同的是它以无监督的方式利用更少的信息。这对于可视化高维数据或者为之后的监督学习简化数据都有帮助。
- 主成分分析(PCA)
- 偏最小二乘法回归(PLS)
- 萨蒙映射
- 多维尺度分析(MDS)
- 投影寻踪
集成方法
集成方法由多个较弱模型组合而成,这些子模型独立训练,它们的预测结果以某种方式整合起来得出总的预测。很多努力都集中在选择什么类型的学习模型作为子模型,以及用什么方式整合它们的结果。这是一类非常强大的技术,因此也很流行。
- 推进技术(Boosting)
- 自展集成(Bagging)
- 适应性推进(AdaBoost)
- 层叠泛化策略(Blending)
- 梯度推进机(GBM)
- 随机森林
这是一个最适曲线集成的例子。弱成员用灰色线表示,整合后的预测用红色。这个图显示了温度/臭氧数据,曲线出自使用局部多项式回归拟合(LOESS)的模型。
机器学习基础:线性回归
这边再特别讲述一下线性回归
1.什么是机器学习与线性回归?
什么是训练集?
一种评价线性回归是否拟合训练集的方法:代价函数。
一种解决线性回归问题的方法:梯度下降。
2.线性回归(Linear Regression)是利用称为线性回归方程的最小平方函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析,它是机器学习中,解决监督学习的回归问题的一种方法,它会从给定的训练集中学习出一个线性函数。
举个例子,将训练集中的数据点描绘在平面直角坐标系上,如下图:
通过线性回归方法,我们可以拟合出一条直线,如下图:
关于线性回归
图中的点的x与y大致呈线性关系,使用的是这样的模型:
之后让计算机利用训练集“学习”出参数的值,进而得到尽量接近点的直线。
对于多元自变量,如两个自变量 可以使用这样的模型 :
如果点不是线性分布呢?
假如数据点近似正弦函数分布,没关系,我们可以使用三次多项式拟合。
↑
得到的拟合结果
当计算机根据训练集“学习”得到一个模型后,可以利用这个模型对新数据进行预测。比如上面的直线模型例子中,对于新的X值,可以根据对应直线函数,计算出对应的预测值Y。
3.训练集
训练集属于样本的一部分,它被用来估计模型。回到How-Old.net中推断年龄的问题中来,这里的训练集中,输入数据(特征值)为脸部特征数据,它们与年龄密切相关,比如皮肤褶皱、眼部皮肤色泽、嘴唇与鼻子的松弛程度等等,它们被量化,作为自变量 ;而对应的年龄值,记为输出变量(目标值)Y。
利用线性回归,计算机通过学习找到输入变量与目标变量的关系,得到一个较优的模型。当我们上传一张相片时,它便会从相片中提取特征值X,根据这个模型推断出年龄Y.。
4.如何实现线性回归呢?
利用代价函数/损失函数(Cost Function/Error Function)可以量化地告诉计算机,当前学习的模型的优劣程度,即线性函数拟合的好坏程度。
代价函数有很多种,比如平方损失函数、对数损失函数。在线性回归方法中,我们往往使用平方损失函数,它的函数式为:
↑
这个函数衡量了预测值和真实值的距离。代价函数越小,说明线性回归得越好。
因此,要曲线拟合得更好,我们的目标是让J值尽量变小。
5.如何让J值(代价)变小呢?
我们不妨看一张图,Z轴代表代价值,X、Y轴代表学习参数 。
没错,我们可以使用梯度下降算法(Gradient Descent)。
梯度下降算法有很多种实现形式,但本质是一样的。我们把代价函数看作一座山,站在山坡上环视,可以找到最快下山的方向(通过求偏导数得到的梯度方向的反方向)。而且很幸运,在线性回归中,代价函数为凸函数(Convex Function),即最小极值点为全局极小点。我们无论一开始站在山上的哪一点,最终一定能到达这座山的最低点。
通过以上方法,我们可以让计算机根据训练集学习出一个简单的模型了,要想得到更好的模型,还需要考虑特征缩放、过拟合、欠拟合等等问题。
在这里,推荐一些链接,希望大家能够更好地了解机器学习。
1.斯坦福大学Andrew Ng教授的机器学习课程:
https://www.coursera.org/learn/machine-learning
2.机器学习入门:线性回归及梯度下降 by xiazdong
http://blog.csdn.net/xiazdong/article/details/7950084
3.从曲线拟合问题窥视机器学习中的相关概念 by 下一步
http://blog.csdn.net/fangqingan_java/article/details/9265147