机器学习笔记:机器学习概述

开篇

刷了七天剑指offer,离实习和秋招越来越近了,要拾起一些东西了,博客都是逼出来的,希望实习前不会断更。这边主要是以代码为主,每天刷一个章节。主要内容来自于sklearn与tensorflow机器学习指南。目前还不知道书的内容坑不坑,但愿靠谱些,不至于让我看不下去。我只突出要点和代码,完整内容请点击上面的链接去看原书的翻译。

机器学习概述

机器学习善于:

需要进行大量手工调整或需要拥有长串规则才能解决的问题:机器学习算法通常可以简化代码、提高性能。

问题复杂,传统方法难以解决:最好的机器学习方法可以找到解决方案。

环境有波动:机器学习算法可以适应新数据。

洞察复杂问题和大量数据。

机器学习系统的类型

机器学习有多种类型,可以根据如下规则进行分类:

  • 是否在人类监督下进行训练(监督,非监督,半监督和强化学习)
  • 是否可以动态渐进学习(在线学习 vs 批量学习)
  • 它们是否只是通过简单地比较新的数据点和已知的数据点,或者在训练数据中进行模式识别,以建立一个预测模型,就像科学家所做的那样(基于实例学习 vs 基于模型学习)

规则并不仅限于以上的,你可以将他们进行组合。例如,一个先进的垃圾邮件过滤器可以使用神经网络模型动态进行学习,用垃圾邮件和普通邮件进行训练。这就让它成了一个在线、基于模型、监督学习系统。

监督学习

非监督学习

  • 聚类
    K 均值
    层次聚类分析(Hierarchical Cluster Analysis,HCA)
    期望最大值
  • 可视化和降维
    主成分分析(Principal Component Analysis,PCA)
    核主成分分析
    局部线性嵌入(Locally-Linear Embedding,LLE)
    t-分布邻域嵌入算法(t-distributed Stochastic Neighbor Embedding,t-SNE)
  • 关联性规则学习
    Apriori 算法
    Eclat 算法

批量和在线学习

批量学习

在批量学习中,系统不能进行持续学习:必须用所有可用数据进行训练。这通常会占用大量时间和计算资源,所以一般是线下做的。首先是进行训练,然后部署在生产环境且停止学习,它只是使用已经学到的策略。这称为离线学习。

如果你想让一个批量学习系统明白新数据(例如垃圾邮件的新类型),就需要从头训练一个系统的新版本,使用全部数据集(不仅有新数据也有老数据),然后停掉老系统,换上新系统。

幸运的是,训练、评估、部署一套机器学习的系统的整个过程可以自动进行(见图 1-3),所以即便是批量学习也可以适应改变。只要有需要,就可以方便地更新数据、训练一个新版本。

这个方法很简单,通常可以满足需求,但是用全部数据集进行训练会花费大量时间,所以一般是每 24 小时或每周训练一个新系统。如果系统需要快速适应变化的数据(比如,预测股价变化),就需要一个响应更及时的方案。

另外,用全部数据训练需要大量计算资源(CPU、内存空间、磁盘空间、磁盘 I/O、网络 I/O 等等)。如果你有大量数据,并让系统每天自动从头开始训练,就会开销很大。如果数据量巨大,甚至无法使用批量学习算法。

最后,如果你的系统需要自动学习,但是资源有限(比如,一台智能手机或火星车),携带大量训练数据、每天花费数小时的大量资源进行训练是不实际的。

幸运的是,对于上面这些情况,还有一个更佳的方案可以进行持续学习。

在线学习

在在线学习中,是用数据实例持续地进行训练,可以一次一个或一次几个实例(称为小批量)。每个学习步骤都很快且廉价,所以系统可以动态地学习到达的新数据(见图 1-13)。

在线学习很适合系统接收连续流的数据(比如,股票价格),且需要自动对改变作出调整。如果计算资源有限,在线学习是一个不错的方案:一旦在线学习系统学习了新的数据实例,它就不再需要这些数据了,所以扔掉这些数据(除非你想滚回到之前的一个状态,再次使用数据)。这样可以节省大量的空间。

在线学习算法也可以当机器的内存存不下大量数据集时,用来训练系统(这称作核外学习,out-of-core learning)。算法加载部分的数据,用这些数据进行训练,重复这个过程,直到用所有数据都进行了训练(见图 1-14)。

