1.线性回归(Linear Regression)
1).介绍
线性回归是机器学习中最基础、最经典的算法之一,它利用线性函数对一个或多个自变量和因变量之间关系进行建模,建模过程就是使用数据点来寻找最佳拟合线。线性回归分为两种类型:单变量线性回归(Linear Regression with One Variable),一个自变量和一个结果变量,能在二维平面可视化;和 多变量线性回归(Linear Regression with Multiple Variables),至少两组自变量。
有一点需要注意,“线性回归”中的“线性”指的是因变量关于参数是线性的,而不是关于自变量,比如模型: Y i = β 1 X i + β 2 X i 2 + ε i Y_{i}=\beta_{1} X_{i}+\beta_{2} X_{i}^{2}+\varepsilon_{i} Yi=β1Xi+β2Xi2+εi,因变量对于参数 β 1 \beta_{1} β1 和 β 2 \beta_{2} β2 是线性的,但对于自变量 X i X_{i} Xi来说就是非线性的,这任然是一个线性回归模型。
- 优点:线性回归的理解与解释都十分直观,并且还能通过正则化来降低过拟合的风险。另外,线性模型很容易使用随机梯度下降和新数据更新模型权重。
- 缺点:面对样本属性数量(维度)较大的复杂模型时,会因为计算量过大而无能为力,比如图像识别问题。
2).单变量线性回归模型构建
预测函数(hypothesis):
h θ ( x ) = θ 0 + θ 1 x h_{\theta}(x)=\theta_{0}+\theta_{1} x hθ(x)=θ0+θ1x
这是用来拟合样本数据点的拟合线,我们的目标是找到最优的 θ 0 \theta_{0} θ0和 θ 1 \theta_{1} θ1使得拟合效果最好。
损失函数(Loss Function ):
L ( i ) = h θ ( x ( i ) ) − y ( i ) L^{(i)}=h_{\theta}\left(x^{(i)}\right)-y^{(i)} L(i)=hθ(x(i))−y(i)
这是单个样本预测结果和正确结果的误差值。
代价函数(Cost Function ):
J ( θ 1 , θ 2 ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J\left(\theta_{1}, \theta_{2}\right)=\frac{1}{2 m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2} J(θ1,θ2)=2m1i=1∑m(hθ(x(i))−y(i))2
代价函数是关于参数 θ \theta θ的函数,代表所有样本损失函数的总和,用来衡量评估模型的好坏,一般情况下它的值越小则模型越好。
3).梯度下降法(Gradient Descent)
前面已经构建好了预测函数和代价函数,接下来就要求解最优参数,使其能够让代价函数值最小。梯度下降法是一种求解机器学习模型最优参数的经典方法。
梯度下降法原理
分别对于每个参数 θ \theta_{} θ,求出代价函数关于该参数的偏导数,也就是代价函数在该参数方向上的斜率,然后根据斜率的符号来调整参数值,由于一个函数的偏导数方向是函数增长最快的方向,因此负偏导数就是代价函数梯度下降最快的方向,相应的斜率值也会不断趋近于0,迭代过程会使得代价函数 J ( θ 0 , θ 1 ) J\left(\theta_{0}, \theta_{1}\right) J(θ0,θ1) 的值不断向最小值收敛,最终达到局部最小值(注意:是局部最小值而非全局最小值,初始 θ 0 \theta_{0} θ0和 θ 1 \theta_{1} θ1的值会影响“下山”的方向,最终可能得到不同的收敛结果,如下图)
以前面的单变量线性回归为例,先给
θ
0
\theta_{0}
θ0和
θ
1
\theta_{1}
θ1取一个初始值,通常取0、0,然后不断重复下面的迭代步骤同步更新
θ
0
\theta_{0}
θ0和
θ
1
\theta_{1}
θ1的值:
temp
0
:
=
θ
0
−
α
∂
∂
θ
0
J
(
θ
0
,
θ
1
)
temp
1
:
=
θ
1
−
α
∂
∂
θ
1
J
(
θ
0
,
θ
1
)
θ
0
:
=
temp
0
θ
1
:
=
temp
1
\begin{array}{l} \text { temp } 0:=\theta_{0}-\alpha \frac{\partial}{\partial \theta_{0}} J\left(\theta_{0}, \theta_{1}\right) \\ \text { temp } 1:=\theta_{1}-\alpha \frac{\partial}{\partial \theta_{1}} J\left(\theta_{0}, \theta_{1}\right) \\ \theta_{0}:=\text { temp } 0 \\ \theta_{1}:=\text { temp } 1 \end{array}
temp 0:=θ0−α∂θ0∂J(θ0,θ1) temp 1:=θ1−α∂θ1∂J(θ0,θ1)θ0:= temp 0θ1:= temp 1
其中, α \alpha α是学习率(learning rate),影响每次迭代更新参数的步长,需要根据实际情况进行赋值,学习率如果太小则需要花费过多的时间来收敛,学习率如果太大则在最小值附近震荡却无法收敛到最小值。
不过对于线性回归,它们的代价函数图像并非上面那样,线性回归的代价函数图像总是一个凸函数(convex function),如下图,它并没有“局部最优解”,它只有一个“全局最优解”。
4).过度拟合(Overfitting)问题及解决方法
在机器学习模型构建时,过拟合是指过于精确和严格地匹配每一个样本数据,导致得到了参数过多或者结构过于复杂的模型,虽然该模型能对已有样本数据进行偏差极小(甚至0偏差)的“完美“拟合,但是它的 泛化能力(Generalization) 很差,无法用来预测新的数据样本。发生过拟合时,模型的偏差小而方差大。过拟合的本质是训练算法从统计噪声中不自觉获取了信息并表达在了模型结构的参数当中。
解决方法
(1).增加样本的数量(易受现实条件限制)
(2).减少特征变量的数量(缺点:同时可能会丢失一些有用的信息)
(3).正则化(推荐):
如下图右侧的过拟合现象,假如我们既想保留全部的参数,又不希望过拟合,那么我们可以通过给高次项的参数 θ 3 \theta_{3} θ3和参数 θ 4 \theta_{4} θ4加上一个惩罚系数(这里取了1000),当我们优化代价函数值到最小的过程,参数 θ 3 \theta_{3} θ3和 θ 4 \theta_{4} θ4就会*变得很小,从而减小了 θ 3 \theta_{3} θ3和 θ 4 \theta_{4} θ4对于最终模型拟合起到的权重作用,解决了过拟合问题。
但是对于更复杂的问题,可能有成百上千个特征参数,我们并不知道应该缩放哪些特征参数、应该缩放多大比例,这个时候常规的正则化方法是:在代价函数最后加上一个正则项 λ ∑ j = 1 n θ j 2 \lambda \sum_{j=1}^{n} \theta_{j}^{2} λ∑j=1nθj2,对全体特征参数进行收缩,通常这种方法非常有效,每个特征参数都会以各自的比例收缩,最终预测函数的图像会变得相对光滑,模型复杂度会降低,不会再出现过拟合问题。
正则项中 λ \lambda λ的作用是控制我们的模型在两个目标之间的平衡关系:第一个目标是模型要尽可能好地拟合训练数据集,第二个目标是模型要尽可能简单,从而防止过拟合。也就是说,参数 λ \lambda λ可以控制我们的模型在“欠拟合”和“过拟合”之间的一个平衡位置,尽可能地实现“恰当拟合”。
在线性回归中,通常正则化的代价函数形式如下:
J
(
θ
)
=
−
1
m
[
∑
i
=
1
m
y
(
i
)
log
h
θ
(
x
(
i
)
)
+
(
1
−
y
(
i
)
)
log
(
1
−
h
θ
(
x
(
i
)
)
)
]
+
λ
2
m
∑
j
=
1
n
θ
j
{J(\theta)}=-\frac{1}{m}\left[\sum_{i=1}^{m} y^{(i)} \log h_{\theta}\left(x^{(i)}\right)+\left(1-y^{(i)}\right) \log \left(1-h_{\theta}\left(x^{(i)}\right)\right)\right]+\frac{\lambda}{2 m} \sum_{j=1}^{n} \theta_{j}
J(θ)=−m1[i=1∑my(i)loghθ(x(i))+(1−y(i))log(1−hθ(x(i)))]+2mλj=1∑nθj
2.逻辑回归(Logistic Regression)
1).介绍
逻辑回归是解决分类问题最基础、最经典的算法,通常用于二分类(只有两种结果标签),通过估计预测事件发生的可能性来推断是否发生,从而进行二分类。比如某用户购买某商品的可能性,某病人患有某种疾病的可能性,以及某广告被用户点击的可能性等。有一点要注意:虽然名叫“逻辑回归”,但它并不属于回归,而是一种分类算法。
与线性回归的联系: 逻辑回归与线性回归都是一种广义线性模型(generalized linear model)。逻辑回归假设因变量 y 服从伯努利分布,故使用极大似然法作为参数估计方法;而线性回归假设因变量 y 服从高斯分布,故使用最小二乘法作为参数估计方法。 因此它们有很多相同之处,去除Sigmoid联系函数的话,逻辑回归算法就是一个线性回归。可以说,逻辑回归是以线性回归为理论支持的,但是逻辑回归通过Sigmoid联系函数引入了非线性因素,从而可以轻松处理0/1分类问题。
2).模型构建
预测函数(hypothesis):
h θ ( x ) = g ( θ T x ) h_{\theta}(x)=g\left(\theta^{T} x\right) hθ(x)=g(θTx)
其中,函数 g ( z ) g(z) g(z)名为Sigmoid函数,又名逻辑函数(Logistic function),形式如下:
g ( z ) = 1 1 + e − z g(z)=\frac{1}{1+e^{-z}} g(z)=1+e−z1
Sigmoid函数的图像:
逻辑回归使用Sigmoid函数而不是线性函数,是因为:
- 我们要预测事物发生的可能性,这个概率值的范围是(0,1),恰好符合Sigmoid函数结果范围,而线性回归得到的结果范围是 ( − ∞ , + ∞ ) (-\infty,+\infty) (−∞,+∞),虽然也可以通过设定阈值来进行二分类,但是无法给出一个能表示可能性大小的数值结果。
- 如果样本中有偏离中心较远的离散值,那么使用线性回归拟合数据就会有很大的偏差,如下图所示,在这种情况下,如果使用S形函数Sigmoid就可以很好地解决该问题。
对于逻辑回归,我们希望最终要预测的结果是:
P ( y = 1 ∣ x ; θ ) = g ( θ T x ) = 1 1 + e − θ T x P(y=1 \mid x ; \theta)=g\left(\theta^{T} x\right)=\frac{1}{1+e^{-\theta^{T} x}} P(y=1∣x;θ)=g(θTx)=1+e−θTx1
也就是在给定 x x x 和 θ \theta θ 的条件下 y = 1 y=1 y=1的概率。一般情况选择0.5作为判定”是或否“的阈值,实际应用根据情况选择不同阈值,如果对正例的判别准确性要求高,可以选择阈值大一些,反之可以选择阈值小一些。
3).决策边界(Decision Boundary)
如下图,决策边界是两种样本类型分界的直线(或曲线、超平面),处于决策边界上的点刚好满足 h θ ( x ) = 0.5 h_{\theta}(x)=0.5 hθ(x)=0.5(刚好达到判定阈值),又因 g ( z ) = 1 1 + e − θ T x g(z)=\frac{1}{1+e^{-\theta^{T} x}} g(z)=1+e−θTx1,故此时 θ T x = 0 \theta^{T} x = 0 θTx=0,在下面这个例子中决策边界为 − 3 + x 1 + x 2 = 0 -3+x_{1}+x_{2}=0 −3+x1+x2=0,这条直线将图像分成了 y = 1 y=1 y=1的上部区域和 y = 0 y=0 y=0的下部区域。
注意:决策边界由预测函数唯一决定,是预测函数的属性,而不是由样本数据决定。一旦预测函数确定,决策边界也就唯一确定。
除了线性决策边界,还有非线性,如下图,该例的决策边界是圆形曲线: − 1 + x 1 2 + x 2 2 = 0 -1+x_{1}^{2}+x_{2}^{2}=0 −1+x12+x22=0
4).代价函数(Cost Function )
J ( θ ) = − 1 m [ ∑ i = 1 m ( y ( i ) log h θ ( x ( i ) ) + ( 1 − y ( i ) ) log ( 1 − h θ ( x ( i ) ) ) ] J(\theta)=-\frac{1}{m}\left[\sum_{i=1}^{m}\left(y^{(i)} \log h_{\theta}\left(x^{(i)}\right)+\left(1-y^{(i)}\right) \log \left(1-h_{\theta}\left(x^{(i)}\right)\right)\right]\right. J(θ)=−m1[i=1∑m(y(i)loghθ(x(i))+(1−y(i))log(1−hθ(x(i)))]
根据以上代价函数表达式,对于单个样本点:
Cost ( h θ ( x ) , y ) = { − log ( h θ ( x ) ) if y = 1 − log ( 1 − h θ ( x ) ) if y = 0 \operatorname{Cost}\left(h_{\theta}(x), y\right)=\left\{\begin{aligned} -\log \left(h_{\theta}(x)\right) & \text { if } y=1 \\ -\log \left(1-h_{\theta}(x)\right) & \text { if } y=0 \end{aligned}\right. Cost(hθ(x),y)={−log(hθ(x))−log(1−hθ(x)) if y=1 if y=0
特点:当 y = 1 y=1 y=1时, Cost ( h θ ( x ) , y ) = − log ( h θ ( x ) ) \operatorname{Cost}\left(h_{\theta}(x), y\right)=-\log \left(h_{\theta}(x)\right) Cost(hθ(x),y)=−log(hθ(x)),该函数图像如下
此时,由于正确结果 y = 1 y=1 y=1,如果我们模型的预测结果 h θ ( x ) h_{\theta}(x) hθ(x)趋近于1,那么模型预测是正确的,代价函数值趋近于0,合理;而相反的,如果我们模型的预测结果趋近于0,也就是得出了与正确结果”1“相反的错误结果”0“,此时模型预测结果越趋近于错误结果”0“,代价函数值就越来越大,直到趋近于正无穷,这是因为”犯错“是要付出”代价“的,而我们最终优化模型的目的就是让代价函数越小越好。
当 y = 0 y=0 y=0时同理。
代价函数的正则化方法同线性回归:
J ( θ ) = − 1 m [ ∑ i = 1 m ( y ( i ) log h θ ( x ( i ) ) + ( 1 − y ( i ) ) log ( 1 − h θ ( x ( i ) ) ) ] + λ 2 m ∑ j = 1 n θ j 2 J(\theta)=-\frac{1}{m}\left[\sum_{i=1}^{m}\left(y^{(i)} \log h_{\theta}\left(x^{(i)}\right)+\left(1-y^{(i)}\right) \log \left(1-h_{\theta}\left(x^{(i)}\right)\right)\right]\right. + \frac{\lambda}{2 m} \sum_{j=1}^{n} \theta_{j}^{2} J(θ)=−m1[i=1∑m(y(i)loghθ(x(i))+(1−y(i))log(1−hθ(x(i)))]+2mλj=1∑nθj2
5).求解模型最优参数的方法
和线性回归相似,常用的方法还是梯度下降,通过下面的公式每轮迭代更新参数参数集 θ T \theta^{T} θT中的每个 θ j \theta_j θj,直到代价函数值收敛到最小:
θ j : = θ j − α ∂ ∂ θ j J ( θ ) \theta_{j}:=\theta_{j}-\alpha \frac{\partial}{\partial \theta_{j}} J(\theta) θj:=θj−α∂θj∂J(θ)