机器学习--线性模型

基本形式

  给定由d个属性描述的示例 x = ( x 1 ; x 2 ; . . . ; x d ) x = (x_1;x_2;...;x_d) x=(x1;x2;...;xd),其中 x i x_i xi x x x在第i个属性上的取值,线性模型试图学的一个通过属性的线性组合来进行预测的函数,即

     f ( x ) = w 1 x 1 + w 2 x 2 + . . . + w d x d + b f(x) = w_1x_1 + w_2x_2 +...+w_dx_d+b f(x)=w1x1+w2x2+...+wdxd+b

一般用向量形式写成

     f ( x ) = w T x + b f(x)=w^Tx+b f(x)=wTx+b

其中 w = ( w 1 ; w 2 ; . . ; w d ) w = (w_1;w_2;..;w_d) w=(w1;w2;..;wd), w 和 b w和b wb学得之后,模型就得以确定。

线性回归

  给定数据集 D = ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) D = {(x_1,y_1),(x_2,y_2),...,(x_m,y_m)} D=(x1,y1),(x2,y2),...,(xm,ym),其中 x i = ( x i 1 ; x i 2 ; . . . ; x i d ) , y i ∈ R x_i = (x_{i1};x_{i2};...;x_{id}),y_i \in R xi=(xi1;xi2;...;xid),yiR。“线性回归”试图学的一个线性模型以尽可能准确地预测实值输出标记。线性回归试图学得:

     f ( x i ) = w x i + b , 使 得 f ( x i ) ≃ y i f(x_i) = wx_i + b, 使得f(x_i)\simeq y_i f(xi)=wxi+b,使f(xi)yi

我们使用均方误差作为线性回归任务的性能度量来确定 w 和 b w和b wb

均方误差公式: E ( f ; D ) = 1 m ∑ i = 1 m ( f ( x i ) − y i ) 2 E(f;D) = \displaystyle\frac{1}{m}\sum_{i=1}^m(f(x_i)-y_i)^2 E(f;D)=m1i=1m(f(xi)yi)2

我们试图让均方误差最小化,即

     ( w ∗ , b ∗ ) = a r g min ⁡ ⁡ ( w , b ) ∑ i = 1 m ( f ( x i ) − y i ) 2 (w^*, b^*) = \displaystyle{\underset {(w,b)}{\operatorname{arg\min}}\sum_{i=1}^m(f(x_i)-y_i)^2} (w,b)=(w,b)argmini=1m(f(xi)yi)2
         = a r g min ⁡ ⁡ ( w , b ) ∑ i = 1 m ( y i − w x i − b ) 2 =\displaystyle{\underset {(w,b)}{\operatorname{arg\min}}\sum_{i=1}^m(y_i-wx_i-b)^2} =(w,b)argmini=1m(yiwxib)2

通过 “最小二乘法”基于均方误差最小化来进行模型求解的方法。在线性回归中,最小二乘法试图找到一条直线,使所有样本到直线上的欧氏距离之和最小。即

     E ( w , b ) = ∑ i = 1 m ( y i − w x i − b ) 2 E_{(w,b)}=\displaystyle\sum_{i=1}^m(y_i-wx_i-b)^2 E(w,b)=i=1m(yiwxib)2的最小过程。
我们将 E ( w , b ) E_{(w,b)} E(w,b)分别对 w 和 b w和b wb求导,使求导后式子为零,可以得到 w 和 b w和b wb的最优解的闭式解得:

     w = ∑ i = 1 m y i ( x i − x ˉ ) ∑ i = 1 m x i 2 − 1 m ( ∑ i = 1 m x i ) 2 w = \displaystyle\frac{\displaystyle\sum_{i=1}^my_i(x_i-\bar{x})}{\displaystyle\sum_{i=1}^mx_i^2-\frac{1}{m}(\sum_{i=1}^mx_i)^2} w=i=1mxi2m1(i=1mxi)2i=1myi(xixˉ)



     b = 1 m ∑ i = 1 m ( y i − w x i ) b = \displaystyle\frac{1}{m}\sum_{i=1}^m(y_i-wx_i) b=m1i=1m(yiwxi)

其中 x ˉ = 1 m ∑ i = 1 m x i \bar{x} = \displaystyle\frac{1}{m}\sum_{i=1}^mx_i xˉ=m1i=1mxi x x x的均值。





多元线性回归:

  更一般的情形,是以数据集 D D D,样本由 d d d个属性描述的,此时我们试图学得:

     f ( x i ) = w T x i + b , 使 得 f ( x i ) ≃ y i f(x_i) = w^Tx_i+b,使得f(x_i)\simeq{y_i} f(xi)=wTxi+b,使f(xi)yi

