线性模型-机器学习

线性模型

  • 概述
    • 一、分类模型
    • 1.1 普通线性模型
      • 1.1.1 输入输出
      • 1.1.2 算法流程
      • 1.1.3 代码实现
    • 1.2 广义线性模型
  • 二、 回归问题
    • 2.1 逻辑回归问题
      • 2.1.1 输入输出
      • 2.1.2 算法流程
      • 2.1.3 损失函数
      • 2.1.4 使用梯度下降算法求解逻辑回归问题
    • 2.2 线性判别分析(LDA)

概述

线性模型-机器学习_第1张图片

一、分类模型

1.1 普通线性模型

本质:根据现有的数据,找出自变量和因变量的关系,估计一个函数的过程。线性回归模型是有监督学习问题。

线性模型-机器学习_第2张图片

给定样本 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

线性模型-机器学习_第3张图片

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=1m(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=1m(f(xi)yi)2=(w,b)argmini=1m(yiwTxib)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} wE(w,b)=2(wi=1mxi2i=1m(yib)xi)bE(w,b)=2(mbi=1m(yiwxi))

  • 令上述公式等于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=1mxi2m1(i=1mxi)2i=1myi(xixˉ)b=m1i=1m(yiwxi)
    其中 x ˉ = 1 m × ∑ i = 1 m x i \bar x = \frac{1}{m} \times \sum \limits_{i = 1}^m{x_i} xˉ=m1×i=1mxi为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...xmd1111w1...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 x w~ )T(y x w~ )

维度分析:[(m,1)-(m,d+1)X(d+1,1)]TX[(m,1)-(m,d+1)X(d+1,1)]=(1,1)

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 x w~ )T(y x w~ ),求它的极小值。对 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~ =2x T(x w~ 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~ =(x Tx )1x Ty

  • ( x ⃗ T x ⃗ ) − 1 { {\rm{(}}{\vec x^{\rm{T}}}\vec x{\rm{)}}^{ - 1}} (x Tx )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~ =(x Tx )1x Ty

  • ( x ⃗ T x ⃗ ) − 1 { {\rm{(}}{\vec x^{\rm{T}}}\vec x{\rm{)}}^{ - 1}} (x Tx )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 x w~ )T(y x w~ )+λ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
# 随机生成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)


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()

结果:
线性模型-机器学习_第4张图片

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函数:
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+ez1(z=WTX+b)
线性模型-机器学习_第5张图片
上式可变化为:
ln ⁡ y 1 − y = W T X + b \ln \frac{y}{ {1 - y}} = { {\rm{W}}^T}X + b ln1yy=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=0x)p(y=1x)=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=1x)=1+ezez=π(x)p(y=0x)=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+ez1(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=1x)=1+ezez=π(x)p(y=0x)=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)]1yi
    对数似然为:
    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=1Nyilogπ(xi)+(1yi)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^(1y)log(1y^)
代 价 函 数 : 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=1NL(y^i,yi)

2.1.4 使用梯度下降算法求解逻辑回归问题

假设有如下关系的逻辑回归函数:
线性模型-机器学习_第6张图片
其中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+1y^1y

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=zL(y^,y)=y^L(y^,y)zy^=dy^(1y^)y^=(y^y+1y^1y)(1y^)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=zL(y^,y)w1z=m1imx1i(y^iyi)

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=zL(y^,y)w2z=m1imx2i(y^iyi)

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=zL(y^,y)dz=m1im(y^iyi)

最后更新参数,其中 α \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

2.2 线性判别分析(LDA)

线性判别分析(Linear Discriminant Analysis, 简称LDA)是一种经典的线性学习方法。

LDA的思想非常朴素.给定训练样例集,设法将样例投影到一条直线上,使得同类样例的投影点尽可能接近异类样例的投影点尽可能远离,在对新样本进行分类时,将其投影到同样的这条直线上,再根据投影点的位宜来确定新样本的类别。
线性模型-机器学习_第7张图片

你可能感兴趣的:(机器学习,深度学习,人工智能,机器学习,python)