吴恩达机器学习——第2、5章 线性回归

概述

线性回归问题,是用来解决回归问题的最简单的算法。
线性回归(Linear Regression)是一种通过属性的线性组合来进行预测的线性模型,其目的是找到一条直线或者一个平面或者更高维的超平面,使得预测值与真实值之间的误差最小化。
在这里插入图片描述
如果特征只有一个,则称之为“一元线性分析”;如果特征有多个,则称之为“多元线性分析”。

基本原理

一元线性函数可以表达为: h θ ( x ) = θ 0 + θ 1 x h_θ(x)=θ_0 + θ_1x hθ(x)=θ0+θ1x,多元线性函数可以表达为 h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 + . . . . + θ i x i h_θ(x)=θ_0+θ_1x_1+θ_2x_2+....+θ_ix_i hθ(x)=θ0+θ1x1+θ2x2+....+θixi,我们把这个函数作为线性回归的“评估函数”。
其中 θ θ θ称之为“参数”,我们的目的就是找到最合适的 θ θ θ,使真实值和预测值之间的差异足够小。
一般采用梯度下降、最小二乘法去计算该参数。

代价函数

代价函数就是为了获得最合适的 θ 0 θ_0 θ0 θ 1 θ_1 θ1而使用的函数。

平方误差函数

平方误差函数是最常用的代价函数,尤其在回归场景下的效果非常好: J ( θ 0 , θ 1 ) = 1 2 m ∑ i = 1 m ( h ( x i ) − y i ) 2 J(θ_0,θ_1)=\frac{1}{2m}\sum_{i=1}^{m}{(h(x_i)-y_i)}^2 J(θ0,θ1)=2m1i=1m(h(xi)yi)2

最合适的 θ 0 θ_0 θ0 θ 1 θ_1 θ1,就是使代价函数 J ( θ 0 , θ 1 ) J(θ_0,θ_1) J(θ0,θ1)值最小的参数。

分析一下这个函数:

  • h ( x i ) h(x_i) h(xi):代表的是第i个预测结果。
  • y i y_i yi:代表的是第i个真实结果。
  • ( h ( x i ) − y i ) 2 {(h(x_i)-y_i)}^2 (h(xi)yi)2:代表的是真实值与预测值的差的平方,之所以求平方是不是为了获得正数??
  • 1 2 m \frac{1}{2m} 2m1:m代表的是训练样本的数量,除以m可以理解,求平均值,除2m就不知道是为啥了??

梯度下降

如何求得代价函数的最小值呢?

梯度下降是求解函数最小值的常用方法。梯度下降的步骤是:

  • 设置 θ 0 θ 1 θ_0 θ_1 θ0θ1为某个值,比如0;
  • 同时改变 θ 0 θ 1 θ_0 θ_1 θ0θ1的值,使 J ( θ 0 , θ 1 ) J(θ_0, θ_1) J(θ0,θ1)越好越小,直到接近局部最优。
  • 此时的 θ 0 θ 1 θ_0 θ_1 θ0θ1就是最优解。

用一个形象的方式来描述梯度下降算法,如下图所示:
取自吴恩达教程

  • 这是一座小山,目的是从山顶快速下山。
  • 假设从点1开始下山,向周围看看哪个方向是下山最快的方向,然后往前走一步,比如到了1.1.
  • 以1.1为始重复上述的步骤,一步步往山下走,最终走到了山脚。
  • 而如果从点2开始下山的话,也会一步步走下山来,只不过终点可能是不一样的。
  • 这正是梯度下降算法的一个特点:不同的起始点,可能到达不同的局部最优点。
梯度下降公式

下面给出梯度下降的公式:
取自吴恩达教程
推导过程就算了,没这个本事,下面看看该公式各个部分的含义:

  • 目的:梯度下降的目的是求出最优点的 θ 0 θ 1 θ_0 θ_1 θ0θ1的取值。
  • 最外层的repeat代表这个公式需要不断递归,直到达到最优点为止。
  • for j=0 and j=1的意思是:因为只有两个 θ \theta θ,分别是 θ 0 , θ 1 \theta_0,\theta_1 θ0,θ1
  • := 这个符号是赋值的意思,即迭代更新 θ j θ_j θj的值。这个在java中是很常见的用法,例如 i = i + 1 i = i + 1 i=i+1
  • α α α :学习速率,代表着梯度下降的步长,α越大,则下降的越快,否则下降的越慢。
    • 太大:造成无法收敛,过于发散的问题。
    • 太小:迭代过程及其缓慢。
  • σ σ θ j J ( θ 0 , θ 1 ) \frac{\sigma}{\sigma θ_j}{J(θ_0,θ_1)} σθjσJ(θ0,θ1):是导数,后面再详细描述导数的含义。

