购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.2 机器学习

机器学习是指通过学习已有数据中的统计规律,使计算机能够预测未知数据。一个完整的机器学习项目分为两个阶段:训练(Training)和推理(Inference)。计算机学习已有数据的过程被称为训练阶段,预测未知数据的过程被称为推理阶段。

2.2.1 机器学习的定义

给定数据集 D ={( x 1 , y 1 ),( x 2 , y 2 ), …, ( x m , y m )},其中包含 m 个数据对。第 i 条数据为( x i , y i ),这条数据被称为一组训练样本(Training Example)。在2.1节的房价预测例子中, x i 是一个特征向量,其中的每个元素是数据科学家构建的特征,例如街区收入、房屋年龄、房间数、卧室数、街区人口等。基于这些数据,我们可以使用某种机器学习模型进行建模,从数据中学习规律,并得到一个模型。此时,数据集 D 被称为样本(Sample)或训练集(Training Set), x 为特征(Feature), y 为真实值(Label)或目标值(Target)。

2.2.2 线性回归

1.一元线性回归

我们从线性回归开始了解机器学习模型的数学原理。在中学阶段,我们常用公式 y = ax + b 来对很多问题进行建模,此方程描述了变量 y 随着变量 x 的变化关系,表现为一条直线。建立这样的数学模型后,给定 x ,我们就可以得到预测的 (统计学家通常在变量 y 上加上“帽子”来表示预测值,以与真实观测到的数据相区分)。该方程只有一个自变量 x ,且不包含平方、立方等非一次项,因此称为一元线性方程。

在对数据集进行建模时,我们从最简单的情况入手,假设只关注房屋面积( x )和房价( y )两个维度的数据。我们可以通过调整参数 a b 的值,生成不同的直线,构成一个参数家族。在这些参数组合中,有一个组合是最佳的,它能够以统计上最优的方式拟合数据集。一元线性回归的监督学习过程可以定义为:给定 m 个数据对( x , y ),寻找最佳参数a * 和b * ,使模型可以更好地拟合这些数据。 a b 可以取不同的参数,到底哪个参数组合是最佳的呢?如何衡量模型是否以最优的方式拟合数据呢?机器学习使用损失函数(Loss Function)来衡量这个问题。损失函数又称为代价函数(Cost Function),它计算了模型预测值 和真实值 y 之间的差异程度。从名字也可以看出,这个函数计算的是模型犯错的损失或代价,损失函数越大,模型越差,越不能拟合数据。统计学家通常使用 来表示损失函数。

对于线性回归,一个简单实用的损失函数为预测值与真实值误差平方的平均值。在下面的公式中, i 表示数据集中的第 i 个样本点:

在此基础上,代入公式 ,得到:

对于给定数据集, x y 的值是已知的,而参数 a b 是需要求解的。模型的求解过程就是解出下面公式的过程:

其中,argmin是一个常见的数学符号,表示寻找使 L 函数最小的参数组合 a *和 b *。

求解这个函数通常有两种方法:

● 基于微积分和线性代数的知识,求出使得 L 的导数为0的点。这个点一般为最优解。这种方式适用于解简单的模型。

● 基于梯度下降法,通过迭代不断搜索最优点。梯度下降法能解决很多复杂的模型,例如深度学习模型。2.3节将进一步解释梯度下降法。

2.线性回归的一般形式

我们现在把回归问题扩展到更为一般的场景。假设 x 是多元的,或者说是多维的。例如,在预测房价时,需要考虑许多因素,包括学区、卧室数量(如两居、三居、四居)、周边商业、交通等。例如下面的公式,每个因素对应一个权重 W

W 是参数(Parameter),也称为权重(Weight)。这里共有 n 个影响因素,在机器学习领域,将这 n 个影响因素称为特征(Feature)。用向量表示为:

f ( x ) = b + W x

要预测的 y 是实数,范围从负无穷到正无穷。用于预测实数的模型被称为回归模型。

2.2.3 逻辑回归

回归问题是指目标值属于整个实数域,而分类问题则是指目标值为有限的离散值。例如,在情感分类任务重,目标值有0和1两种可能值,分别表示负向和正向情感。一个二分类函数可以表示为:

在线性回归的基础上,在其外层加上一个函数 g ( z ):

这个 g ( z )被称为Sigmoid函数或Logistic函数。下面对Sigmoid函数进行可视化。

    %config InlineBackend.figure_format = 'svg'
    import matplotlib.pyplot as plt
    import numpy as np
 
    fig, axs = plt.subplots(1, 1, figsize=(4, 3), sharey=True)
 
    # 创建X轴的数据
    x = np.linspace(-4, 4, 200)
 
    # 创建sigmoid函数的Y轴数据
    sigmoid = 1 / (1 + np.exp(-x))
 
    plt.plot(x, sigmoid, label='Sigmoid function')
    plt.title('Sigmoid')
    plt.xlabel('x')
    plt.ylabel('g(x)')
    plt.grid(True, which='both', linestyle='--', linewidth=0.5)
 
    plt.tight_layout()
    plt.show()

运行结果如图2.4所示。

图2.4 运行结果3

Logistic函数的性质决定了它可以将(-∞, ∞)映射到(0,1)上,Logistic函数有明确的分界线,在中心点处取值为0.5,因为Logistic函数有明确的分界线,可以用来进行分类。我们将线性回归代入Logistic函数,可以得到:

这里不再赘述Logistic回归的训练和求解过程的数学推导,感兴趣的读者可以在互联网上查找相关资料。 m0oajOuvRK3xVvrhGg2mRHkKtP89agUwnkbJZfPJZWpHsF7ocqkXpR5VFlmwuF4q

点击中间区域
呼出菜单
上一章
目录
下一章
×