美文网首页机器学习
机器学习浅析(上)

机器学习浅析(上)

作者: 一悟 | 来源:发表于2019-01-19 21:23 被阅读30次

    之前的文章中讲了学习的思路和规划,接下来要写的这篇文章是有关机器学习的。在机器学习这个领域,所涵盖的内容实在是太多了,借用维基百科的一句话来对其进行简单概括:机器学习 (Machine Learning) 是近 20 多年兴起的一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。对于大学高数和线性代数都是擦线考过的我,学起来真的是有点"困难"。在开始学习的时候,我都是抱着必死的决心去学的。虽说有点小夸张,但前期学习的时候,心里真的是七上八上,看到数学公式就想直接跳过,硬是逼着自己死磕,随着自己的不断深入,也开始能够吸收大部分的东西,对机器学习也有了一定的了解。接下来讲一下我学机器学习的思路以及机器学习的学习方式和相关算法,但是此篇文章不包括深度学习,具体分析会在下篇文章讲到。
    这篇文章整体的参考和引用多借鉴Peter Harrington 的《机器学习实战》,因为网络上大部分的文章都是以数学原理为基础,没有一定数学基础的人学起来实在是晦涩。而这本书更多是以程序代码和实际运用的角度来进行切入,虽说也有一些数学理论,但终归理解起来要好很多。在学习的过程中,碰到的数学问题会运用网络搜索引擎来进行补充和理解,在本文中我会借鉴《机器学习实战》里面的行文结构,先讲述机器学习的定义和用途,然后开始讲机器学习方法的分类以及监督学习和非监督学习所涉及的重点算法。在算法的讲解中,我会结合数学原理和书中实际案例,尽可能的用自己的语言把它表述出来。
    那什么是机器学习?机器学习在我看来就是让机器开始拥有和人一样思考的“大脑”,而后期的NLP和CV等技术类似于让电脑拥有了嘴巴和眼睛。当然这么解释是不够专业的,因为机器和人两者的作用机理是完全不一样,这只是为了方便理解。那借用维基百科专业术语来讲,机器学习有下面几种定义:
    机器学习是对能通过经验自动改进的计算机算法的研究。
    机器学习是用数据或以往的经验,以此优化计算机程序的性能标准。
    机器学习理论主要是设计和分析一些让计算机可以自动学习的算法。
    简而言之就是机器能通过数据的学习,发现其所蕴含的内在规律,并对其进行模型(函数)的构建,而这个模型(函数)的搭建以及优化和完善就是机器学习。也许很多人对机器学习不大了解,但其实机器学习已经广泛应用在我们的生活当中,比如我们平时的日常购物,某宝会在我们的购物栏底下推荐与我们相关的商品,现在流行的扫脸验证登录,今日头条给我们推荐相关的新闻等等这些生活中的应用都运到了机器学习,而且随着AI的不断发展,后续机器学习的前景也是不可限量的。

    机器学习方式

    监督式学习:从给定的训练数据集中学习出一个函数,当新的数据到来时,可以根据这个函数对其进行分类或者预测结果。监督学习的训练集需要包括输入和输出,也可以说是特征和目标。训练集中的特征和目标都是由人为标注的。常见的监督式学习算法包括回归分析和统计分类。
    非监督式学习:与监督学习相比,训练集没有人为标注的结果。很多特征需要机器自己根据数据来进行归类。常见的非监督式学习算法有聚类。比如说生活中我们常说的『人以群分,物以类聚』就是对这个算法很好的解释。通俗的来讲我们给计算机一堆选择题(训练样本),但是不提供标准答案,计算机尝试分析这些题目之间的关系,对题目进行分类,计算机也不知道这几堆题的答案分别是什么,但计算机认为每一个类别内的题目答案应该是相同的。
    半监督式学习:输入数据部分被标识,部分没有被标识,介于监督式学习与非监督式学习两者之间。
    强化学习(增强学习):在这种学习模式下,输入数据不仅来自前期的输入,也有来自模型本身的输出反馈,不像监督模型那样,输入数据仅仅是作为一个输入结果。输出结果也会反馈到模型当中,然后模型会对此作出调整。有点类似于生活中小猫小狗等动物的训练,当小狗做出我们满意的行为,我们给予奖励加强小狗的学习认知,并且强化自身的行为动作。当做错之后,小狗得不到奖励,它就会有意识的去更改自己的行为动作以获取更多的奖励。
    迁移学习(Transfer Learning):指的是一个预训练的模型被重新用在另一个任务中,把已经训练好的模型参数迁移到新的模型来帮助新模型训练数据集,节省人工标注样本的时间,加快机器学习构建新模型的速度。对于一些缺少数据的应用行业中,迁移学习被很好的利用。

    机器学习算法

    机器学习算法是一类从数据中自动分析获得规律,并利用规律对未知数据进行预测的算法。因为学习算法中涉及了大量的统计学理论,机器学习与统计推断学联系尤为密切,也被称为统计学习理论。以下是监督学习比较重要的六个分类算法。

    k-近邻算法

    K近邻算法其基本定义:给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的K个实例,这K个实例的多数属于某个类,就把该输入实例分类到这个类中。这就类似于现实生活中少数服从多数的思想)根据这个说法,我们来看下引自维基百科上的一幅图:

    数据分布图
    如上图所示,有两类不同的样本数据,分别用蓝色的小正方形和红色的小三角形表示,而图正中间的那个绿色的圆所标示的数据则是待分类的数据。这也就是我们的目的,来了一个新的数据点,我要得到它的类别是什么?好的,下面我们根据k近邻的思想来给绿色圆点进行分类。
    如果K=3,绿色圆点的最邻近的3个点是2个红色小三角形和1个蓝色小正方形,少数从属于多数,基于统计的方法,判定绿色的这个待分类点属于红色的三角形一类。
    如果K=5,绿色圆点的最邻近的5个邻居是2个红色三角形和3个蓝色的正方形,还是少数从属于多数,基于统计的方法,判定绿色的这个待分类点属于蓝色的正方形一类。

    上面的例子可以很好的解释算法的核心思想,但是要想一个算法在实际应用中work,还需要注意其他三个基本要素:K 值的选择,距离度量和分类决策规则。

    k近邻算法中k的选取以及特征归一化的重要性

    在k近邻算法中,算法的k值我们应该怎么选取呢?如果我们选取较小的k值,那么就会意味着我们的整体模型会变得复杂,容易发生过拟合!

    比如说当我们选取k=1这个极端情况,假设我们有训练数据和待分类点如下图:


    2.png

    上图中有俩类,一个是黑色的圆点,一个是蓝色的长方形,现在我们的待分类点是红色的五边形。

    根据k近邻算法步骤来决定待分类点应该归为哪一类。由图中可能够看出来五边形离黑色的圆点最近,k又等于1,那太好了,我们最终判定待分类点是黑色的圆点。

    由这个处理过程我们很容易能够感觉出问题了,如果k太小了,比如等于1,那么模型就太复杂了,我们很容易学习到噪声(噪声有时候可以看做错误的分类或者其他不相关的数据),也就非常容易判定为噪声类别,而在上图,如果,k大一点,k等于8,把长方形都包括进来,我们很容易得到我们正确的分类应该是蓝色的长方形,如下图:

    3.png

    所谓的过拟合就是在训练集上准确率非常高,而在测试集上准确率低,经过上例,可以得到k太小会导致过拟合,很容易将一些噪声(如上图离五边形很近的黑色圆点)学习到模型中,而忽略了数据真实的分布!

    如果选取较大的k值,就相当于用较大邻域中的训练数据进行预测,这时与输入实例较远的(不相似)训练实例也会对预测起作用,使预测发生错误,k值的增大意味着整体模型变得简单。

    我们想,如果k=N(N为训练样本的个数),那么无论输入实例是什么,都将简单地预测它属于在训练实例中最多的类。这时,模型是不是非常简单,这相当于没有训练模型呀!直接拿训练数据统计了一下各个数据的类别,找最大的而已!这好像下图所示:

    4.png
    我们统计了黑色圆形是8个,长方形个数是7个,那么哈哈,如果k=N,我就得出结论了,红色五边形是属于黑色圆形的(明显是错误的好不,捂脸!)
    这个时候,模型过于简单,完全忽略训练数据实例中的大量有用信息,是不可取的。

    恩,k值既不能过大,也不能过小,在我举的这个例子中,我们k值的选择,在下图红色圆边界之间这个范围是最好的,如下图:

    5.png
    (注:这里只是为了更好让大家理解,真实例子中不可能只有俩维特征,但是原理是一样的,我们就是想找到较好的k值大小)
    那么一般怎么选取呢?通常我们会选取一个较小的数值,然后采取交叉验证法来选取最优的k值。我们的核心思想就是要得到一个最优化的参数,从而来获取我们最优的K值。

    2.距离的度量

    在上文中说到,k近邻算法是在训练数据集中找到与该实例最邻近的K个实例,这K个实例的多数属于某个类,我们就说预测点属于哪个类。定义中所说的最邻近是如何度量呢?我们怎么知道谁跟测试点最邻近。这里就会引出我们几种度量俩个点之间距离的标准。可以有以下几种度量方式:

    6.png
    其中当p=2的时候,就是我们最常见的欧式距离,一般都用欧式距离来衡量高维空间中俩点的距离。在实际应用中,距离函数的选择应该根据数据的特性和分析的需要而定,一般选取p=2欧式距离表示。距离度量我们也了解了,接下来讲一下各个维度归一化的必要性!

    3.特征归一化的必要性

    首先举例来说明一下,我用一个人身高(cm)与脚码(尺码)大小来作为特征值,类别为男性或者女性。我们现在如果有5个训练样本,分布如下:

    A [(179,42),男] B [(178,43),男] C [(165,36)女] D [(177,42),男] E [(160,35),女]

    通过上述样本,很容易看到第一维身高特征是第二维脚码特征的4倍左右,在进行距离度量的时候,我们就会偏向第一维特征。这样造成俩个特征并不是等价重要的,最终可能会导致距离计算错误,从而导致预测错误。我们举个例子来说明一下:

    现在有一个测试样本 F(167,43),我们来预测一下他是男性还是女性,首先采取k=3来预测。

    下面我们用欧式距离分别算出F离训练样本的欧式距离,然后选取最近的3个,多数类别就是我们最终的结果,计算如下:

    欧氏距离.png
    由计算可以得到,最近的前三个分别是C,D,E三个样本,那么由C,E为女性,D为男性,女性多于男性得到我们要预测的结果为女性。这时就有一个问题,一个女性的脚有可能是43码,有可能但是可能性要远远小于男性脚43码的可能性,那么为什么算法还是会预测F为女性呢?那是由于各个特征量纲的不同,就导致身高的重要性已经远远大于脚码了,这是不客观的。所以我们应该让每个特征都是同等重要的,而不能忽略数据里面的任何一个特征,这也是我们要归一化的原因,归一化公式如下:
    8.png
    以上便是k-近邻算法的基本数学原理,该算法在分类时有个主要的不足是,当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数。 该算法只计算“最近的”邻居样本,某一类的样本数量很大,那么或者这类样本并不接近目标样本,或者这类样本很靠近目标样本。无论怎样,数量并不能影响运行结果。可以采用权值的方法(和该样本距离小的邻居权值大)来改进。
    该方法的另一个不足之处是计算量较大,因为对每一个待分类的文本都要计算它到全体已知样本的距离,才能求得它的K个最近邻点。目前常用的解决方法是事先对已知因为对每一个待分类的文本都要计算它到全体已知样本的距离,才能求得它的K个最近邻点。目前常用的解决方法是事先对已知样本点进行剪辑,事先去除对分类作用不大的样本。该算法比较适用于样本容量比较大的类域的自动分类,而那些样本容量较小的类域采用这种算法比较容易产生误分。

    在上面k-近邻算法的讲解中,我大都引用知乎上的文章。虽说是引用,但我查阅众多资料,还是要算这篇文章讲的最简单,而且通俗易懂,其他文章理解起来都太过晦涩,如果用我自己的话来概括估计也是同样的思路和原理,还不一定有她讲的好,所以也就照搬过来用了。在机器学习浅析(中)也就是下一篇文章我们会讲述监督学习其他类型的算法,包括支持决策树ID3算法、朴素贝叶斯算法、Logistic回归算法、支持向量机SVM算法、AdaBoost元算法等五类分类算法,还有两类回归算法。最后我会讲述无监督算法中的聚类算法以及机器学习算法会使用到的附属工具,例如PCA或者SVD简化数据等等,敬请期待。

    附:
    参考文章如下:
    《机器学习实战》Peter Harrington
    《知乎》https://dwz.cn/NmZ8Is0s
    《我偏笑_NSNirvana》https://dwz.cn/isiEd7CT

    相关文章

      网友评论

        本文标题:机器学习浅析(上)

        本文链接:https://www.haomeiwen.com/subject/yvgvdqtx.html