Hands-on Machine learning 之 机器学习概览

文章目录
  1. 1. 什么是机器学习?
  2. 2. 为什么要使用机器学习?
    1. 2.1. 使用传统方式
    2. 2.2. 使用机器学习
  3. 3. 机器学习系统的类型
    1. 3.1. 有/无监督学习
      1. 3.1.1. 有监督学习
      2. 3.1.2. 无监督学习
      3. 3.1.3. 半监督学习
      4. 3.1.4. 强化学习
    2. 3.2. 批量/在线学习
    3. 3.3. 基于实例/基于模型的学习
  4. 4. 机器学习的主要挑战
    1. 4.1. 训练数据方面
    2. 4.2. 算法模型方面
  5. 5. 测试和验证

什么是机器学习?

在1959年, Arthur Samuel 给机器学习定义如下:

[Machine Learning is the] field of study that gives computers the ability to learn without being explicitly programmed.—Arthur Samuel, 1959

Arthur Samuel是美国计算机游戏和人工智能领域的先驱之一。在IBM的时候,他开发出的西洋跳棋程序被认为是世界上第一个自学习程序。Samuel让该程序自己和自己下棋,很快它就习得了在哪些情况下赢的机会比较大,从而可以不断提高自己的棋艺。最终,该程序的棋艺已经远远超过Samuel。

Samuel这段话的意思是说,“机器学习是这样的一个研究领域,在没有显式编码的情况下赋予计算机学习的能力。”虽然这个定义看上去是挺不错的,但是却有点含糊不清。

后来在1998年, Tom Mitchell在他的著作《Machine Learning 》中给出了一个被广泛引用且更加正式的定义:

A computer program is said to learn from experience E with respect to some task T and some performance measure P, if its performance on T, as measured by P, improves with experience E.—Tom Mitchell, 1997

这段话是说,“如果一个计算机程序在任务T中以P为度量的性能从经验E中得到了提升,那么可以说该程序从与某类任务T和性能度量P有关的经验E中进行了学习。

根据该定义,一个机器学习问题必须具备三个要素:

  • 任务(Tasks)
  • 性能度量(Performance Measure)
  • 训练经验(Training Experience)

以垃圾邮件过滤器(spam filter)为例,该程序的任务是标记垃圾邮件,性能度量可以是正确分类的比例,训练经验通常是包含正常邮件和垃圾邮件的训练数据集。

为什么要使用机器学习?

考虑如何构建一个垃圾邮件过滤器。

使用传统方式

首先人工提取垃圾邮件中的特征(比如一些经常出现的单词或短语),然后总结成“规则”写进代码中。若一封邮件满足其中某些规则,则将其标记为垃圾邮件。

弊端在于:随着时间的推移,程序中复杂、冗长的“规则”将变得难以维护。

使用机器学习

基于机器学习的方法可以自动地从训练数据中学习垃圾邮件的特征,该过程无需过多的人工操作。

优点在于:程序通常更短、更容易维护,且准确率更高。

一般来说,机器学习擅长以下几个方面:

  • 已存在的解法需要过多的人工操作,或者手动维护一长串的“规则”。例如,垃圾邮件的过滤;
  • 对于非常复杂的问题,传统方式通常不能够有效地解决。例如,语音识别问题;
  • 能够自动适应复杂多变的外部环境。例如,机器学习系统可以自动适应新数据;
  • 对复杂问题和大规模数据有很好的洞察能力。例如,可以发现数据中潜在的模式。

机器学习系统的类型

有/无监督学习

根据在训练过程中得到的监督类型和数量,通常可以分为:

有监督学习

有监督学习(supervised learning)中,每一个训练数据都带有标签(labels)。比如,在垃圾邮件问题中,训练数据中的每封邮件都会带上是否是垃圾邮件(spam or ham)的标签。

有监督学习一般分为以下两类:

  • 分类(classification)

比如,将邮件按是否是垃圾邮件进行分类。通常,该问题的标签是离散型数据。

  • 回归(regression)

比如,根据车的一系列特征预测车的价格是多少。通常,该问题的标签是连续型数据。

一些比较重要的有监督学习算法:

  • K近邻(k-Nearest Neighbors)
  • 线性回归(Linear Regression)
  • 对数几率回归(Logistic Regression)
  • 支持向量机(SVMs,Support Vector Machines)
  • 决策树和随机森林(Decision Trees and Random Forests)
  • 神经网络(Neural networks)

无监督学习

无监督学习(unsupervised learning)中,训练数据都是无标签的。

一般有以下几类任务:

  • 聚类(Clustering)

比如,通过计算样本之间的相似性,将其聚拢成一个个簇。使得簇内样本的相似度高,簇外样本的相似度低。

  • 可视化与降维(Visualization and dimensionality reduction)

比如,将高维的数据降维到低维空间(二维或三维),使得可以进行数据可视化。

  • 异常检测(anomaly detection)

比如,检测信用卡中的非法交易、剔除数据中的异常点。

  • 关联规则学习(association rule learning)

比如,在大量购物记录中挖掘出各个商品之间的购买关系。

一些比较重要的无监督算法:

  • 聚类(Clustering)
    • k均值(k-Means)
    • 层序聚类分析(HCA,Hierarchical Cluster Analysis )
    • 期望最大化(EM,Expectation Maximization)
  • 可视化与降维(Visualization and dimensionality reduction)
    • 主成分分析(PCA,Principal Component Analysis )
    • 核PCA(Kernel PCA)
    • 局部线性嵌入(LLE,Locally-Linear Embedding)
    • t分布随机领域嵌入(t-SNE,t-distributed Stochastic Neighbor Embedding)
  • 关联规则学习(Association rule learning)
    • Apriori
    • Eclat

