机器学习入门
概述
一般提到机器学习,总会让人想到高深的算法,复杂运算,仿佛是只有科学家才能玩的东西,对普通人来说可望不可及。 其实,随着PC性能的飞速发展,以及大数据技术的发展,机器学习也可以像其他IT技术一样,走进普通程序员的生活。
本文是机器学习的入门介绍,它的目的不是介绍机器学习的原理,也不会介绍机器学习的各个算法是如何推导的。 本文主要是介绍有哪些流行的机器学习算法,各个算法适用于哪些场景,各有什么优缺点等等。
本文目的是为了让读者对机器学习有个整体的印象。当你想在自己的项目中融入些机器学习的时候,可以知道如何去选择已有的各种机器学习技术。
机器学习的方式
根据具体的项目情况来决定采用哪种学习方式,一般有以下3种学习方式:
监督学习
是指有求知欲的学生从老师那里获取知识、信息,老师提供对错指示、告知最终答案的学习过程。 这一类机器学习的典型任务包括:预测数值型数据的回归、预测分类标签的分类、预测顺序的排序等。
无监督学习
是指在没有老师的情况下,学生自学的过程。 无监督学习在人造卫星故障诊断、视频分析、社交网站解析和声音信号解析等方面大显身手。
强化学习
与监督学习类似,也以使计算机获得对没有学习过的问题做出正确解答的泛化能力为目标,但是在学习过程中,不设置老师提示对错、告知最终答案的环节。 在机器人的自动控制、计算机游戏中的人工智能、市场战略的最优化等方面均有广泛应用。
机器学习的算法分类
所谓算法,其实就是根据 输入 计算出 输出 的过程。 算法的细节很多,但是大致有如下的分类:
回归
有输入和输出样本,验证算法通过输入样本后得到的 输出 和 输出样本 中的值有多少偏差
分类
只有输入样本,但是不知道输出样本。根据输入样本将 输出结果 进行分类。
异常检测
只有输入样本,一般采用密度估计算法,将偏离密度中心的一定程度的 输出结果 定为异常。
聚类
只有输入样本,根据输入样本将 输出结果 按照相似度进行分类。
降维
只有输入样本,从输入样本中提取关键信息,简化输入样本后在进行计算得到 输出结果 降维时注意,输入样本的数据分布性质,数据间的近邻关系不发生变化。
具体的学习算法介绍
各个算法之间不是完全孤立的,在实际情况中,往往是根据具体的数据,交叉采用一种过几种算法来达到较好的学习效果。
所有的机器学习算法都是为了求解以下算式中的函数 f
y = f(x)
其中 x 是输入样本,不一定是一个简单的值,有可能是个向量之类的数据, y 是输出样本,和 x 一样,也不一定就是简单的值, f 是学习出来的 处理函数,学会了f之后,遇到新的x,机器就会自己计算出y,也就是机器可以自动处理未知情况了。
最小二乘学习法
这是最基础的机器学习方法,其他很多算法都是基于最小二乘学习法的,首先了解它可以作为了解其他算法的基础。
在大规模数据中,直接用最小二乘法不仅耗时长,而且会消耗过多资源,导致计算资源不足。
带约束的最小二乘学习法
带约束的原因是直接使用最小二乘学习法会导致求解的函数过度复杂,特别是样本数据中含有错误数据的时候,学习出的函数f会更复杂。
加上约束条件,就是函数 f 在一定偏差范围内满足 y=f(x) 即可。 相比于不带约束条件的 f,精度上有所下降,但是复杂度也下降了,计算速度更快。
稀疏学习
稀疏学习也属于带约束的学习方法,带约束的最小二乘学习法解决了最小二乘学习法的过度拟合问题。 稀疏学习则是为了解决带约束的最小二乘学习法的学习速度问题,
带约束的最小二乘学习法在参数比较多的情况下,计算速度会很慢。 如果将一部分或者大部分参数设置为0,那么计算速度则会大大提高,所以稀疏学习的关键在于: 通过迭代的方式找出那些可以设置0的参数,使得这些参数设置为0之后,得到的函数 f 和不设置为0时的函数 f 差别不大。
鲁棒学习
鲁棒性是指 在统计学领域和机器学习领域,对异常值也能保持稳定,可靠的性质。
机器学习的鲁棒性可以保证在大量数据中的异常值出现时,函数 f 的曲线不会偏离的太离谱。
增加鲁棒性的方法如下:
最小绝对值偏差学习
最小绝对值偏差学习比最小二乘学习受异常值的影响要小,鲁棒性比较高。 但是高的鲁棒性也会导致训练样本和学习模型不十分吻合。
Huber损失最小化学习
Huber损失最小化学习在 鲁棒性 和 学习模型的有效性之间取得了很好的平衡。
图基损失最小化学习
在严峻状况下的机器学习,采用图基损失最小化学习是比较好的选择。
l1约束的Huber损失最小化学习
这是稀疏学习中的鲁棒学习法。
基于最小二乘法的分类
分类算法主要用在模式识别。 所谓 模式识别 就是指将样本分类到不同的类别中的算法。
最简单的分类算法是 0/1 损失算法。
支持向量机分类
0/1 损失算法在真实情况下使用时还是有些不自然。 所以才有了 支持向量机分类 这种更接近真实情况的模式识别算法。
支持向量机分类 算法支持线性,非线性的方式对样本进行分类,同时,也可以像鲁棒学习进行扩展。
集成分类
集成学习是指把性能较低的多种弱学习器,通过适当的组合而形成高性能的强学习器的方法。
集成学习方法主要有2种:
- Bagging 学习方法 (BootstrapAggregation) 对多个弱学习器独立进行学习,对各个学习结果求取平均值,得到高性能的学习器。
- Boosting 学习方法 对多个弱学习器依次学习,根据学习结果, 对分类正确率高的学习器,加大其权重,分类错误率高的学习器,则减少其权重。 最后将多个弱学习器按照权重相加,得到高性能的学习器。
概率分类法
概率分类法也是模式识别的一种。 和之前介绍的模式算法的主要不同点在于:它是基于 概率 来识别模式。 之前的模式识别算法是根据样本计算出一个模式识别的函数,然后根据此函数来识别新的内容。
概率分类法有2个优势:
- 不用对所有样本强行分类 概率分类法顾名思义,是按照概率来分类的,不像之前的模式识别算法那么严格(不管结果正确性如何,一个样本肯定能计算出一个类别) 概率分类法可以算出一个样本对应一个模式的概率,如果概率很低,可以判断出可能样本本身有错误,甚至可以抛弃样本。
- 对多类别的分类问题通常会有较好的结果
概率分类算法主要有2种: Logistic回归 和 最小二乘概率分类器 对于这2种算法,一般处理方式是:当训练样本数较多的时候,采用 最小二乘概率分类器 ;当训练样本数较少的时候,采用 Logistic回归
序列数据的分类
序列数据最典型的就是字符串,对于字符串的分析,虽然也可以逐个逐个字符的分析,但是这样分析不仅正确性不高,性能也不好。 比如对于一句话来说,如果不从整体上来看,只是一个字一个字的进行模式识别,很难识别出正确的含义。
序列数据的分类算法即通过灵活应用字符串的前后关系,以在合理的计算时间范围内实现对字符串的学习的算法。 一般称为 条件随机场 (Conditional Random Field, CRF)
它在概率分类法中加入了 关联 和 预测 所谓 关联 和 预测 ,就是利用序列数据的规律,比如出现某个字符之后,还会出现的什么字符;某个字符出现后,就不会立刻再出现等等。 利用这些特性,这样可以加快识别的速度。
异常检测
异常检测是指在输入样本中检测出异常值的方法。 之前介绍的鲁棒性的学习法,也能够分辨异常值,但是在异常值比较多的样本中,如果能在学习前将异常值去除,学习效果会更好。
下面介绍几种异常学习算法:
局部异常因子法
局部异常因子是遵循预先制定的规则(偏离大部分正常值的数据被认为是异常数据),寻找异常值的无监督异常检测算法。 这里的关键是如何制定合适的规则,如果制定的规则和用户的预期不一致,那么检测的异常值也不对, 由于是无监督学习,没有任何关于异常值的信息,所以难点在于制定规则。
支持向量机异常检测器
支持向量机异常检测器会算出包含几乎所有样本的 超球 ,将没有包含在 超球 内的样本视为异常值。
同样,由于是无监督学习,寻找 超球 的参数(中心,半径)就变的非常困难。
基于密度比的异常检测
这是一种利用概率来检测异常的方式。 异常值各式各样,对其模型化一般比较困难,而正常值则相对比较稳定, 因此,通过将非正常数据看成异常数据的方法,有望实现高精度的异常检测。
基于密度比的异常检测法就是这种异常检测算法。
无监督降维
为什么需要降维呢?原因很简单,高维数据处理困难,也就是计算量大,学习时间长,学习过程复杂。 降维的目的不仅仅是简化学习过程,还要在降维后尽可能保持其原本包含的所有信息。
线性降维
线性降维是比较简单的降维方法,主要有2种:
- 主成分分析法:是尽可能地忠实再现原始数据的所有信息的降维方法
- 局部保持投影法:能够保护数据中的簇构造
非线性降维
非线性降维是依赖线性降维方法的,也有2种:
- 核函数主成分分析法:将输入样本用非线性函数进行变换,在变换后的特征空间中进行主成分分析
- 拉普拉斯特征映射:将核函数方法应用在局部保持投影的非线性降维方法
聚类
所谓聚类,就是将输入样本基于其相似度进行分类的方法。 聚类也分为 线性聚类 和 非线性聚类
线性聚类
K均值聚类是最基础的一种聚类算法,就是将看起来最集中,最不分散的簇标签分配到输入样本种。
非线性聚类
非线性聚类有2种:
- 核K均值聚类:最终的结果强烈的依赖初始值的选取,实际应用中要想得到理想的结果并非易事
- 谱聚类:使用降维方法来解决 核K均值聚类的上述问题
通过选用平方损失互信息的估计值达到最大值时所对应的谱聚类的相似度参数,即可得到最优的聚类结果。
在线学习
当输入样本经常更新,追加的时候,就非常适合使用对样本进行逐次学习的在线学习算法。
在线学习算法对于有限内存的利用,管理来说非常有效,是大数据时代的一种优秀的机器学习算法。
在线学习算法有:
- 被动攻击学习
- 适应正则化学习:与被动攻击学习相比,能更好地处理异常值,所以鲁棒性更好。
半监督学习
所谓半监督学习是指:除了输入输出成对出现的训练样本之外,在学习过程中,还会追加输入样本,进而提高学习精度的学习方法。
使用较多的是基于流形的半监督学习方法。 流形是数学用语,一般指局部具有欧几里得空间性质的图形,在半监督学习里指的是输入空间的局部范围。
基于流形的半监督学习设定了这样一种情况,即输入数据只出现在某个流形上,输出则在该流形平滑地变化。
监督降维
这里介绍的 监督降维 其实也就是有输出样本的降维。
监督降维方法有:
- Fisher判别法: 寻找能够使相同类别的样本尽量靠近,不同类别的样本尽量远离的矩阵T的方法
- 充分降维:主要着眼于输入和输出的依赖关系
迁移学习
迁移学习是指,利用过去学习得到的经验,知识,来提高当前以及将来进行的学习任务的求解进度的学习方法。
迁移学习算法有:
协变量移位下的迁移学习 统计学里,协变量就是输入变量。协变量移位是指输入输出关系不变,协变量的概率分布发生变化的情况。
类别平衡变化下的迁移学习 类别平衡变化是指各个类别的输入样本的概率分布不变,但是各个类别之间的样本数的平衡发生变化的情况。
多任务学习
多任务学习是指 灵活应用多个学习任务之间的相似性的同时,对所有任务同时进行学习的方法。
多任务学习看似和迁移学习有些类似,实则有很大区别,迁移学习是指将一个学习任务的信息单方面的提供给你一个学习任务使用, 而多任务学习则是在多个学习任务之间实现信息的共享,转移的一种学习方法。
多任务学习算法有:
- 最小二乘回归的多任务学习
- 最小二乘概率分类器的多任务学习
- 多次维输出函数的学习
总结
简单来说,机器学习的核心就是寻找 y=f(x) 中的f,找到了这个f,我们就可让机器来正确的,自动的,处理以后遇到的新 x。 这个看似简单的任务为什么会产生的如此之多各式各样的复杂算法呢? 原因就是现实情况中 x 和 y 的情况太复杂。 比如 x 数据不全,x 中有错误数据,x 数据量极其庞大,x 数据极其复杂等等,y 的情况和 x 类似,在无监督学习下,甚至没有 y 的数据。
所以如果你想在自己的项目中引入机器学习,让项目更加的智能,首先需要关注的就是自己的项目中的x 和 y。 注 x 表示输入样本,y 表示输出样本。