第一讲:监督学习之回归方法

前言

我认为阅读英文材料,自己理解之后转化为中文,不仅可以检验自己理解的熟练程度,也能锻炼自己阅读水平。

我主要以CS229课程内容为主线,介绍课程相关,供大家一起交流学习。

主要内容

  • 线性回归
  • 分类和逻辑回归
  • 广义线性模型

监督学习的实例介绍

 假设我们拥有数据集(房屋面积与价格)如表1.1所示

表1.1 房屋面积与价格
表1.1 房屋面积与价格
在这里插入图片描述

h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 h_\theta\left( x\right) = \theta_0+\theta_1x_1+\theta_2x_2 hθ(x)=θ0+θ1x1+θ2x2
这里要先规范一下符号和含义,这些符号以后还要用到,咱们假设 x ( i ) x^{(i)} x(i) 表示 “输入的” 变量值(在这个例子中就是房屋面积),也可以叫做输入特征;然后咱们用 y ( i ) y^{(i)} y(i) 来表示“输出值”,或者称之为目标变量,这个例子里面就是房屋价格。这样的一对 ( x ( i ) , y ( i ) ) (x^{(i)},y^{(i)}) (x(i),y(i))就称为一组训练样本,然后咱们用来让机器来学习的数据集,就是一个长度为 m 的训练样本的列表- ( x ( i ) , y ( i ) ) ; i = 1 , ⋮ , m {(x^{(i)},y^{(i)}); i = 1,\vdots ,m} (x(i),y(i));i=1,,m-也叫做一个训练集。另外一定注意,这里的上标 (i) 只是作为训练集的索引记号,和数学乘方没有任何关系,千万别误解了。另外我们还会用大写的 X 来表示 输入值的空间,大写的 Y 表示** 输出值的空间**。在本节的这个例子中,输入输出的空间都是实数域,所以 X = Y = R 。

然后再用更加规范的方式来描述一下监督学习问题,我们的目标是,给定一个训练集,来让机器学习一个函数 h : X → Y h: X → Y h:XY,让 h ( x ) h(x) h(x) 能是一个与对应的真实 y 值比较接近的评估值。由于一些历史上的原因,这个函数 h 就被叫做假设(hypothesis)。用一个图来表示的话,这个过程大概就是下面这样:

监督学习过程
如果我们要预测的目标变量是连续的,比如在咱们这个房屋价格-面积的案例中,这种学习问题就被称为回归问题。如果 y 只能取一小部分的离散的值(比如给定房屋面积,咱们要来确定这个房子是一个住宅还是公寓),这样的问题就叫做分类问题。

线性回归