半监督学习

半监督学习(semi-supervised learning)中,训练数据通常由大量无标签数据少量带标签数据构成。

比如,当你把一张家庭照上传到Google Photos,便可以自动识别出在哪些照片中出现了人物A,在哪些照片中出现了人物B,这是无监督聚类的过程。但是,如果想要知道人物A、人物B叫什么的话,那么只需要给每个人物打上一个”姓名“标签即可,这是有监督的过程。

因此,只需标记少量样本,便可以对每张照片的每个人物打上标签。

强化学习

强化学习(Reinforcement Learning)是机器学习中的一个领域,强调如何基于环境而行动,以取得最大化的预期利益。

在该问题中,学习系统被称为agent,它可以观察环境(environment),执行动作(actions),然后可以得到奖励(rewards),最终学习到最优的策略(policy)

批量/在线学习

该分类标准是根据系统能否从连续的数据流中进行学习。

  • 批量学习(Batching learning)

批量学习的每次训练都需要使用整个数据集,该过程通常是离线(offline)进行的。

模型离线训练完毕后,再部署到生产环境中去,在运行过程中模型也不会再进行训练。如果批量学习系统需要适应新的数据,那么必须重新进行训练,训练的数据由旧数据和新数据组成,训练完毕后再部署上去。

批量学习的过程非常消耗计算资源,通常是每隔24h或更久训练一次。

  • 在线学习(Online learning)

在在线学习的过程中,可以依次递送数据(单个或者小批量)来逐步地训练系统。

该方法特别适用于需要不断接收连续的数据流,或者需要不断适应变化数据的系统。同时,在线学习也适用于计算资源缺乏的环境,因为通常系统学习完新数据后,便不再需要保留该数据,从而可以节约巨大的存储空间。

在线学习也常被用来进行out-of-core learning,使得系统可以在巨大的数据集(不能一次性放入机器的内存中)上进行训练。每次训练只载入数据集的部分数据,不断重复,直到所有数据都被处理过。

对于在线学习来说,一个很重要的参数是学习率(learning rate)。若学习率过高,那么系统将会更加适应新的数据,而更快遗忘旧的数据。若学习率过低,那么系统将会学习得很慢,但同时对新数据中的噪声或数据中没有代表性的样本不会太敏感。

在线学习面临的一个挑战是,一旦”坏数据“被输入到系统中,那么系统的性能将会逐渐降低。为了降低该风险,可以不断地监测系统,在性能下降时恢复到之前正常的状态;也可以使用异常检测算法对数据进行检测,没有问题后再输入到系统中去。

基于实例/基于模型的学习

该分类标准是系统是如何对未知数据进行泛化(generalize)

  • 基于实例的学习(Instance-based learning)

基于实例的学习只是简单地把训练数据存储起来,当遇到新的查询实例时,根据相似性计算规则从已知数据中找到相似的实例,然后对其进行泛化预测。例如,k近邻算法。

  • 基于模型的学习(Mode-based learning)

基于模型的学习是从训练数据中建立一个模型(model),然后使用该模型对未知数据进行泛化预测。例如,支持向量机。

机器学习的主要挑战

训练数据方面

  • 训练数据的数量不够

训练数据的数量在一定程度上也影响最终模型的效果,特别是采用深度学习等方法,其所需数据量通常比较大。对于图片数据来说,可以通过平移、翻转、裁剪、加噪声等方式进行数据增强(data augmentation)

  • 训练数据的代表性不足

如果训练数据的代表性不足,通常训练出来的模型的泛化能力也比较弱。在数据采样的时候,如果样本数量较少,那么可能出现采样噪声(sampling noise)的问题;若采样方式错误,即使样本数量很多也可能不具有代表性,依然会出现采样偏差(sampling bias)的问题。

  • 训练数据的质量不好

如果训练数据中充满了错误、异常点、噪声等等,那么训练出的模型也很难检测出原本真实数据中潜在的模式。所以,数据清洗(data cleaning)是整个机器学习过程中不可缺少的一个环节,其结果质量直接关系到模型效果和最终结论。

  • 训练数据的特征与问题不相关

特征工程(feature engineering)其本质上是一项工程活动,它目的是最大限度地从原始数据中提取特征以供算法和模型使用。一般认为,数据和特征决定了机器学习的上限,而模型和算法只能逼近这个上限而已。特征工程一般包括特征选择(feature selection)特征提取(feature extraction)等部分。

算法模型方面

  • 过拟合(overfitting)问题

模型复杂度过高,训练数据过少,训练误差虽小,但测试误差大。

一般通过正则化(generalization)方式解决,本质上是降低模型的复杂度。

  • 欠拟合(underfitting)问题

模型复杂度过低,不能很好地拟合所有的数据,训练误差大。

测试和验证

评估一个模型的好坏,可以测试该模型对新样本的泛化能力。

通常将数据集分为两部分:训练集(training set)测试集(test set)。其中,训练集用于模型参数的拟合,测试集用于对已经训练好的模型进行性能评估。

如果算法中存在超参数(hyperparameter),那么可以从训练集中再划分出验证集(validation set)来进行调参。

一种常用的验证方式是:k折交叉验证(k-fold cross validation)。k折交叉验证将所有训练样本分成K份,一般每份样本的数量相等或相差不多。取一份作为测试样本,剩余K-1份作为训练样本。这个过程重复K次,取平均值作为最终的验证结果。

分享到 评论