第一章 机器学习概要

这篇文章是本人学习 《Hands-On-Machine-Learning-with-Scikit-Learn-and-TensorFlow》的读书笔记第一篇。整理出来是希望在巩固自己的学习效果的同时,希望能够帮助到同样想学习的人。本人也是小白,可能很多地方理解和翻译不是很到位,希望大家多多谅解和提意见。

1. 什么是机器学习?

机器学习指的是在不显式给予编程指令的情况下,让机器从数据中学习从而在某些任务上表现地更好。

2. 为什么需要机器学习?

  • 针对有些问题,目前的解答需要给定很多的规则。而机器学习算法可以简化程序且性能更优。
  • 对于一些复杂的问题,传统的方法根本不能提供很好的解决方案。
  • 变动的环境:机器学习系统能够适应新数据。
  • 从复杂问题和大规模数据中发现规律。

3. 机器学习系统的类型

  1. 是否需要人的监督:监督学习、无监督学习、半监督学习、增强学习。
  2. 是否能够在流数据上逐步学习:线上学习(Online Learning)、批量学习(Batch Learning)。
  3. 是否通过把新数据和原来的数据对比还是通过学习训练收据中的模式来建立预测模型:基于个例的学习(Instance-based Learning)、基于模型的学习(Model-based Learning)。

监督学习

在监督学习中,模型中的每个训练数据都是包含标签的。经典的监督学习的方法有分类回归。本书会涉及到的监督学习算法有 KNN线性回归逻辑回归SVM决策树和随机森林神经网络(部分神经网络模型为监督学习)。

无监督学习

无监督学习的训练数据中不包含标签。本书涉及的非监督学习的方法:

  • 聚类
    -K-means
    -层次化的聚类分析(Hierarchical Cluster Analysis )
    -期望最大化算法(Expectation Maximization)
  • 可视化和降维
    -PCA
    -Kernel PCA
    -局部线性嵌入(Locally-Linear Embedding)
    -t-分布随机邻域嵌入(t-distributed Stochastic Neighbor Embedding,t-SNE)
  • 关联规则学习
    -Apriori
    -Eclat

半监督学习

训练数据中只有一部分是有标签的,通常只有小部分是有标签的,大部分是没有标签的。大部分的半监督学习都是监督学习和非监督学习的结合,比如深度信念网络(Deep Belief Networks, DBNs)就是将无监督的受限玻尔兹曼机(Restricted Boltzmann Machines,RBMs)堆叠在一起。RBMs被无监督地训练,最后整个系统使用监督学习的方法进行微调。

增强学习

整个系统通过观察环境、选择和执行策略来得到奖励。它必须得通过自己学习什么是好的策略,并逐步累积奖励。


Figure1: 增强学习

批量学习和线上学习

批量学习中不能够逐步训练,它必须使用所有的数据来训练模型。通常模型都是在线下训练好,然后被运用到产品中不再被训练了,这种方式称为 离线学习(Offline Learning)。

线上学习则是逐步地将数据加入系统中参与训练,逐个样本加入或者小批量(Mini-batches)加入。线上学习对于以连续流的方式输入数据和需要快速适应变化的系统很有帮助。同时当计算资源有限时,线上学习在对新数据进行学习以后可以舍弃掉该数据,从而可以达到节约存储空间的目的。线上学习还可以用来在海量数据上进行训练,此时数据不能全部读入内存,算法可以读入并训练部分数据,然后重复该过程直到在所有数据上完成训练,这也被称为 Out-of-core Learning。


Figure 2:使用线上学习训练海量数据

线上学习算法有一个重要的参数--学习率,它决定系统接收新数据的速度。如果学习率过快的话,系统会很快忘记旧数据;如果学习率过慢的话,系统会反应迟钝,但是更能够抵抗数据中的噪声和非典型数据带来的影响。

基于个例的学习和基于模型的学习

根据机器学习系统泛化的方式不同,可以分为基于个例的学习和基于模型的学习。

基于个例的学习算法通过自身来学习数据,通过相似性比较的方法来泛化到新数据上(可以通过聚类来理解)。


Figure 3: 基于个例的学习

基于模型的学习通过训练出一个模型来对新数据做出预测。


Figure 4: 基于模型的学习

4. 机器学习的挑战

当我们想通过选择一个模型来训练部分数据的时候,最可能出现问题的部分也就是在算法和数据上了。

数据上:

  • 训练数据不足,再好的算法也很难表现的好。
  • 训练数据不具有代表性,并不能代表数据集中所有数据的特征。数据量太少可能会使数据存在样本噪声(Sampling Noise),数据量大但不具备代表性则可能存在样本偏差(Sampling Bias)。
  • 数据质量差,数据中包括很多错误、异常值、噪声。
  • 不相关的特征

算法上:

  • 过拟合:模型在训练数据上表现很好,但是泛化能力很差。解决方法有
    -选择参数更少的简单模型(如用线性回归代替多项式回归)
    -收集更多的训练数据
    -减少数据中的噪声
    -加入正则化
  • 欠拟合:模型过于简单无法学习到数据中的模式。解决方法有:
    -选择更复杂模型
    -加入更好的特征(特征工程)
    -减少模型的限制(如去掉正则化)

5 测试和验证

交叉验证:将训练集拆分为互补的子集,每个模型都在一部分子集上做训练,在剩下的子集上做验证。当模型的类型和参数选好以后,再利用这些参数在所有的训练集上进行训练,得到最终的模型。利用该模型在测试集上测试,得到泛化误差。

6 程序

我把书中的程序都用 Python 3运行了一遍,确保没有Bug并且都加了注释,方便大家理解。原书的数据集和代码在这个网站上,我自己运行的程序在我的GitHub上。

你可能感兴趣的:(第一章 机器学习概要)