---
schema_version: "library-reader-v1"
source_type: "original_book"
title: "人工智能与大数据技术导论"
author: null
edition: null
publisher: null
year: null
isbn: "9787302517986"
library_document_id: "cd4f7678-cd9b-4971-bde0-e9ad46a6cc71"
source_sha256: "5011cdcf83cd5e047c93a1ce7465f970fc88be69c93b94be3d7fa5fbddbb43f0"
pdf_physical_page_count: 490
pdf_physical_page_index_base: 0
range_start: 160
range_count: 10
html_url: "https://workshop.closeclaw.top/api/ai/read/cd4f7678-cd9b-4971-bde0-e9ad46a6cc71?start=160&limit=10"
markdown_url: "https://workshop.closeclaw.top/api/ai/read/cd4f7678-cd9b-4971-bde0-e9ad46a6cc71.md?start=160&limit=10"
previous_url: "https://workshop.closeclaw.top/api/ai/read/cd4f7678-cd9b-4971-bde0-e9ad46a6cc71.md?start=150&limit=10"
next_url: "https://workshop.closeclaw.top/api/ai/read/cd4f7678-cd9b-4971-bde0-e9ad46a6cc71.md?start=170&limit=10"
---

# 人工智能与大数据技术导论

> 页码规则：PDF_PHYSICAL_PAGE_INDEX 是从 0 开始的权威文件物理页索引；PRINTED_PAGE 是页面中识别出的印刷页码，可能为空，二者不得混用。

## PDF_PHYSICAL_PAGE_INDEX=160 | PRINTED_PAGE=144

明显错误的离群值(outlier)

比如某个人的年龄数据显示为175。

缺失数据

表格中有一些信息空缺，没有记录，如表4-3所示。

设想一下，假如我们遇到表4-3这样的原始数据，想必一定会很头疼吧。如果不做数据清洗，后面的模型分析等操作根本就是寸步难行。然而数据乱不等于它没有分析价值，只要经过专业的数据清洗和特征工程处理，我们仍然能得到出色的分析效果。现实中数据来源纷杂多样，绝大多数做机器学习的人都需要花费大量时间进行数据预处理和清洗。

那么，如何清洗数据呢？对于离群值（见图4-10），很多人会把离群值所在的记录去掉或者用缺失值代替，但其实很多时候这样做并不是最好的选择。离群值通常指样本中偏离均值较大的数据，在图像中通常处于“孤立”的位置。离群值所表示的数据很可能是有问题的。然而，离群值在被证明“有罪”之前都是清白的，仅当有确切、合适的理由的时候才可以去掉它，并且这样做能够提高模型的预测效果。因为“数值太大”，草率地将其去掉是不可取的，因为这个“大数值”本身可能包含了一定信息。最后无论怎样，离群值所在行的其他特征数据依然是清白的，所以这一条记录不能因为一个特征出现离群值就去掉。

对于缺失值，有几种常见的处理方式。第一种处理方式是用均值或者众数等进行填充。这样做的好处是比较快捷、方便，但可能不是最合理的方式。当缺失值比例较大时，这样做等于人为地向数据集中添加了噪声，因为这些数据并不是真实、准确的信息，从而可能会影响我们对结论的判断。类似的填充方式还有根据前后数值填充、插值填充、模型拟合填充等。第二种处理方式是去掉该特征。当一个特征大部分值都缺失时，如果我们认为这个特征对分析没有帮助，去掉该特征也并非不是一个可取的方法。第三种处理方式是保留缺失值的信息。对于分类型变量，我们可以将缺失值作为新的一类。

人工智能与大数据技术导论

144

## PDF_PHYSICAL_PAGE_INDEX=161 | PRINTED_PAGE=145

4.3.3 特征工程

特征工程（FeatureEngineering）又称特征提取，是机器学习建模之前的一个重要步骤。前文提到，机器学习的本质是要找从x到y的映射，我们最终的目标是输出y。如果x“不给力”的话，后面的努力往往会成为徒劳。特征工程就是从原始数据中找到合适的特征集x的过程。