这称为 “多元线性回归”

  我们利用最小二乘法来对 w 和 b w和b wb进行估计。便于讨论,将 w 和 b w和b wb吸收入向量 w ^ = ( w ; b ) \hat{w} = (w;b) w^=(w;b),把数据集 D D D表示为一个 m x ( d + 1 ) mx(d+1) mx(d+1)大小的矩阵 X X X,其中每一行对应一个示例,改行前 d d d个元素对应于示例的 d d d个属性值,最后一个元素恒置为1,即



     x = ( x 11 x 22 . . . x 1 d 1 x 21 x 22 . . . x 2 d 1 . . . . . . . . . . . . . . . x m 1 x m 2 . . . x m d 1 ) = ( x 1 T 1 x 2 T 1 . . . . . . x m T 1 ) x = \begin{pmatrix} x_{11} &x_{22}&...&x_{1d}&1 \\x_{21}&x_{22}&...&x_{2d}&1\\.&.&.&.&.\\ \\.&.&.&.&.\\\\.&.&.&.&.\\ x_{m1} &x_{m2}&...&x_{md}&1\end{pmatrix} = \begin{pmatrix}x_1^T & 1 \\ x_2^T & 1 \\ .&.\\.&.\\.&.\\x_m^T&1\end{pmatrix} x=x11x21...xm1x22x22...xm2............x1dx2d...xmd11...1=x1Tx2T...xmT11...1




再把标记也写成向量形式 y = ( y 1 ; y 2 ; . . . ; y m ) y=(y_1;y_2;...;y_m) y=(y1;y2;...;ym),则有:


     w ^ ∗ = a r g min ⁡ ⁡ w ^ ( y − X w ^ ) T ( y − X w ^ ) \hat{w}^* = \underset{\hat{w}}{\operatorname{arg\min}}(y-X\hat{w})^T(y-X\hat{w}) w^=w^argmin(yXw^T(yXw^)

E w ^ = ( y − X w ^ ) T ( y − X ( ^ w ) ) E_{\hat{w}} = (y-X\hat{w})^T(y-X\hat(w)) Ew^=(yXw^)T(yX(^w))求导以后,且另式子为零,可以得到 w ^ \hat{w} w^的最优解的闭式解。当 X T X X^TX XTX满秩矩阵正定矩阵时可以得通用解:

     w ^ = ( X T X ) − 1 X T y \hat{w}=(X^TX)^{-1}X^Ty w^=(XTX)1XTy

若令 x i ^ = ( x i ; 1 ) \hat{x_i} = (x_i;1) xi^=(xi;1)最终可以得到多元线性回归模型为:


     f ( x i ^ ) = x i ^ T ( X T X ) − 1 X T y f(\hat{x_{i}}) = \hat{x_{i}}^T(X^TX)^{-1}X^Ty f(xi^)=xi^T(XTX)1XTy



代码实现

通用公式实现:
def standRegress(xArr, yArr):
    xMat = mat(xArr);
    yMat = mat(yArr).T;
    xTx = xMat.T*xMat
    if linalg.det(xTx) == 0.0: #判定是否为正定矩阵
        print('this matrix is singular, cannot do inverse')
        return
    ws = xTx.I * (xMat.T * yMat)
    return ws


局部线性加权回归

  线性回归的一个问题是有可能出现欠拟合现象,因为它求的是具有最小均方误差的
无偏估计。如果模型欠拟合将不能取得更好的预测效果。所以有些方法允许在估计中引入一些偏差,从而降低预测的均方误差。

   局部线性加权回归(LWLR) 给带预测的点附近的每个点赋予一定的权重,在这个子集上基于最小均方差来进行普通的回归。形式如下:

     w ^ = ( X T W X ) − 1 X T W y \hat{w} = (X^TWX)^{-1}X^TWy w^=(XTWX)1XTWy

其中 W W W为一个矩阵,我们称之为 ‘核’‘核’的类型可以自由选择,最常用的核是"高斯核",对应的权重如下:
     w ( i , i ) = e x p ⟮ ∣ x ( i ) − x ∣ − 2 k 2 ⟯ w(i,i) = exp\lgroup\displaystyle\frac{|x^{(i)} - x|}{-2k^2}\rgroup w(i,i)=exp2k2x(i)x


1.以上构建了一只含对角元素的权重矩阵 W W W,并且点 x 与 x ( i ) x与x(i) xx(i)越近, w ( i , i ) w(i,i) w(i,i)将会越大。
2.上述公式包含一个需要用户指定的参数k,它决定了对附近点赋予多大的权重。



代码实现

通用公式实现:
def lwlr(testPoint, xArr, yArr, k= 1.0):
    xMat = mat(xArr);
    yMat = mat(yArr).T;
    m = shape(xMat)[0]
    weights = mat(eye(m))
    for j in range(m):
        diffMat = testPoint - xMat[j, : ]
        weights[j,j] = exp(diffMat*diffMat.T/(-2.0*k**2))
    xTx = xMat.T * (weights * xMat)
    if linalg.det(xTx) == 0.0:
        return
    
    ws = xTx.I * (xMat.T * (weights * yMat))
    return testPoint * ws

代码分析:
  通过创建一个对角权重矩阵weights,阶数等于样本点个数,该矩阵为每个样本点初始化一个权重。算法将遍历数据集,计算每个样本点对应的权重值:随着样本点与待预测点距离的递增,权重以指数级衰减
  输入参数k控制衰减的速度。



代码测试获取k值反馈:
def lwlrTest(testArr, xArr, yArr, k = 1.0):
    m = shape(testArr)[0]
    yHat = zeros(m)
    for i in range(m):
        yHat[i] = lwlr(testArr[i], xArr, yArr, k)
    return yHat


线性回归

优势: 结果易于理解,计算上不复杂
缺点: 对非线性的数据拟合不好
适用数据类型: 数值型和标称型

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值