警告:这个整个过程通常是离线完成的(即,不在部署的系统上),所以在线学习这个名字会让人疑惑。可以把它想成持续学习。

在线学习系统的一个重要参数是,它们可以多快地适应数据的改变:这被称为学习速率。如果你设定一个高学习速率,系统就可以快速适应新数据,但是也会快速忘记老数据(你可不想让垃圾邮件过滤器只标记最新的垃圾邮件种类)。相反的,如果你设定的学习速率低,系统的惰性就会强:即,它学的更慢,但对新数据中的噪声或没有代表性的数据点结果不那么敏感。

在线学习的挑战之一是,如果坏数据被用来进行训练,系统的性能就会逐渐下滑。如果这是一个部署的系统,用户就会注意到。例如,坏数据可能来自失灵的传感器或机器人,或某人向搜索引擎传入垃圾信息以提高搜索排名。要减小这种风险,你需要密集监测,如果检测到性能下降,要快速关闭(或是滚回到一个之前的状态)。你可能还要监测输入数据,对反常数据做出反应(比如,使用异常检测算法)。

基于实例 vs 基于模型学习

另一种分类机器学习的方法是判断它们是如何进行归纳推广的。大多机器学习任务是关于预测的。这意味着给定一定数量的训练样本,系统需要能推广到之前没见到过的样本。对训练数据集有很好的性能还不够,真正的目标是对新实例预测的性能。

有两种主要的归纳方法:基于实例学习和基于模型学习。

基于实例学习

也许最简单的学习形式就是用记忆学习。如果用这种方法做一个垃圾邮件检测器,只需标记所有和用户标记的垃圾邮件相同的邮件 —— 这个方法不差,但肯定不是最好的。

不仅能标记和已知的垃圾邮件相同的邮件,你的垃圾邮件过滤器也要能标记类似垃圾邮件的邮件。这就需要测量两封邮件的相似性。一个(简单的)相似度测量方法是统计两封邮件包含的相同单词的数量。如果一封邮件含有许多垃圾邮件中的词,就会被标记为垃圾邮件。

这被称作基于实例学习:系统先用记忆学习案例,然后使用相似度测量推广到新的例子(图 1-15)。

基于模型的学习

另一种从样本集进行归纳的方法是建立这些样本的模型,然后使用这个模型进行预测。这称作基于模型学习(图 1-16)。

机器学习的主要挑战

训练数据量不足

要让一个蹒跚学步的孩子知道什么是苹果,需要做的就是指着一个苹果说“苹果”(可能需要重复这个过程几次)。现在这个孩子就能认识所有形状和颜色的苹果。真是个天才!

机器学习还达不到这个程度;需要大量数据,才能让多数机器学习算法正常工作。即便对于非常简单的问题,一般也需要数千的样本,对于复杂的问题,比如图像或语音识别,你可能需要数百万的样本(除非你能重复使用部分存在的模型)。

没有代表性的训练数据

为了更好地进行归纳推广,让训练数据对新数据具有代表性是非常重要的。无论你用的是基于实例学习或基于模型学习,这点都很重要。

例如,我们之前用来训练线性模型的国家集合不够具有代表性:缺少了一些国家。图 1-21 展示了添加这些缺失国家之后的数据。

图 1-21 一个更具代表性的训练样本

如果你用这份数据训练线性模型,得到的是实线,旧模型用虚线表示。可以看到,添加几个国家不仅可以显著地改变模型,它还说明如此简单的线性模型可能永远不会达到很好的性能。貌似非常富裕的国家没有中等富裕的国家快乐(事实上,非常富裕的国家看起来更不快乐),相反的,一些贫穷的国家看上去比富裕的国家还幸福。

使用了没有代表性的数据集,我们训练了一个不可能得到准确预测的模型,特别是对于非常贫穷和非常富裕的国家。

使用具有代表性的训练集对于推广到新案例是非常重要的。但是做起来比说起来要难:如果样本太小,就会有样本噪声(即,会有一定概率包含没有代表性的数据),但是即使是非常大的样本也可能没有代表性,如果取样方法错误的话。这叫做样本偏差。
(6.6更新)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值