在很多机器学习任务中，特征工程是最重要，也是最耗时的环节，其重要性远远超过建模和训练。然而这个过程最容易被初学者忽视。特征工程是漫长而艰苦的过程。在Kaggle数据科学竞赛中，选手们平均花在构建特征集的时间在70%以上。一个好的特征集通常能战胜一个好的模型或者算法。

第4章 机器学习概述

145

## PDF_PHYSICAL_PAGE_INDEX=162 | PRINTED_PAGE=NOT_DETECTED

第5章

模型

本章我们阐述模型和算法的含义，了解一个模型是如何训练出来的，了解参数的概念和在模型中的地位。本章还将学习机器学习最经典的模型——线性回归，用计算机实战操作解决机器学习问题，了解Python机器学习库 sklearn基本模式。

5.1 什么是模型

下面通过一个具体的案例来认识机器学习中的重要概念——模型，了解模型的作用及它是怎样运作的。

表5-1是从美国城市餐厅小费数据集中节选的数据，我们通过图5-1的关系图来观察小费与餐费之间的关系。

## PDF_PHYSICAL_PAGE_INDEX=163 | PRINTED_PAGE=147

用x轴表示餐费，y轴表示小费，通过观察散点图可以看出，y随着x的增加而增加，并且近似成比例增加。熟悉美国小费制度的读者应该知道，小费通常和餐费成正比，根据顾客对用餐服务的满意程度，金额一般为餐费的10%\~20%。因此，我们考虑用线性表达式来刻画x与y之间的关系：

$$
\mathbf { y } = \mathbf { a } 0 + \mathbf { a } 1 * \mathbf { _ { X } }\tag{1}
$$

上述公式就是最简单的线性回归（LinearRegression）模型。因为只有一个自变量x，所以叫作一元线性回归。下面我们以这个一元线性回归为例，来看在机器学习中模型究竟是什么，以及是怎么运作的。