梯度下降的计算方式,称为同步更新方式,即使用同样的样本、参数来计算 θ 0 θ 1 θ_0 θ_1 θ0θ1的值。计算过程是这样的:
在这里插入图片描述
在计算 θ 1 θ_1 θ1的时候, θ 0 θ_0 θ0依然是之前的 θ 0 θ_0 θ0

导数的作用

吴恩达老师介绍的导数概念,非常简单易懂:导数就是斜率。为了容易理解,假设 θ 0 = 0 θ_0=0 θ0=0,我们看看 θ 1 θ_1 θ1的变化情况:
在这里插入图片描述
如上图所示,沿着曲线画一条切线出来,该切线随着横轴变大的趋势,所以斜率是正值( 斜 率 角 = 垂 直 距 离 水 平 距 离 斜率角=\frac{垂直距离}{水平距离} =,如上图所示该斜率角为锐角,则斜率为正),则 θ 1 = θ 1 − α ∗ 正 数 θ_1=θ_1 - α *正数 θ1=θ1α,则 θ 1 θ_1 θ1变小,往函数的底部移动;

在这里插入图片描述
而如果起始点在局部最优点的左边,切线不断变小,斜率为负数,则 θ 1 = θ 1 − α ∗ 负 数 θ_1=θ_1 - α *负数 θ1=θ1α,则 θ 1 θ_1 θ1变大,往函数的底部移动;
斜率可以参考:斜率的计算公式

这两种情况下,都能保证 θ 1 θ_1 θ1向着局部最优点移动。当到达局部最优点时,斜率为0,则 θ 1 θ_1 θ1就不会再发生变化了。

通过梯度下降求解平方误差函数

