最近自己会把自己个人博客中的文章陆陆续续的复制到CSDN上来,欢迎大家关注我的 个人博客,以及我的github。
本文主要讲解线性回归、Logistic回归以及softmax回归的相关知识。
本文主要是依据李航老师的《统计学习方法》和邹博老师的机器学习教学视频总结编写的。文中所用到的有关机器学习的基本概念和方法请参考文章:机器学习概述及基本概念。在用到的时候就不再一一解释了。以下文章所列出的公式以及公式的推导读者们最好是在草稿本上自己推导一遍。由于本人水平所限,文章中难免有错误和不当之处,欢迎大家多多批评指正!
一、线性回归
如下图所示, 线性回归(linear regression)就是用一条二维空间或者更高维度空间中的一条直线来拟合给定的样本点,这条直线就是我们根据样本点所建立的线性回归模型。而线性回归要做的就是选择一条最优的直线,或者说选择一组最优的直线参数。其示意图如下:
我们都知道一条平面直线的方程可以写为:
y
=
θ
0
+
θ
1
x
y=\theta_0+\theta_1x
y=θ0+θ1x
其中
θ
\theta
θ是参数;x是自变量,或者说特征。 推广到n维空间,我们可以得到线性回归的假设函数(模型)为:
h
θ
(
x
)
=
θ
0
x
0
+
θ
1
x
1
+
θ
2
x
2
+
…
+
θ
n
x
n
=
θ
T
X
h_\theta(x)=\theta_0x_0+\theta_1x_1+\theta_2x_2+…+\theta_nx_n=\theta^TX
hθ(x)=θ0x0+θ1x1+θ2x2+…+θnxn=θTX
注意因为是线性的,所以上式中最大是一次项,其中
x
0
x_0
x0是恒等于1的,
θ
T
\theta^T
θT就是又各个
θ
\theta
θ构成的参数向量,X是特征矩阵,即
θ
T
=
(
θ
0
,
θ
1
,
θ
2
,
…
,
θ
n
)
\theta^T=(\theta_0,\theta_1,\theta_2,…,\theta_n)
θT=(θ0,θ1,θ2,…,θn)
X = ( x 0 , x 1 , x 2 , … , x n ) X=(x_0,x_1,x_2,…,x_n) X=(x0,x1,x2,…,xn)
模型有了,下一步就是要定义线性回归模型的损失函数,并根据该损失函数确定最优的参数值。上一篇文章提到的损失函数有很多,其中最常用是均方误差(MSE)函数:
J
(
θ
)
=
1
2
n
∑
i
=
1
n
(
h
θ
(
x
i
)
−
y
i
)
2
=
1
2
n
(
h
θ
(
x
)
−
y
)
2
J(\theta)=\frac{1}{2n}\sum_{i=1}^{n}{(h_\theta(x_i)-y_i)^2}=\frac{1}{2n}(h_\theta(x)-y)^2
J(θ)=2n1i=1∑n(hθ(xi)−yi)2=2n1(hθ(x)−y)2
严格来说MSE函数的系数应该是
1
n
\frac{1}{n}
n1,上式中的
1
2
n
\frac{1}{2n}
2n1不会影响函数的凹凸性,但是可以让求导之后结果更美观。为了确定梯度下降时参数更新的梯度方向,可以对
J
(
θ
)
J(\theta)
J(θ)关于
θ
\theta
θ求导:
∂
J
(
θ
)
∂
θ
j
=
∂
∂
θ
j
1
2
n
(
h
θ
(
x
)
−
y
)
2
=
n
(
h
θ
(
x
)
−
y
)
∂
∂
θ
j
(
h
θ
(
x
)
−
y
)
\frac{\partial{J(\theta)}}{\partial \theta_j}=\frac{\partial}{\partial \theta_j}\frac{1}{2n}(h_\theta(x)-y)^2=n(h_\theta(x)-y)\frac{\partial}{\partial \theta_j}(h_\theta(x)-y)
∂θj∂J(θ)=∂θj∂2n1(hθ(x)−y)2=n(hθ(x)−y)∂θj∂(hθ(x)−y)
= n ( h θ ( x ) − y ) ∂ ∂ θ j ( ∑ i = 0 n θ i x i − y ) = n ( h θ ( x ) − y ) x j =n(h_\theta(x)-y)\frac{\partial}{\partial \theta_j}(\sum_{i=0}^{n}\theta_ix_i-y)=n(h_\theta(x)-y)x_j =n(hθ(x)−y)∂θj∂(i=0∑nθixi−y)=n(hθ(x)−y)xj
所以就可以得到梯度下降算法中每次theta的迭代公式:
Repeat until convergence{
θ
j
:
=
θ
j
−
α
(
h
θ
(
x
)
−
y
)
x
j
\theta_j:=\theta_j-\alpha(h_\theta(x)-y)x_j
θj:=θj−α(hθ(x)−y)xj
}
迭代公式中原本应该有个系数n,但是可以整合到学习率中去,所以在写的时候就省略掉了。
在得到最终的模型之后,如果要对新的数据进行预测,则只需要把新数据的所有特征输入到这个模型(直线方程)中,则得到的输出就是最后的预测结果。
二、Logistic回归
Logistic回归也被译作逻辑斯蒂回归(翻译的真不咋地),虽然叫做回归,但是是一种二分类算法。顾名思义,二分类就是分类结果只有两个的分类,比如把人分为男人和女人。
上面提到的线性回归是不适合做二分类的,而因为Logistic回归的假设函数的取值范围是[0,1],所以我们就可以取0.5为阈值,将输出值>=0.5的看作正类,反之看作负类。输出值的大小又可以被看作它属于某个分类的可能性大小,显然0.9比0.6更可能属于正类。
Logistic回归的假设函数为:
h
θ
(
x
)
=
g
(
θ
T
X
)
h_\theta(x)=g(\theta^TX)
hθ(x)=g(θTX)
其中g(z)是sigmoid函数(S型函数),其表达式为:
g
(
z
)
=
1
1
+
e
−
z
g(z)=\frac{1}{1+e^{-z}}
g(z)=1+e−z1
sigmoid函数的图像如下图所示,可以发现当z>=0时,g(z)>=0.5,为正类,而当z<0时,g(z)<0.5,为负类。
上述假设函数表示某个样本为正类/负类时的概率,Logistic回归模型还有另一种描述形式:
P
(
Y
=
1
∣
x
)
=
e
θ
T
X
1
+
e
θ
T
X
=
1
1
+
e
−
θ
T
X
P(Y=1|x)=\frac{e^{\theta^T X}}{1+e^{\theta^T X}}=\frac{1}{1+e^{-\theta^T X}}
P(Y=1∣x)=1+eθTXeθTX=1+e−θTX1
P ( Y = 0 ∣ x ) = 1 1 + e θ T X = e − θ T X 1 + e − θ T X P(Y=0|x)=\frac{1}{1+e^{\theta^T X}}=\frac{e^{-\theta^T X}}{1+e^{-\theta^T X}} P(Y=0∣x)=1+eθTX1=1+e−θTXe−θTX
分别表示某个样本为正类或负类的概率,两者的概率和为1。你会发现这两种不同的模型描述方式其实是等价的。
Logistic回归的损失函数为:
J
(
θ
)
=
1
n
∑
i
=
1
n
C
o
s
t
(
h
θ
(
x
i
)
,
y
i
)
J(\theta)=\frac{1}{n}\sum_{i=1}^nCost(h_\theta(x_i),y_i)
J(θ)=n1i=1∑nCost(hθ(xi),yi)
其中:
C
o
s
t
(
h
θ
(
x
)
,
y
)
=
{
−
log
(
h
θ
(
x
)
)
,
y
=
1
−
log
(
1
−
h
θ
(
x
)
)
,
y
=
0
Cost(h_\theta(x),y)=\begin{cases} -\log(h_\theta(x)),y=1\\ -\log(1-h_\theta(x)), y=0\end{cases}
Cost(hθ(x),y)={−log(hθ(x)),y=1−log(1−hθ(x)),y=0
大家可以尝试分别画出在y=1和y=0时Cost()函数的图像,注意自变量h(x)的取值范围是[0,1]。比如当y=1时,h(x)越趋近于1则损失越趋近于0,反之h(x)越趋近于0,损失越趋近于正无穷。我们还可以将Cost()函数改写为:
C
o
s
t
(
h
(
x
)
,
y
)
=
y
log
(
h
(
x
)
)
+
(
1
−
y
)
log
(
1
−
h
(
x
)
)
Cost(h(x),y)=y\log(h(x))+(1-y)\log(1-h(x))
Cost(h(x),y)=ylog(h(x))+(1−y)log(1−h(x))
由于y的取值只可能是0或1,所以想要验证上式的正确性可以将y=0和y=1带入到上式。
所以最后的损失函数为:
J
(
θ
)
=
−
1
n
∑
i
=
1
n
(
y
i
log
(
h
(
x
i
)
)
+
(
1
−
y
i
)
log
(
1
−
h
(
x
i
)
)
)
J(\theta)=-\frac{1}{n}\sum_{i=1}^{n}{(y_i\log(h(x_i))+(1-y_i)\log(1-h(x_i)))}
J(θ)=−n1i=1∑n(yilog(h(xi))+(1−yi)log(1−h(xi)))
即我们用负的对数似然(NLL)函数作为损失函数,为什么要加负号呢?因为要保证损失函数是凸函数。
同样的,对Logistic回归的损失函数求导后,可以得到梯度下降的参数更新规则:
Repeat until convergence{
θ
j
:
=
θ
j
−
α
(
h
θ
(
x
)
−
y
)
x
j
\theta_j:=\theta_j-\alpha(h_\theta(x)-y)x_j
θj:=θj−α(hθ(x)−y)xj
}
大家会发现,会得到一个和线性回归具有相同形式的结论,唯一的区别是两者的假设函数不同。
三、softmax回归
现在大家思考一个问题:可不可以用Logistic回归(二分类器)解决多分类问题呢?答案是可以的,因为对于某个分类来说,所有的样本只存在是该分类和不是该分类两种情况。所有当有k个分类时,我们可以创建k个二分类器,分别预测样本属于当前分类的概率,则概率最大的那个分类就被当作该样本的最终分类。
但是这样的方式未免太麻烦了,所以人们又提出了softmax回归作为logistic回归的拓展,用来解决多分类问题。softmax回归又称多项Logistic回归。该部分我还没有理顺,而网上的讲解看起来总是觉得很费劲,所以等我完全理顺后再更新吧。