aihot  2017-10-09 19:40:02  机器学习 |   查看评论   

浅谈机器学习基础

  注:题中所指的『机器学习』不包括『深度学习』。本篇文章以理论推导为主,不涉及代码实现。

  前些日子定下了未来三年左右的计划,其中很重要的一点是成为一名出色的赢咖4产品经理,说是要每月至少读一本赢咖4相关书籍,现在一个半月过去了,书读了一些,资料也看了不少,算是小有所成,所以希望分享一些内容出来,既是对自己的督促总结,将自己学到的东西整理妥当,也是希望把我在做的事情说出来,以期结识同好。

  本篇文章在整理时主要参考了 Peter Harrington 的《机器学习实战》。

机器学习简介

  Arthur Samuel非正式的定义过,机器学习是在不直接针对问题进行编程的情况下,赋予计算机学习能力的一个研究领域。

  简单的来讲,我们给计算机足量的数据,这些数据可以是已标注过判定结果的(监督学习),也可以是没有经过标注的(无监督学习),计算机从这些数据中抽象出模型,也即可以看做发现这些数据的之间的规律与联系,然后当训练完成后,给予其训练集之外的数据(测试集),计算机就能『举一反三』,根据学习训练样本所得到的模型,去预测测试样本的相关属性。

  我们根据训练样本以及所需解决问题的不同选择恰当的机器学习算法,建立恰当的模型,以求得到最好的预测效果。

  这里我采用吴恩达博士的分法,将机器学习分为四类:监督学习、无监督学习、强化学习、迁移学习。

  监督学习:是利用已知类别的样本(即有标记的样本 labeled sample,已知其相应的类别),调整分类器的参数,训练得到一个最优模型,使其达到所要求性能,再利用这个训练后的模型,将所有的输入映射为相应的输出,对输出进行简单的判断,从而实现分类的目的,这样,即可以对未知数据进行分类。
通俗的来讲,我们给计算机一堆选择题(训练样本),并同时提供了它们的标准答案,计算机努力调整自己的模型参数,希望自己推测的答案与标准答案越一致越好,使计算机学会怎么做这类题。然后再让计算机去帮我们做没有提供答案的选择题(测试样本)。

  无监督学习:实现没有有标记的、已经分类好的样本,需要我们直接对输入数据集进行建模,例如聚类,最直接的例子就是我们常说的『人以群分,物以类聚』。我们只需要把相似度高的东西放在一起,对于新来的样本,计算相似度后,按照相似程度进行归类就好。
通俗的来讲,我们给计算机一堆选择题(训练样本),但是不提供标准答案,计算机尝试分析这些题目之间的关系,对题目进行分类,计算机也不知道这几堆题的答案分别是什么,但计算机认为每一个类别内的题的答案应该是相同的。

  强化学习:所谓强化学习就是智能系统从环境到行为映射的学习,以使奖励信号(强化信号)函数值最大,强化学习不同于连接主义学习中的监督学习,主要表现在教师信号上,强化学习中由环境提供的强化信号是对产生动作的好坏作一种评价(通常为标量信号),而不是告诉强化学习系统RLS(reinforcement learning system)如何去产生正确的动作。
通俗的来讲,我们给计算机一堆选择题(训练样本),但是不提供标准答案,计算机尝试去做这些题,我们作为老师批改计算机做的对不对,对的越多,奖励越多,则计算机努力调整自己的模型参数,希望自己推测的答案能够得到更多的奖励。不严谨的讲,可以理解为先无监督后有监督学习。

  迁移学习:考虑到大部分数据或任务是存在相关性的,所以通过transfer learning我们可以将已经学到的parameter 分享给新模型从而加快并优化模型的学习不用像之前那样learn from zero。把已学训练好的模型参数迁移到新的模型来帮助新模型训练数据集。

  深度学习是机器学习的一种,是一种『抽象出的模型』在结构上比较特殊(有深度且可以堆叠,比如各类神经网络)的机器学习方法。深度学习将在下一篇文章中详谈,本文将不会主要涉及。