公式（1）所表述的y与x之间的关系就是这个任务中我们所用的模型。对于模型的概念，我们可以这样理解，它刻画了因变量y和自变量x之间的客观关系，即y与x之间存在这样一种形式的客观规律在约束。具体来说，y约等于某个数乘以x，再加上另一个数。使用这个模型，就意味着我们认定样本数据服从这样一个规律。换句话说，模型是对处理变量关系的某种假设。在机器学习中，a1叫作权重（weight），a0叫作偏差（bias），x是一个特征（feature），而y是预测的标签。训练一个模型就是从训练数据中确定所有权重和偏差的最佳值。如图5-2所示，箭头部分表示了预测值和真实值之间的差距，这叫误差(1oss）。如果这个模型很完美，那么误差应该接近0。训练的目标是找到让误差最小的权重和偏差。

第5章 模型

147

## PDF_PHYSICAL_PAGE_INDEX=164 | PRINTED_PAGE=148

模型2：y= 2x

需要指出的是，（1）公式在统计学上不是严谨的写法，但我们在讨论机器学习时可以这样简写。y与x在统计学意义上的关系可以由下式给出：

$$
\mathbf { y } = \mathbf { a } 0 + \mathbf { a } 1 \mathbf { x } + \mathbf { e p s i l o n }
$$

或

$$
\operatorname { E } ( \mathbf { y } | \mathbf { x } ) = \mathbf { \mu } _ { \mathrm { a 0 } } + \mathbf { a } \mathbf { l } \mathbf { x }
$$

第一个式子中的epsilon是误差项，通常服从标准正态分布。第二个式子的含义与第一个相同，y在给定x的情况下服从条件正态分布，并且条件期望是a0+a1x。

在确定参数a0、a1之前，可以把上面的式子看成一系列模型，或者称为模型簇(setofmodels)。这些参数一旦取定之后，这个式子就成为一个确定模型。比如y=4+x和y =2x就是两个具体的模型，相对应的参数（a0,a1）分别为（4,0）和（0,2）。

5.2 误差和 MSE

假设我们有一组带标签的样本(x,y)，如表5-2所示。

让我们尝试用下面两个模型对原样本数据进行预测：

模型1: y = x + 4

第一个模型的预测效果如表5-3所示。

第二个模型的预测效果如表5-4所示。

上面两个表中的误差是预测值与真实值之间的距离，描述了预测值与真实值之间的偏离程度。为了评价模型的拟合效果，我们需要计算均方误差(MeanSquaredError，MSE）。均方

人工智能与大数据技术导论

148

## PDF_PHYSICAL_PAGE_INDEX=165 | PRINTED_PAGE=149

误差是所有误差平方的平均值。例如上述两个模型的均方误差分别为：

$$
\begin{array} { r l } & { \mathrm { M S E 1 } = \left( \begin{array} { l } { 1 ^ { \wedge } 2 + 0 ^ { \wedge } 2 + 0 ^ { \wedge } 2 + ( - 1 ) ^ { \wedge } 2 + ( - 3 ) ^ { \wedge } 2 } \end{array} \right) / 5 = 1 1 / 5 } \\ & { \mathrm { M S E 2 } = \left( \begin{array} { l } { ( - 1 ) ^ { \wedge } 2 + ( - 1 ) ^ { \wedge } 2 + 1 ^ { \wedge } 2 + 1 ^ { \wedge } 2 + 0 ^ { \wedge } 2 } \end{array} \right) / 5 = 4 / 5 } \end{array}
$$

均方误差通常简称为MSE，是回归模型中极为重要的概念，它描绘了整个考察的样本集中预测值和实际值的平均偏离程度。在回归任务中，我们希望MSE尽可能的小。MSE越小，说明模型的拟合效果越好。就上述两个模型相比， $y = 2 x$ 的拟合效果更优，也就是说它更接近样本数据的分布规律。

5.3 模型的训练

模型的训练就是参数的求解，即算法。那么，如何确定参数？回到前面的小费的例子：

$$
y = a 0 + a l ^ { \star } x
$$

我们现在已经认定y与x存在上述的线性关系，但我们还不知道a0、a1的值。如何确定它们？这就需要我们的样本集出场。我们想要找到最合适的a0、a1，使得上述公式能最好地拟合样本集数据的特征。这就是所谓的机器学习算法。它就是检查所有的样本数据，从而找到一个模型，这个模型的误差尽可能小。简单来说，通过算法来求解参数。比如，找到一组参数值（a0,a1），使得均方误差最小。模型训练的目标就是找到误差尽可能小的参数。

误差函数是为了评估模型拟合的好坏，通常用误差函数来度量拟合的程度。误差函数极小化意味着拟合程度最好，对应的模型参数即为最优参数。在线性回归中，误差函数可以是上述的均方误差。

5.3.1 模型与算法的区别

在前文中，我们对于模型和算法这两个概念的界定是比较模糊的，事实上，模型和算法这两个概念是有区别的。对于线性回归这个例子来说可以这样理解，用来描述问题、定义变量之间关系的公式（1）是模型本身，而用来求解模型中的参数的“最小二乘法”则可以看成是算法。总体来说，模型用来描述要解决的问题，通常为一个或一系列数学表达式；而算法则是解决这个问题的过程，用于求解模型中待定的参数，经常会通过编程来实现。

针对一个模型，可以有多种不同的算法来求解。拿线性回归来说，模型中 $\mathrm { a 0 , a 1 , \hdots , a m }$ 是需要求解的参数，而“最小二乘法”（又称最小平方法，最小化误差的平方)只是其中最经典的一种求解方法，除了“最小二乘法”之外，还可以通过极大似然估计等方法来计算。不同模型会有各自适合的算法，比如求解深度学习模型中的参数会用到著名的梯度下降算法。不同的算法可能会有截然不同的思想，比如极大似然估计是用统计学思想来估计的，而梯度下降法的思路则是利用计算机反复迭代找到最优值。

第5章 模型

149

## PDF_PHYSICAL_PAGE_INDEX=166 | PRINTED_PAGE=150

5.3.2 迭代法

迭代法是用计算机解决问题的一种基本方法。比如，5.1节中的公式（1），对于一个数据集，我们要求解最佳的a0和a1，使得它的误差最小（比如使用MSE来判断）。那么，迭代法就是利用计算机运算速度快、适合做重复性操作的特点，让计算机尝试一组一组的参数值$^ { ( } \mathrm { a } 0 , \mathrm { a } 1 )$ ，在同一个数据集上重复计算误差。在每次执行一组参数后，就换到一组新的参数(见图5-3）。机器学习算法能够使用这个迭代过程来训练模型。整个迭代一直继续，直到找到一组误差足够小的参数值。

1. 确定迭代变量

在可以用迭代算法解决的问题中，至少存在一个直接或间接地不断由旧值递推出新值的变量，这个变量就是迭代变量。在上述例子中，a0和a1是两个迭代变量。

2. 建立迭代关系式

所谓迭代关系式，是指从变量（如a0）的前一个值推出其下一个值的公式（或关系）。迭代关系式的建立是解决迭代问题的关键，通常可以使用递推或倒推的方法来完成。

3.对迭代过程进行控制

在什么时候结束迭代过程是编写迭代程序必须考虑的问题。不能让迭代过程无休止地重复执行下去。迭代过程的控制通常可分为两种情况：一种是所需的迭代次数是一个确定的值，可以计算出来；另一种是所需的迭代次数无法确定。对于前一种情况，可以构建一个固定次数的循环来实现对迭代过程的控制；对于后一种情况，需要进一步分析出用来结束迭代过程的条件。在机器学习中，这个结束的条件就是误差(比如MSE)。只要误差达到要求，就可以结束迭代。一般情况下，误差不再有大的变化，我们就可以终止迭代，然后说模型已经是收敛(converged)的了。

人工智能与大数据技术导论

150

## PDF_PHYSICAL_PAGE_INDEX=167 | PRINTED_PAGE=151

5.4 梯度下降法

在5.3.2节的迭代法中，针对图5-3中的“更改模型参数值”，我们并没有说明下一组新参数值怎么出来。假定我们有足够的时间来遍历各个a1的可能值，那么对于线性回归函数来说，误差和a1值之间的关系如图5-4所示。

误差的最小值就是误差函数收敛的位置。如果我们尝试每个a1值去找到这个收敛点，效率就低了。在机器学习中，有一个更好的方法，那就是梯度下降法（GradientDescent)。

如图5-5所示，在梯度下降法中，首先选择一个a1的起点值。这个起点值可以是0，也可以是一个随机数，这些都没关系，我们的目的是求误差的最小值。下面来看梯度下降的一个直观的解释。比如我们在一座大山上的某处位置，由于我们不知道怎么下山，于是决定走一步算一步，也就是在每走到一个位置的时候，求解当前位置的梯度，沿着梯度的负方向，也就是当前最陡峭的方向向下走一步，然后继续求解当前位置的梯度，从这一步所在的位置沿着最陡峭最易下山的方向走一步。这样一步步地走下去，一直走到山脚。当然这样走下去，有可能我们不能走到山脚，而是到了某一个局部的山峰低处。从上面的解释可以看出，梯度下降不一定能够找到全局的最优解，有可能是一个局部最优解。当然，如果误差函数是凸（convex）函数，梯度下降法得到的解就一定是全局最优解，因为最小值的地方就是梯度为0的地方。

第5章 模型

151

## PDF_PHYSICAL_PAGE_INDEX=168 | PRINTED_PAGE=152

5.4.1 步长

从上面的例子可以看出，下山或者寻找最小值取决于两个因素：

（1）每步你走哪个方向。如图5-4所示，从起点到下一个点，选择负梯度方向。

(2)每步你走多远，这叫步长(stepsize，也叫learningrate）。步长决定了在梯度下降迭代的过程中，每一步沿梯度负方向前进的长度。用上面下山的例子，步长就是在当前这一步所在位置沿着最陡峭最易下山的位置走的那一步的长度，如图5-5所示。

在机器学习算法中，在最小化误差函数时，通过梯度下降法来一步步地迭代求解，最终得到最小化的误差和模型参数值。

上述的步长是一个超参数（Hyperparameter）。所谓超参数，是模型的一些细化特征。超参数与参数不同，它们本质的区别是，参数是在模型中训练出来的，而超参数是不可被训练的。绝大多数机器学习模型都有超参数，超参数是需要我们在训练之前人为指定的。

5.4.2 优化步长

在使用梯度下降时，需要进行调优。哪些地方需要调优呢？

(1)算法的步长选择。在前面的算法描述中，可以先取步长为1，但是实际上取值取决于数据样本，可以多取一些值，从大到小，分别运行算法，看看迭代效果，如果误差函数在变小，说明取值有效，否则要增大步长。步长太小，迭代速度太慢，很长时间算法都不能结束（见图5-6）。步长太大会导致迭代过快，甚至有可能错过最优解（见图5-7）。所以算法的步长需要多次运行后才能得到一个较为优的值。

(2)算法参数的初始值选择。初始值不同，获得的最小值也有可能不同，因此梯度下降求得的只是局部最小值。当然，如果误差函数是凸函数，则一定是最优解。由于有局部最优解的风险，需要多次用不同初始值运行算法，选择误差函数最小化的初值。

人工智能与大数据技术导论

152

## PDF_PHYSICAL_PAGE_INDEX=169 | PRINTED_PAGE=153

总之，对于一个成功的模型训练来说，并不一定要找到那个最完美的步长。我们的目标是找到一个足够大的步长，这使得梯度下降能够高效收敛。

5.4.3三类梯度下降法

有三类常见的梯度下降法，下面一一进行介绍。

●批量梯度下降法

批量梯度下降法（BatchGradient Descent）是梯度下降法最常用的形式，具体做法就是在更新参数时使用所有的样本来进行更新，这个方法对应于前面的线性回归的梯度下降算法，也就是说前面的梯度下降算法就是批量梯度下降法。由于我们有m个样本，这里求梯度的时候就用了所有m个样本的梯度数据。

随机梯度下降法

随机梯度下降法（Stochastic Gradient Descent）其实和批量梯度下降法的原理类似，区别在于求梯度时没有用所有的m个样本的数据，而是仅仅选取一个样本i来求梯度。随机梯度下降法和批量梯度下降法是两个极端，一个采用所有数据来梯度下降，一个用一个样本来梯度下降。自然各自的优缺点都非常突出。对于训练速度来说，随机梯度下降法由于每次仅采用一个样本来迭代，训练速度很快，而批量梯度下降法在样本量很大的时候，训练速度不能让人满意。对于准确度来说，随机梯度下降法仅用一个样本决定梯度方向，导致解很有可能不是最优的。对于收敛速度来说，由于随机梯度下降法一次迭代一个样本，导致迭代方向变化很大，不能很快地收敛到局部最优解。

那么，有没有一个中庸的办法能够结合两种方法的优点呢？有，这就是小批量梯度下降法。

●小批量随机梯度下降法

小批量随机梯度下降法（Mini-Batch StochasticGradient Descent，Mini-BatchSGD）是批量梯度下降法和随机梯度下降法的折中，也就是对于m个样本，我们采用x个样子来迭代，1<x<m。一般可以取10到1000之间的随机数，当然根据样本的数据，可以调整这个x的值。

第5章 模型

153

下一段：[继续读取](https://workshop.closeclaw.top/api/ai/read/cd4f7678-cd9b-4971-bde0-e9ad46a6cc71.md?start=170&limit=10)