把平方误差函数的公式带入梯度下降算法中,梯度下降算法变成如下所示的公式:
repeat{
θ 0 = θ 0 − α 1 m ∑ i = 1 m ( h θ ( x i ) − y i ) θ_0=θ_0-α\frac{1}{m}\sum_{i=1}^m(h_θ(x_i)-y_i) θ0=θ0αm1i=1m(hθ(xi)yi)
θ 1 = θ 1 − α 1 m ∑ i = 1 m ( ( h θ ( x i − y i ) ∗ x i θ_1=θ_1-α\frac{1}{m}\sum_{i=1}^m((h_θ(x_i-y_i)*x_i θ1=θ1αm1i=1m((hθ(xiyi)xi
}

这个公式,恕我推导不出来。

多变量线性回归

多变量线性回归,指的是样本特征的数量大于1个的情况,现实世界中这种情况更通用。

符号表

  • x 1 , x 2 , . . . . . . x n x_1, x_2, ......x_n x1,x2,......xn:表示特征。
  • y:预测结果。
  • m:样本数量。
  • n:特征数量
  • x ( i ) x^{(i)} x(i):代表第i个样本的特征,是一个向量。
  • x j ( i ) x_j^{(i)} xj(i):代表第i个样本的第j个特征。

评估函数

多变量线性回归的评估函数是 h θ ( x ) = θ 0 + θ 1 ∗ x 1 + θ 2 ∗ x 2 + θ 3 ∗ x 3 + . . . . . . + θ n ∗ x n h_θ(x)=θ_0+θ_1*x_1+θ_2*x_2+θ_3*x_3+......+θ_n*x_n hθ(x)=θ0+θ1x1+θ2x2+θ3x3+......+θnxn
为了表达方便,我们假设 x 0 = 1 x_0=1 x0=1,则评估函数就变成了 h θ ( x ) = θ 0 ∗ x 0 + θ 1 ∗ x 1 + θ 2 ∗ x 2 + θ 3 ∗ x 3 + . . . . . . + θ n ∗ x n h_θ(x)=θ_0*x_0+θ_1*x_1+θ_2*x_2+θ_3*x_3+......+θ_n*x_n hθ(x)=θ0x0+θ1x1+θ2x2+θ3x3+......+θnxn
下面对评估函数做一下简化处理,

  • 假 设 θ = [ θ 0 θ 1 θ 2 . . . θ n ] θ=\left[\begin{matrix}θ_0\\θ_1\\θ_2\\...\\θ_n\end{matrix}\right] θ=θ0θ1θ2...θn
  • 假设 X = [ x 0 x 1 x 2 . . . x n ] X=\left[\begin{matrix}x_0\\x_1\\x_2\\...\\x_n\end{matrix}\right] X=x0x1x2...xn
  • θ T = [ θ 0 θ 1 θ 2 . . . θ n ] θ^T=\left[\begin{matrix}θ_0&θ_1&θ_2&...&θ_n\end{matrix}\right] θT=[θ0θ1θ2...θn]
  • θ T ∗ X = h θ ( x ) θ^T * X=h_θ(x) θTX=hθ(x),所以评估函数最终简化为 h θ ( x ) = θ T ∗ X h_θ(x)=θ^T*X hθ(x)=θTX

矩阵相乘的算法可以参考:机器学习之线性代数知识普及

梯度下降

多变量下梯度下降算法的公式变为如下所示:
repeat{
θ 0 = θ 0 − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) θ_0=θ_0-α\frac{1}{m}\sum_{i=1}^m(h_θ(x^{(i)})-y^{(i)}) θ0=θ0αm1i=1m(hθ(x(i))y(i))
θ j = θ j − α 1 m ∑ i = 1 m ( ( h θ ( x ( i ) ) − y ( i ) ) ∗ x j ( i ) θ_j=θ_j-α\frac{1}{m}\sum_{i=1}^m((h_θ(x^{(i)})-y^{(i)})*x^{(i)}_j θj=θjαm1i=1m((hθ(x(i))y(i))xj(i)
}
我们还是假设 x 0 = 1 x_0=1 x0=1,则 x 0 i = 1 x_0^i = 1 x0i=1
所以梯度下降算法就可以简化为:
repeat{
θ j = θ j − α 1 m ∑ i = 1 m ( ( h θ ( x ( i ) ) − y ( i ) ) ∗ x j ( i ) θ_j=θ_j-α\frac{1}{m}\sum_{i=1}^m((h_θ(x^{(i)})-y^{(i)})*x^{(i)}_j θj=θjαm1i=1m((hθ(x(i))y(i))xj(i)
}

特征收敛

如果特征1的取值范围是(0-1),特征2的取值范围是(0-1000),这样的特征在梯度下降算法中计算起来非常慢且有可能无法收敛,解决方法就是把各个特征进行收敛,使它们的取值范围接近。

发散的特征指的是特征值间的差距过大,比如1和1000差1000倍,0.001和1其实也差1000倍。

除以最大值

比如可以把特征2的每个值都除以1000,这样就能得到(0-1)的数字了。但是这种方法有可能造成特征值太小,同样不能满足要求。

均值归一

x = x − 平 局 值 最 大 值 − 最 小 值 = x − μ S x = \frac{x-平局值}{最大值-最小值}=\frac{x-\mu}{S} x=x=Sxμ
其中 μ \mu μ指的就是平均值;S指的是“ 最 大 值 − 最 小 值 最大值-最小值

特征增减

有时候根据已有特征生成新特征,可以取得不俗的效果。
有时间把重复的特征去掉,反而能得到更好的效果。

α选值

α没有一个标准的值,太小的话计算效率慢;太大的话可能造成无法收敛,所以要不断地去优化这个参数,吴老师给出了一个经验值(0.001 0.003 0.01 0.03 0.1)。当收敛效果一致的情况下,选择稍大一些的α值,提升计算效率。

正规方程

利用正规方程可以一步求解,而不需要一步步迭代,正规方程的表达式为: θ = ( X T ∗ X ) − 1 X T Y θ=(X^T*X)^{-1}X^TY θ=(XTX)1XTY
下面对梯度下降和正规方程进行对比,看看两者的优缺点各是什么。

梯度下降正规方程
α需要计算合适的α值不需要
计算速度多次迭代,速度慢直达目标,速度快
特征数量无限制小于10000

适用场景

示例


import pandas as pd
from sklearn.linear_model import LinearRegression

# 特征字段
features = ['accommodates', 'bedrooms', 'bathrooms', 'beds', 'price', 'minimum_nights', 'maximum_nights',
            'number_of_reviews']
# normalize:特征是否做标准化处理,train_data['price']:是预测结果
reg = LinearRegression(normalize=True).fit(train_data[features], train_data['price'])
print("score", reg.score(test_data[columns], test_data['price']))

名词解释

高斯分布

高斯分布,也称之为正态分布。满足集中性、对称性、均匀变动性等特点。

  • 集中性:正态曲线的高峰位于正中央,即均数所在的位置。
  • 对称性:正态曲线以均数为中心,左右对称,曲线两端永远不与横轴相交。
  • 均匀变动性:正态曲线由均数所在处开始,分别向左右两侧逐渐均匀下降。
    在这里插入图片描述

参考

线性回归详解
线性回归原理推导与算法描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值