监督学习

k-近邻(kNN)算法

  一句话概要,将标注好类别的训练样本映射到X(选取的特征数)维的坐标系之中,同样将测试样本映射到X维的坐标系之中,选取距离该测试样本欧氏距离(两点间距离公式)最近的k个训练样本,其中哪个训练样本类别占比最大,我们就认为它是该测试样本所属的类别。kNN是监督学习算法。

  kNN的缺点在于计算的时间空间复杂度都太高,首先内存中需要存储所有的训练样本点,而且每个新测试样本需要通过kNN算法分类,都要计算这个测试样本与所有训练样本点的欧式距离。

  kNN可以处理数值型(从无限的数值集合中取值,如0.100,42.001等)和标称型(只在有限目标集中取值,如真与假)数据。一种特征对应一个维度,一种特征下的数据可以数值型的也可以是标称型的。

  第一个例子,利用kNN来优化婚恋网站配对效果。

  A是某婚恋网站的忠实会员,她在这个网站上约过很多很多人,她把这些人分为3类:不喜欢、感觉一般、很有好感。她希望在下次约会之前能够根据网站上已有的信息预测一下对方会不会是自己很有好感的类型。

  她选出了3种特征(三个维度):每年的飞行里程公里数、每周玩游戏所花费的小时数、每周吃掉的零食的斤数。

  她过去约过1000个人,每个人相当于1个训练样本,这个训练样本有4个属性(3个特征值、1个类别),比如:
B: 4000公里、2小时、1.5斤、很有好感
C: 200公里、22小时、5斤、感觉一般

  我们拿3种特征做成一个三维的坐标系,依照每个训练样本的各个特征值,把这1000个训练样本标到这个三维坐标系的对应位置(更高维度也同理)。也即完成了训练过程。

  接着,A又认识了一个新人D:4800公里、1小时、0.5斤,A把D作为一个点标到了之前训练好的那个三维坐标系上,发现距离D最近(利用欧氏距离公式计算)的10个人(这里取k=10)当中,有8个人都是『很有好感』一类的,所以A觉得,D有很大可能性也会是『很有好感』一类。

  上面的理论很简单,但是存在一个小问题,我们知道欧氏距离公式会极大地受到数值本身大小的影响,比如两个人的飞行里程可能很容易就相差2000,但吃掉的零食斤数最多可能也就差10,这样算出来的距离就几乎只受飞行里程影响,而对于A来说,3个特征是同等重要的。为了解决这个问题,我们需要对这三个特征的特征值进行归一化处理,使得它们的取值范围都落在0到1之间。比如用(当前值-最小值)/取值范围。

  第二个例子,我们尝试用户kNN做手写数字(0到9)的图像识别。这看起来似乎比较难,但是所用的原理与上例相同。

  手写数字的图片是32x32的,我们将它转成一个32x32的数字矩阵,留下笔迹的地方是1,空白的地方是0。

  我们有2000张这样32x32的手写数字的数字矩阵,还有每张手写数字数字矩阵的类别,也即写的到底是几。

  我们取32x32=1024个特征,每个特征只有两个值,0或1。我们把这2000张手写数字数字矩阵标进这个1024维的坐标系中(过高维度没办法实际去画图,只为了理解)。也即完成了训练过程。

  接下来我们拿到了一张新的手写数字图片(32x32),把它转成一个32x32的数字矩阵,进而我们知道了它在这1024维度中,每个维度上的值。然后我们利用欧氏距离公式计算,离它最近的k个点中,出现次数最多的类别是什么,也即推测出了这张手写数字写的究竟是几。

 1/13    1 2 3 4 5 6 下一页 尾页
 

除特别注明外,本站所有文章均为 赢咖4注册 原创,转载请注明出处来自浅谈机器学习基础(上)

留言与评论(共有 0 条评论)
   
验证码:
[lianlun]1[/lianlun]