为了让我们的房屋案例更有意思,咱们稍微对数据集进行一下补充,增加上每一个房屋的卧室数目:
房间卧室数量
现在,输入特征 x 就是在 R 2 R^2 R2 范围取值的一个二维向量了。例如 x 1 ( i ) x_1^{(i)} x1(i) 就是训练集中第 i 个房屋的面积,而 x 2 ( i ) x_2^{(i)} x2(i) 就是训练集中第 i 个房屋的卧室数目。(通常来说,设计一个学习算法的时候,选择那些输入特征都取决于你,所以如果你不在波特兰收集房屋信息数据,你也完全可以选择包含其他的特征,例如房屋是否有壁炉,卫生间的数量啊等等。关于特征筛选的内容会在后面的章节进行更详细的介绍,不过目前来说就暂时先用给定的这两个特征了。) 要进行这个监督学习,咱们必须得确定好如何在计算机里面对这个函数/假设 h 进行表示。咱们现在刚刚开始,就来个简单点的,咱们把 y 假设为一个以 x 为变量的线性函数:
h θ ( x ) = θ 0 + θ 1 × x 1 + θ 2 × x 2 h_\theta (x) = \theta_0 + \theta_1 \times x_1 + \theta_2 \times x_2 hθ(x)=θ0+θ1×x1+θ2×x2
这里的 θ i \theta_i θi是参数(也可以叫做权重),是从 x 到 y 的线性函数映射的空间参数。在不至于引起混淆的情况下,咱们可以把 h θ ( x ) h_\theta(x) hθ(x) 里面的 θ 省略掉,就简写成 h ( x h(x h(x)。另外为了简化公式,咱们还设 x 0 = 1 x_0 = 1 x0=1(这个为 截距项 intercept term)。这样简化之后就有了:

h ( x ) = ∑ i = 0 n θ i x i = θ T x h(x) = \sum^n_{i=0} \theta_i x_i = \theta^T x h(x)=i=0nθixi=θTx
等式的最右边的 θ 和 x 都是向量,等式中的 n n n 是输入变量的个数(不包括 x 0 x_0 x0)。
现在,给定了一个训练集了,咱们如何来挑选/学习参数 θ 呢?一个看上去比较合理的方法就是让 h ( x ) h(x) h(x) 尽量逼近 y,至少对咱们已有的训练样本能适用。用公式的方式来表示的话,就要定义一个函数,来衡量对于每个不同的 θ 值, h ( x ( i ) ) h(x_{(i)}) h(x(i)) 与对应的 y ( i ) y_{(i)} y(i) 的距离。这样用如下的方式定义了一个损失函数 (cost function):
J ( θ ) = 1 2 ∑ i = 1 m ( H θ ( x ( i ) ) − y ( i ) ) 2 J(\theta) = \frac 12 \sum^m_{i=1}(H_\theta(x^{(i)})-y^{(i)})^2 J(θ)=21i=1m(Hθ(x(i))y(i))2
如果之前你接触过线性回归,你会发现这个函数和常规最小二乘法拟合模型中的最小二乘法成本函数非常相似。不管之前接触过没有,咱们都接着往下进行,以后就会发现这是一个更广泛的算法家族中的一个特例。

最小均方算法(LMS algorithm)

我们希望选择一个能让 J ( θ ) J(\theta) J(θ) 最小的 θ 值。怎么做呢?咱们先用一个搜索的算法,从某一个对 θ 的“初始猜测值”,然后对 θ 值不断进行调整,来让 J ( θ ) J(\theta) J(θ) 逐渐变小,最好是直到我们能够达到一个使 J ( θ ) J(\theta) J(θ) 最小的 θ。具体来说,咱们可以考虑使用梯度下降法(gradient descent algorithm),这个方法就是从某一个 θ 的初始值开始,然后逐渐重复更新:
∂ ∂ θ J J ( θ ) = ∂ ∂ θ J 1 2 ( h θ ( x ) − y ) 2   = 2 × 1 2 ( h θ ( x ) − y ) × ∂ ∂ θ J ( h θ ( x ) − y )   = ( h θ ( x ) − y ) × ∂ ∂ θ J × ( ∑ i = 0 n θ i x i − y )   = ( h θ ( x ) − y ) × x j \begin{aligned} \frac \partial {\partial\theta_J}J(\theta) & = \frac \partial {\partial\theta_J} \frac 12(h_\theta(x)-y)^2\ & = 2 \times\frac 12(h_\theta(x)-y)\times \frac \partial {\partial\theta_J} (h_\theta(x)-y) \ & = (h_\theta(x)-y)\times \frac \partial {\partial\theta_J} \times(\sum^n_{i=0} \theta_ix_i-y) \ & = (h_\theta(x)-y)\times x_j \end{aligned} θJJ(θ)=θJ21(hθ(x)y)2 =2×21(hθ(x)y)×θJ(hθ(x)y) =(hθ(x)y)×θJ×(i=0nθixiy) =(hθ(x)y)×xj
对单个训练样本,更新规则如下所示:

θ j : = θ j + α ( y ( i ) − h θ ( x ( i ) ) ) x j ( i ) \theta_j := \theta_j + \alpha (y^{(i)}-h_\theta (x^{(i)}))x_j^{(i)} θj:=θj+α(y(i)hθ(x(i)))xj(i)

这个规则也叫 LMS 更新规则 (LMS 是 “least mean squares” 的缩写,意思是最小均方),也被称为 Widrow-Hoff 学习规则。这个规则有几个看上去就很自然直观的特性。例如,更新的大小与 ( y ( i ) − h θ ( x ( i ) ) ) (y^{(i)} − h\theta(x^{(i)})) (y(i)hθ(x(i)))成正比;另外,当我们遇到训练样本的预测值与 y ( i ) y^{(i)} y(i) 的真实值非常接近的情况下,就会发现基本没必要再对参数进行修改了;与此相反的情况是,如果我们的预测值 h θ ( x ( i ) ) h\theta(x^{(i)}) hθ(x(i)) y ( i ) y^{(i)} y(i) 的真实值有很大的误差(比如距离特别远),那就需要对参数进行更大地调整。

当只有一个训练样本的时候,我们推导出了 LMS 规则。当一个训练集有超过一个训练样本的时候,有两种对这个规则的修改方法。第一种就是下面这个算法: 重复直到收敛{ θ j : = θ j + α ∑ i = 1 m ( y ( i ) − h θ ( x ( i ) ) ) x j ( i ) \theta_j := \theta_j + \alpha \sum^m_{i=1}(y^{(i)}-h_\theta (x^{(i)}))x_j^{(i)} θj:=θj+αi=1m(y(i)hθ(x(i)))xj(i) (对每个 J) }

读者很容易能证明,在上面这个更新规则中求和项的值就是 ∂ J ( θ ) ∂ θ j \frac {\partial J(\theta)}{\partial \theta_j} θjJ(θ) (这是因为对 J 的原始定义)。所以这个更新规则实际上就是对原始的成本函数 J 进行简单的梯度下降。这一方法在每一个步长内检查所有整个训练集中的所有样本,也叫做批量梯度下降法(batch gradient descent)。这里要注意,因为梯度下降法容易被局部最小值影响,而我们要解决的这个线性回归的优化问题只能有一个全局的而不是局部的最优解;因此,梯度下降法应该总是收敛到全局最小值(假设学习速率 α \alpha α 不设置的过大)。J 是一个凸的二次函数。下面是一个样例,其中对一个二次函数使用了梯度下降法来找到最小值。
在这里插入图片描述
上图的椭圆就是一个二次函数的轮廓图。图中还有梯度下降法生成的规矩,初始点位置在 ( 48 , 30 ) (48,30) (48,30)。图中的画的 x (用直线连接起来了)标记了梯度下降法所经过的 θ 的可用值。 对咱们之前的房屋数据集进行批量梯度下降来拟合 θ ,把房屋价格当作房屋面积的函数来进行预测,我们得到的结果是 θ 0 = 71.27 , θ 1 = 0.1345 \theta_0 = 71.27, \theta_1 = 0.1345 θ0=71.27,θ1=0.1345。如果把 h θ ( x ) h_{\theta}(x) hθ(x) 作为一个定义域在 x 上的函数来投影,同时也投上训练集中的已有数据点,会得到下面这幅图:
在这里插入图片描述
如果在数据集中添加上卧室数目作为输入特征,那么得到的结果就是 θ 0 = 89.60 , θ 1 = 0.1392 , θ 0 2 = − 8.738 \theta_0 = 89.60, \theta_1 = 0.1392, \theta_02 = −8.738 θ0=89.60,θ1=0.1392,θ02=8.738 这个结果就是用批量梯度下降法来获得的。此外还有另外一种方法能够替代批量梯度下降法,这种方法效果也不错。如下所示:

循环:{ i 从 1 到 m:{ θ j : = θ j + α ( y ( i ) − h θ ( x ( i ) ) ) x j ( i ) \theta_j := \theta_j +\alpha(y^{(i)}-h_{\theta}(x^{(i)}))x_j^{(i)} θj:=θj+α(y(i)hθ(x(i)))xj(i)(对每个 j) } }

在这个算法里,我们对整个训练集进行了循环遍历,每次遇到一个训练样本,根据每个单一训练样本的误差梯度来对参数进行更新。这个算法叫做随机梯度下降法(stochastic gradient descent),或者叫增量梯度下降法(incremental gradient descent)。批量梯度下降法要在运行第一步之前先对整个训练集进行扫描遍历,当训练集的规模 m m m 变得很大的时候,因此引起的性能开销就很不划算了;随机梯度下降法就没有这个问题,而是可以立即开始,对查询到的每个样本都进行运算。通常情况下,随机梯度下降法查找到足够接近最低值的 θ 的速度要比批量梯度下降法更快一些。(也要注意,也有可能会一直无法收敛(converge)到最小值,这时候 θ 会一直在 J ( θ ) J_{(\theta)} J(θ) 最小值附近震荡;不过通常情况下在最小值附近的这些值大多数其实也足够逼近了,足以满足咱们的精度要求,所以也可以用。当然更常见的情况通常是我们事先对数据集已经有了描述,并且有了一个确定的学习速率 α \alpha α,然后来运行随机梯度下降,同时逐渐让学习速率 α \alpha α 随着算法的运行而逐渐趋于 0,这样也能保证我们最后得到的参数会收敛到最小值,而不是在最小值范围进行震荡。) 由于以上种种原因,通常更推荐使用的都是随机梯度下降法,而不是批量梯度下降法,尤其是在训练用的数据集规模大的时候。

正规方程(The normal equations)

上文中的梯度下降法是一种找出 J 最小值的办法。然后咱们聊一聊另一种实现方法,这种方法寻找起来简单明了,而且不需要使用迭代算法。这种方法就是,我们直接利用找对应导数为 0 位置的 θ j \theta_j θj,这样就能找到 J 的最小值了。我们想实现这个目的,还不想写一大堆代数公式或者好几页的矩阵积分,所以就要介绍一些做矩阵积分的记号。

矩阵导数(Matrix derivatives)

假如有一个函数 f : R m × n → R f: R_{m\times n} → R f:Rm×nR m × n m\times n m×n 大小的矩阵映射到实数域,那么就可以定义当矩阵为 A 的时候有导函数 f f f 如下所示:

∇ A f ( A ) = [ ∂ f ∂ A 11 ⋮ ∂ f ∂ A 1 n   ⋮ ⋮ ⋮   ∂ f ∂ A m 1 ⋮ ∂ f ∂ A m n   ] \nabla_A f(A)=\begin{bmatrix} \frac {\partial f}{\partial A_{11}} & \vdots & \frac {\partial f}{\partial A_{1n}} \ \vdots & \vdots & \vdots \ \frac {\partial f}{\partial A_{m1}} & \vdots & \frac {\partial f}{\partial A_{mn}} \ \end{bmatrix} Af(A)=[A11fA1nf  Am1fAmnf ]

因此,这个梯度 ∇ A f ( A ) \nabla_A f(A) Af(A)本身也是一个 m*n 的矩阵,其中的第 (i,j) 个元素是 ∂ f ∂ A i j \frac {\partial f}{\partial A_{ij}} Aijf 。 假如 A = [ A 11 A 12   A 21 A 22   ] A =\begin{bmatrix} A_{11} & A_{12} \ A_{21} & A_{22} \ \end{bmatrix} A=[A11A12 A21A22 ] 是一个 2 × 2 2\times 2 2×2 矩阵,然后给定的函数 f : R 2 × 2 → R f:R^{2\times 2} → R f:R2×2R 为:

f ( A ) = 3 2 A 11 + 5 A 12 2 + A 21 × A 22 f(A) = \frac 32A_{11}+5A^2_{12}+A_{21}\times A_{22} f(A)=23A11+5A122+A21×A22

这里面的 A i j A_{ij} Aij 表示的意思是矩阵 A 的第 (i,j) 个元素。

然后就有了梯度:

∇ A f ( A ) = [ 3 2 10 × A 12   A 22 A 21   ] \nabla A f(A) =\begin{bmatrix} \frac 32 & 10 \times A{12} \ A_{22} & A_{21} \ \end{bmatrix} Af(A)=[2310×A12 A22A21 ]

然后咱们还要引入 trace 求迹运算,简写为 tr。对于一个给定的 n × n n\times n n×n 方形矩阵 A,它的迹定义为对角项和:

t r A = ∑ i = 1 n A i i trA = \sum^n_{i=1} A_{ii} trA=i=1nAii

假如 A 是一个实数,实际上 A 就可以看做是一个 1 × 1 1\times 1 1×1 的矩阵,那么就有 A 的迹 t r a = a tr a = a tra=a。(如果你之前没有见到过这个“运算记号”,就可以把 A 的迹看成是 t r ( A ) tr(A) tr(A),或者理解成为一个对矩阵 A 进行操作的 trace 函数。不过通常情况都是写成不带括号的形式更多一些。) 如果有两个矩阵 A 和 B,能够满足 A B AB AB 为方阵,trace 求迹运算就有一个特殊的性质: t r A B = t r B A trAB = trBA trAB=trBA (自己想办法证明)。在此基础上进行推论,就能得到类似下面这样的等式关系:

t r A B C = t r C A B = t r B C A trABC=trCAB=trBCA trABC=trCAB=trBCA t r A B C D = t r D A B C = t r C D A B = t r B C D A trABCD=trDABC=trCDAB=trBCDA trABCD=trDABC=trCDAB=trBCDA

下面这些和求迹运算相关的等量关系也很容易证明。其中 A 和 B 都是方形矩阵,A 是一个实数: t r A = t r A T trA=trA^T trA=trAT t r ( A + B ) = t r A + t r B tr(A+B)=trA+trB tr(A+B)=trA+trB t r a A = a t r A tr a A=a trA traA=atrA

接下来咱们就来在不进行证明的情况下提出一些矩阵导数(其中的一些直到本节末尾才用得上)。另外要注意等式(4)A 必须是非奇异方形矩阵(non-singular square matrices),而 ∣ A ∣ |A| A 表示的是矩阵 A 的行列式。那么我们就有下面这些等量关系:

∇ A t r A B = B T (1)  ∇ A T f ( A ) = ( ∇ A f ( A ) ) T (2)  ∇ A t r A B A T C = C A B + C T A B T (3)  ∇ A ∣ A ∣ = ∣ A ∣ ( A − 1 ) T (4)  \begin{aligned} \nabla_A tr AB & = B^T & \text{(1)}\ \nabla_{A^T} f(A) & = (\nabla_{A} f(A))^T &\text{(2)}\ \nabla_A tr ABA^TC& = CAB+C^TAB^T &\text{(3)}\ \nabla_A|A| & = |A|(A^{-1})^T &\text{(4)}\ \end{aligned} AtrAB=BT(1) ATf(A)=(Af(A))T(2) AtrABATC=CAB+CTABT(3) AA=A(A1)T(4) 

为了让咱们的矩阵运算记号更加具体,咱们就详细解释一下这些等式中的第一个。加入我们有俩一个确定的矩阵 B ∈ R n × m B ∈ R^{n\times m} BRn×m(注意顺序,是 m × n m\times n m×n,这里的意思也就是 B 的元素都是实数,B 的形状是 n × m n\times m n×m 的一个矩阵),那么接下来就可以定义一个函数 f : R m × n → R f: R^{m\times n} → R f:Rm×nR ,对应这里的就是 f ( A ) = t r A B f(A) = trAB f(A)=trAB。这里要注意,这个矩阵是有意义的,因为如果 A ∈ R m × n A ∈ R^{m\times n} AR

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值