线性模型
一、线性回归模型
1.1 普通线性回归模型
本质:根据现有的数据,找出自变量和因变量的关系,估计一个函数的过程。线性回归模型是有监督学习问题。
给定样本 x ⃗ = ( x 1 , x 2 , . . . , x d ) {\rm{\vec x = (}}{{\rm{x}}_1}{\rm{, }}{{\rm{x}}_2}{\rm{ , }}...{\rm{ , }}{{\rm{x}}_d}{\rm{)}} x=(x1,x2,...,xd),线性模型通过试图学习属性的线性组合来进行函数的预测。
f
(
x
)
=
w
1
x
1
+
w
2
x
2
+
.
.
.
+
w
d
x
d
+
b
f(x) = {w_1}{x_1} + {w_2}{x_2} + ... + {w_d}{x_d} + b
f(x)=w1x1+w2x2+...+wdxd+b
写成向量的形式:
f
(
x
)
=
w
T
x
+
b
f(x) = {w^{\rm{T}}}x + b
f(x)=wTx+b
1.1.1 输入输出
输入: D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) } {\rm{D = \{ (}}{{\rm{x}}_1}{\rm{,}}{{\rm{y}}_1}{\rm{), (}}{{\rm{x}}_2}{\rm{,}}{{\rm{y}}_2}{\rm{), }}...{\rm{ , (}}{{\rm{x}}_m}{\rm{,}}{{\rm{y}}_m}{\rm{)\} }} D={(x1,y1),(x2,y2),...,(xm,ym)}
输出: w = ( w 1 , w 2 , . . . , w m ) {\rm{w = (}}{{\rm{w}}_1}{\rm{, }}{{\rm{w}}_2}{\rm{ , }}...{\rm{ , }}{{\rm{w}}_m}{\rm{)}} w=(w1,w2,...,wm)和b
1.1.2 算法流程
线性回归模型试图学习:
f
(
x
i
)
=
w
T
x
i
+
b
,
使
得
f
(
x
i
)
≈
y
i
f({x_i}) = {w^{\rm{T}}}{x_i} + b,使得f({x_i}) \approx {y_i}
f(xi)=wTxi+b,使得f(xi)≈yi
最简单的方法是采用均方误差最小化的形式来进行求解:
E
(
w
,
b
)
=
arg
min
(
w
,
b
)
∑
i
=
1
m
(
f
(
x
i
)
−
y
i
)
2
{E_{(w,b)}}{\rm{ = }}\mathop {\arg \min }\limits_{(w,b)} \sum\limits_{i = 1}^m {{{(f({x_i}) - {y_i})}^2}}
E(w,b)=(w,b)argmini=1∑m(f(xi)−yi)2
其本质是试图找到一根直线,使得所有样本到该直线的欧式距离之和最小。
方法一:
-
将均方误差分别对w和b求导:
E ( w , b ) = arg min ( w , b ) ∑ i = 1 m ( f ( x i ) − y i ) 2 = arg min ( w , b ) ∑ i = 1 m ( y i − w T x i − b ) 2 {E_{(w,b)}}{\rm{ = }}\mathop {\arg \min }\limits_{(w,b)} \sum\limits_{i = 1}^m {{{(f({x_i}) - {y_i})}^2}} {\rm{ = }}\mathop {\arg \min }\limits_{(w,b)} \sum\limits_{i = 1}^m {{{({y_i} - {w^{\rm{T}}}{x_i} - b)}^2}} E(w,b)=(w,b)argmini=1∑m(f(xi)−yi)2=(w,b)argmini=1∑m(yi−wTxi−b)2
得到:
∂ E ( w , b ) ∂ w = 2 ( w ∑ i = 1 m x i 2 − ∑ i = 1 m ( y i − b ) x i ) ∂ E ( w , b ) ∂ b = 2 ( m b − ∑ i = 1 m ( y i − w x i ) ) \begin{array}{l} \frac{{\partial {E_{(w,b)}}}}{{\partial w}}{\rm{ = 2}}\left( {{w}\sum\limits_{i = 1}^m {x_i^2} - } \right.\left. {\sum\limits_{i = 1}^m {({y_i} - b){x_i}} } \right)\\ \frac{{\partial {E_{(w,b)}}}}{{\partial b}}{\rm{ = 2}}\left( {mb - \sum\limits_{i = 1}^m {({y_i} - w{x_i})} } \right) \end{array} ∂w∂E(w,b)=2(wi=1∑mxi2−i=1∑m(yi−b)xi)∂b∂E(w,b)=2(mb−i=1∑m(yi−wxi)) -
令上述公式等于0,可得到:
w = ∑ i = 1 m y i ( x i − x ˉ ) ∑ i = 1 m x i 2 − 1 m ( ∑ i = 1 m x i ) 2 b = 1 m ∑ i = 1 m ( y i − w x i ) \begin{array}{l} {\rm{w}} = \frac{{\sum\limits_{i = 1}^m {{y_i}({x_i} - \bar x)} }}{{\sum\limits_{i = 1}^m {x_i^2} - \frac{1}{m}{{\left( {\sum\limits_{i = 1}^m {{x_i}} } \right)}^2}}}\\ {\rm{b}} = \frac{1}{m}\sum\limits_{i = 1}^m {\left( {{y_i} - w{x_i}} \right)} \end{array} w=i=1∑mxi2−m1(i=1∑mxi)2i=1∑myi(xi−xˉ)b=m1i=1∑m(yi−wxi)
其中 x ˉ = 1 m × ∑ i = 1 m x i \bar x = \frac{1}{m} \times \sum \limits_{i = 1}^m{x_i} xˉ=m1×i=1∑mxi为x的均值。:
方法二(采用矩阵的计算方式):
- 数据写成矩阵的形式:
[ y 1 y 2 . . . y m ] = [ x 11 x 12 . . . x 1 d 1 x 21 x 22 . . . x 2 d 1 . . . . . . . . . . . . 1 x m 1 x m 2 . . . x m d 1 ] [ w 1 . . . w d b ] \left[ \begin{array}{l} y_1\\ y_2\\ ...\\ y_m\\ \end{array} \right] =\left[ \begin{matrix} x_{11}& x_{12}& ...& x_{1d}& 1\\ x_{21}& x_{22}& ...& x_{2d}& 1\\ ...& ...& ...& ...& 1\\ x_{m1}& x_{m2}& ...& x_{md}& 1\\ \end{matrix} \right] \left[ \begin{array}{l} w_1\\ ...\\ w_d\\ b\\ \end{array} \right] ⎣⎢⎢⎡y1y2...ym⎦⎥⎥⎤=⎣⎢⎢⎡x11x21...xm1x12x22...xm2............x1dx2d...xmd1111⎦⎥⎥⎤⎣⎢⎢⎡w1...wdb⎦⎥⎥⎤
令:
y
⃗
=
(
y
1
,
y
2
,
.
.
.
,
y
m
)
{\vec y}= ({y_1},{y_2},...,{y_m})
y=(y1,y2,...,ym)
x → = [ x 11 x 12 . . . x 1 d 1 x 21 x 22 . . . x 2 d 1 . . . . . . . . . . . . 1 x m 1 x m 2 . . . x m d 1 ] \overrightarrow{x}=\left[ \begin{matrix} x_{11}& x_{12}& ...& x_{1d}& 1\\ x_{21}& x_{22}& ...& x_{2d}& 1\\ ...& ...& ...& ...& 1\\ x_{m1}& x_{m2}& ...& x_{md}& 1\\ \end{matrix} \right] x=⎣⎢⎢⎡x11x21...xm1x12x22...xm2............x1dx2d...xmd1111⎦⎥⎥⎤
w ~ ⃗ ∗ = [ w 1 . . . w d b ] \vec{\tilde{w}}^*=\left[ \begin{array}{l} w_1\\ ...\\ w_d\\ b\\ \end{array} \right] w~∗=⎣⎢⎢⎡w1...wdb⎦⎥⎥⎤
采用均方误差最小化的形式来进行求解(也称为“最小二次乘法”):
w
~
⃗
∗
=
arg
min
w
~
⃗
(
y
⃗
−
x
⃗
w
~
⃗
)
T
(
y
⃗
−
x
⃗
w
~
⃗
)
\vec{\tilde{w}}^*=\text{arg}\min _{\vec{\tilde{w}}}\left( \vec{y}-\vec{x}\vec{\tilde{w}} \right) ^T\left( \vec{y}-\vec{x}\vec{\tilde{w}} \right)
w~∗=argw~min(y−xw~)T(y−xw~)
令
E
w
~
⃗
=
(
y
⃗
−
x
⃗
w
~
⃗
)
T
(
y
⃗
−
x
⃗
w
~
⃗
)
E_{\vec{\tilde{w}}}=\left( \vec{y}-\vec{x}\vec{\tilde{w}} \right) ^T\left( \vec{y}-\vec{x}\vec{\tilde{w}} \right)
Ew~=(y−xw~)T(y−xw~),求它的极小值。对
w
~
⃗
{\vec{\tilde{w}}}
w~求导,可得:
∂
E
w
~
⃗
∂
w
~
⃗
=
2
x
⃗
T
(
x
⃗
w
~
⃗
−
y
⃗
)
\frac{\partial \text{E}_{ \vec{\tilde{w}}}}{\partial \vec{\tilde{w}}}=2\vec{x}^{\text{T}}\left( \vec{x}\vec{\tilde{w}}-\vec{y} \right)
∂w~∂Ew~=2xT(xw~−y)
令导数等于0,可得:
w
~
⃗
∗
=
(
x
⃗
T
x
⃗
)
−
1
x
⃗
T
y
⃗
\vec{\tilde{w}}^*=\text{(}\vec{x}^{\text{T}}\vec{x}\text{)}^{-1}\vec{x}^{\text{T}}\vec{y}
w~∗=(xTx)−1xTy
-
( x ⃗ T x ⃗ ) − 1 {{\rm{(}}{\vec x^{\rm{T}}}\vec x{\rm{)}}^{ - 1}} (xTx)−1为满秩矩阵时,有唯一解:
w ~ ⃗ ∗ = ( x ⃗ T x ⃗ ) − 1 x ⃗ T y ⃗ \vec{\tilde{w}}^*=\text{(}\vec{x}^{\text{T}}\vec{x}\text{)}^{-1}\vec{x}^{\text{T}}\vec{y} w~∗=(xTx)−1xTy -
( x ⃗ T x ⃗ ) − 1 {{\rm{(}}{\vec x^{\rm{T}}}\vec x{\rm{)}}^{ - 1}} (xTx)−1不是满秩矩阵时,存在多个解。常用的做法是引入正则项,来确定最优解:
w ~ ⃗ ∗ = arg min w ~ ⃗ [ ( y ⃗ − x ⃗ w ~ ⃗ ) T ( y ⃗ − x ⃗ w ~ ⃗ ) + λ ∥ w ~ ⃗ ∥ 2 2 ] \vec{\tilde{w}}^*=\text{arg}\min_{\vec{\tilde{w}}}\left[ \left( \vec{y}-\vec{x}\vec{\tilde{w}} \right) ^T\left( \vec{y}-\vec{x}\vec{\tilde{w}} \right) +\boldsymbol{\lambda }\lVert \left. \vec{\tilde{w}} \rVert _{2}^{2} \right. \right] w~∗=argw~min[(y−xw~)T(y−xw~)+λ∥w~∥22]
最终得到数学模型:
f ( x ~ ⃗ i ) = x ~ ⃗ i T w ~ ⃗ ∗ f\left( \vec{\tilde{x}}_i \right) =\vec{\tilde{x}}_{i}^{T}\vec{\tilde{w}}^* f(x~i)=x~iTw~∗
1.1.3 代码实现
Python代码:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
# 1、随机生成数据-----------------------------------------------------
# 随机生成100行1列的样本,取值范围是2*[0,1)
X = 2 * np.random.rand(100,1)
#从标准正态分布中返回一个或多个样本值。取值主要在-1.96~+1.96之间
Y = 4 + 3 * 2 * X + np.random.randn(100,1)
print(np.array(X).shape, X)
#散点图
font = FontProperties(fname=r"C:\Windows\Fonts\simhei.ttf", size=14)
plt.figure() # 定义一个图像窗口
plt.title(u'线性回归模型', FontProperties=font)
plt.scatter(X, Y)
# 2、根据最小二乘法计算 theta和b--------------------------------------
X_b = np.c_[X, np.ones((100, 1 ))]
theta_best = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(Y)
print(theta_best)
resX = [0,2]
resY = [resX[0]*theta_best[0]+theta_best[1],resX[1]*theta_best[0]+theta_best[1]]
#告诉它两个点就行
plt.plot(resX, resY) # 绘制曲线 y1
plt.show()
结果:
1.2 广义线性回归模型
考虑单调可导函数h(y),令 h ( Y ) = W T X + b h(Y) = {W^T}{\rm{X + b}} h(Y)=WTX+b,这样得到的模型称为广义线性模型(generalized linear model)。
广义线性模型的一个典型的例子就是对数线性回归。当 h(·) = In(·) 时的广义线性模型就是对数线性回归,即:
I
n
(
Y
)
=
W
T
X
+
b
{\rm{In(}}Y) = {W^T}{\rm{X + b}}
In(Y)=WTX+b
它是通过
e
W
T
X
+
b
{e^{{W^T}{\rm{X + b}}}}
eWTX+b拟合y的。 它虽然称为广义线性回归,但实质上是非线性的。
二、 逻辑回归模型
2.1 Sigmod函数
对于二分类问题,我们需要对普通的线性分类模型进行改进。Sigmod函数:
y
=
1
1
+
e
−
z
(
z
=
W
T
X
+
b
)
y = \frac{1}{{1 + {e^{ - z}}}}(z{\rm{ = }}{{\rm{W}}^T}X + b)
y=1+e−z1(z=WTX+b)
上式可变化为:
ln
y
1
−
y
=
W
T
X
+
b
\ln \frac{y}{{1 - y}} = {{\rm{W}}^T}X + b
ln1−yy=WTX+b
若将式(2-2) 中的 视为类 后验概率估计 p(y = 1 | x) 则式上式可重写为:
ln
p
(
y
=
1
∣
x
)
p
(
y
=
0
∣
x
)
=
W
T
X
+
b
\ln \frac{{p(y = 1|x)}}{{p(y = 0|x)}} = {{\rm{W}}^T}X + b
lnp(y=0∣x)p(y=1∣x)=WTX+b
显然有:
p
(
y
=
1
∣
x
)
=
e
z
1
+
e
z
=
π
(
x
)
p
(
y
=
0
∣
x
)
=
1
1
+
e
z
=
1
−
π
(
x
)
\begin{array}{l} p(y = 1|x) = \frac{{{e^z}}}{{1 + {e^z}}} = \pi (x)\\ p(y = 0|x) = \frac{1}{{1 + {e^z}}} = 1 - \pi (x) \end{array}
p(y=1∣x)=1+ezez=π(x)p(y=0∣x)=1+ez1=1−π(x)
2.1.1 输入输出
输入: D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) } {\rm{D = \{ (}}{{\rm{x}}_1}{\rm{,}}{{\rm{y}}_1}{\rm{), (}}{{\rm{x}}_2}{\rm{,}}{{\rm{y}}_2}{\rm{), }}...{\rm{ , (}}{{\rm{x}}_m}{\rm{,}}{{\rm{y}}_m}{\rm{)\} }} D={(x1,y1),(x2,y2),...,(xm,ym)},其中 y ∈ { 0 , 1 } y \in {\rm{\{ 0,1\} }} y∈{0,1}
输出: w = ( w 1 , w 2 , . . . , w m ) {\rm{w = (}}{{\rm{w}}_1}{\rm{, }}{{\rm{w}}_2}{\rm{ , }}...{\rm{ , }}{{\rm{w}}_m}{\rm{)}} w=(w1,w2,...,wm) 和b
2.1.2 算法流程
-
试图学习模型:
y ^ = 1 1 + e − z ( z = W T X + b ) {\rm{\hat y}} = \frac{1}{{1 + {e^{ - z}}}}(z = {W^T}X + b) y^=1+e−z1(z=WTX+b)
使得 y ^ i ( 预 测 值 ) ≈ y i ( 真 实 值 ) \hat y_i(预测值) \approx {y_i}(真实值) y^i(预测值)≈yi(真实值)其中:
p ( y = 1 ∣ x ) = e z 1 + e z = π ( x ) p ( y = 0 ∣ x ) = 1 1 + e z = 1 − π ( x ) \begin{array}{l} p(y = 1|x) = \frac{{{e^z}}}{{1 + {e^z}}} = \pi (x)\\ p(y = 0|x) = \frac{1}{{1 + {e^z}}} = 1 - \pi (x) \end{array} p(y=1∣x)=1+ezez=π(x)p(y=0∣x)=1+ez1=1−π(x) -
此时需要采用
极大似然估计
来进行求解,似然函数为(似然函数最大化):
∏ [ π ( x ) ] y i [ 1 − π ( x ) ] 1 − y i \prod {\left[ {\pi (x)} \right]^{{{\rm{y}}_i}}}{\left[ {1 - \pi (x)} \right]^{{\rm{1 - }}{{\rm{y}}_i}}} ∏[π(x)]yi[1−π(x)]1−yi
对数似然为:
L ( w ) = ∑ i = 1 N y i log π ( x i ) + ( 1 − y i ) log [ 1 − π ( x i ) ] L(w) = \sum\limits_{i = 1}^N {{y_i}\log } \pi ({x_i}) + (1 - {y_i})\log \left[ {1 - \pi ({x_i})} \right] L(w)=i=1∑Nyilogπ(xi)+(1−yi)log[1−π(xi)]
2.1.3 损失函数
y是真实值, y ^ {\hat y} y^为预测值:
损
失
函
数
:
L
(
y
^
,
y
)
=
−
y
log
y
^
−
(
1
−
y
)
log
(
1
−
y
^
)
损失函数:L(\hat y,y) = - y\log \hat y - (1 - y)\log (1 - \hat y)
损失函数:L(y^,y)=−ylogy^−(1−y)log(1−y^)
代
价
函
数
:
1
N
∑
i
=
1
N
L
(
y
^
i
,
y
i
)
代价函数:\frac{1}{N}\sum\limits_{i = 1}^N {L({{\hat y}_i},{y_i})}
代价函数:N1i=1∑NL(y^i,yi)
2.1.4 使用梯度下降算法求解逻辑回归问题
假设有如下关系的逻辑回归函数:
其中y是真实值,
y
^
\hat y
y^为预测值。
d
y
^
=
∂
L
(
y
^
,
y
)
∂
y
^
=
−
y
y
^
+
1
−
y
1
−
y
^
d\hat y = \frac{{\partial L(\hat y,y)}}{{\partial \hat y}} = - \frac{y}{{\hat y}} + \frac{{1 - y}}{{1 - \hat y}}
dy^=∂y^∂L(y^,y)=−y^y+1−y^1−y
d z = ∂ L ( y ^ , y ) ∂ z = ∂ L ( y ^ , y ) ∂ y ^ ∂ y ^ ∂ z = d y ^ ( 1 − y ^ ) y ^ = ( − y y ^ + 1 − y 1 − y ^ ) ( 1 − y ^ ) y ^ = y ^ − y d{\rm{z}} = \frac{{\partial L(\hat y,y)}}{{\partial z}} = \frac{{\partial L(\hat y,y)}}{{\partial \hat y}}\frac{{\partial \hat y}}{{\partial z}} = d\hat y(1 - \hat y)\hat y = ( - \frac{y}{{\hat y}} + \frac{{1 - y}}{{1 - \hat y}})(1 - \hat y)\hat y = \hat y - y dz=∂z∂L(y^,y)=∂y^∂L(y^,y)∂z∂y^=dy^(1−y^)y^=(−y^y+1−y^1−y)(1−y^)y^=y^−y
对m个样本进行SDG,使用mini-batch需要除以m:
d
w
1
=
∂
L
(
y
^
,
y
)
∂
z
∂
z
∂
w
1
=
1
m
∑
i
m
x
1
i
(
y
^
i
−
y
i
)
d{{\rm{w}}_1} = \frac{{\partial L(\hat y,y)}}{{\partial z}}\frac{{\partial z}}{{\partial {{\rm{w}}_1}}} = \frac{1}{{\rm{m}}}\sum\limits_i^m {x_1^i({{\hat y}^i} - {y^i})}
dw1=∂z∂L(y^,y)∂w1∂z=m1i∑mx1i(y^i−yi)
d w 2 = ∂ L ( y ^ , y ) ∂ z ∂ z ∂ w 2 = 1 m ∑ i m x 2 i ( y ^ i − y i ) d{{\rm{w}}_2} = \frac{{\partial L(\hat y,y)}}{{\partial z}}\frac{{\partial z}}{{\partial {{\rm{w}}_2}}} = \frac{1}{{\rm{m}}}\sum\limits_i^m {x_2^i({{\hat y}^i} - {y^i})} dw2=∂z∂L(y^,y)∂w2∂z=m1i∑mx2i(y^i−yi)
d b = ∂ L ( y ^ , y ) ∂ z ∂ z ∂ d = 1 m ∑ i m ( y ^ i − y i ) db = \frac{{\partial L(\hat y,y)}}{{\partial z}}\frac{{\partial z}}{{\partial d}} = \frac{1}{{\rm{m}}}\sum\limits_i^m {({{\hat y}^i} - {y^i})} db=∂z∂L(y^,y)∂d∂z=m1i∑m(y^i−yi)
最后更新参数,其中 α \alpha α表示SGD的步长:
w 1 = w 1 − α d w 1 w 2 = w 1 − α d w 2 b = b − α d b \begin{array}{l} {{\rm{w}}_1} = {w_1} - \alpha d{w_1}\\ {{\rm{w}}_2} = {w_1} - \alpha d{w_2}\\ b = b - \alpha db \end{array} w1=w1−αdw1w2=w1−αdw2b=b−αdb
三、线性回归和逻辑回归的区别
- 线性回归用来预测,逻辑回归用来分类;
- 线性回归是拟合函数,逻辑回归是预测函数;
- 线性回归的参数计算方法是最小二乘法,逻辑回归的参数计算方法是梯度下降;
- 线性回归要求因变量是连续性数值变量,逻辑回归要求因变量是离散变量;
- 线性回归要求自变量和因变量呈线性关系,逻辑回归不要求自变量和因变量呈线性关系;
- 线性回归可以直观的表示因变量与自变量的关系,逻辑回归表示自变量取某值的概率;
- 线性回归要求变量服从正态分布,逻辑回归对变量分布没有要求。
四、线性判别分析(LDA)
线性判别分析(Linear Discriminant Analysis, 简称LDA)是一种经典的线性学习方法。
LDA的思想非常朴素.给定训练样例集,设法将样例投影到一条直线上,使得同类样例的投影点尽可能接近、异类样例的投影点尽可能远离,在对新样本进行分类时,将其投影到同样的这条直线上,再根据投影点的位宜来确定新样本的类别。