机器学习笔记九——线性模型原理以及python实现案例

1、线性模型概述

给定一个由d个属性描述的实例x=(x1;x2;...;xd)x=(x_1;x_2;...;x_d) ,其中xix_i
​ 是x在第i个属性上的取值,线性模型(linear model) 的原理是试图学得一个通过属性的线性组合来进行预测的函数,即

f(x)=ω1x1+ω2x2+...+ωdxd+df(x)=\omega_1x_1+\omega_2x_2+...+\omega_dx_d+d

向量形式:
f(x=ωTx+bf(x)=\omega^Tx+b

其中w=(w1;w2;...;wd)w=(w1;w2;...;wd)权重向量 ww 和偏置项b是待估计的参数。
线性模型具有良好的可解释性(comprehensibility),每个属性对应的权重可以理解为它对预测的重要性,并且建模较为简单,许多功能更为强大的非线性模型(nonlinear model)都是在线性模型的基础上引入层级结构或高维映射得到的。

2 、广义线性模型

除了直接让模型预测值逼近实值标记 y,我们还可以让它逼近 y 的衍生物,这就是 广义线性模型(generalized linear model) 的思想,即:
y=g1(ωTx+b)y=g^{-1}(\omega^Tx+b)
其中 g(⋅)称为 联系函数(link function),要求单调可微。使用广义线性模型我们可以实现强大的 非线性函数映射 功能。比方说 对数线性回归(log-linear regression),令 g(⋅)=ln(⋅),此时模型预测值对应的是实值标记在指数尺度上的变化:

机器学习笔记九——线性模型原理以及python实现案例
广义线性模型的参数估计常通过加权最小二乘法或极大似然法进行。

3、经典的线性模型

3.1 线性回归

目的:用于回归,进行预测

  • 数据预处理:
    一般的线性回归模型要求属性的数据类型为连续值,故需要对离散属性进行连续化。
  • 离散属性连续化
    分两种情况
    • 属性值之间有序:也即属性值有明确的大小关系,比方说把二值属性“身高”的取值 {高,矮} 可转化为 {1.0,0.0},三值属性 “高度”的取值 {高,中,低} 转换(编码)为 {1.0,0.5,0.0};
    • 属性值之间无序:若该属性有 k个属性值,则通常把它转换为 k 维向量,比方说把无序离散属性 “商品” 的取值 {牙膏,牙刷,毛巾} 转换为 (0,0,1),(0,1,0),(1,0,0)。 这种做法在 自然语言处理和推荐系统 实现中很常见,属性 “单词” 和 “商品” 都是无序离散变量,在建模前往往需要把这样的变量转换为哑变量,否则会引入不恰当的序关系,从而影响后续处理(比如距离的计算)。

3.1.1 单变量线性回归

样本只有一个属性x

  • 模型函数:用于预测
    f(x=ωx+bf(x)=\omega x+b
  • 损失函数或目标函数:均方误差,也称平方损失
    E(f(x),y)=i=1m(f(xi)yi)2=i=1m(ωxi+byi)2E(f(x),y)=\sum_{i=1}^m(f(x_i)-y_i)^2 \\ =\sum_{i=1}^m(\omega x_i+b-y_i)^2
    其中,f(xi)f(x_i)是第i个样本的预测值,yiy_i是第i个样本的真实值,m是数据集D中共有m个样本。
  • 参数估计ωb\omega、b的估计
    • 方法:最小二乘法
      基于均方误差最小化来进行模型求解的一种方法,叫作最小二乘法。
      (ω,b)=argminω,bE(f(x),y)=argminω,bi=1m(ωxi+byi)2(\omega^*,b^*)=argmin_{\omega,b}E(f(x),y)\\=argmin_{\omega,b}\sum_{i=1}^m(\omega x_i+b-y_i)^2
    • 求解:
      通过对损失函数分别求参数ω\omega 和b 的偏导,并且令导数为0,可以得到这两个参数的 闭式(closed-form)解(也即解)
      ω=i=1myi(xixˉ)i=1mxi21m(i=1mxi)2\omega=\frac{\sum_{i=1}^my_i(x_i-\bar x)}{\sum_{i=1}^mx_i^2-\frac{1}{m}(\sum_{i=1}^mx_i)^2}
      b=1mi=1m(yiωxi)b=\frac{1}{m}\sum_{i=1}^m(y_i-\omega x_i)
      求解过程

3.1.2 多变量线性回归

多变量线性回归,又称多元线性回归
样本有多个属性

  • 模型函数:用于预测
    f(x)=ωTxi+bf(x)=\omega^T x_i+b
    ω^=(ω;b),\hat{\omega}=(\omega;b),把数据集D表示为 m×(d+1)大小的矩阵 X,其中每一行对应一个样例,该行前 d 列是样例的 d 个属性,最后一列恒置为1,对应偏置项。把样例的真实值标记也写作向量形式y=(y1;y2;...;ym)y=(y_1;y_2;...;y_m)
    f(x)=Xω^f(x)=X\hat{\omega}

  • 损失函数或目标函数:均方误差,也称平方损失
    E(f(x),y)=(yXω^)T(yXω^)E(f(x),y)=(y-X\hat{\omega})^T(y-X\hat{\omega})
    其中,f(xi)f(x_i)是第i个样本的预测值,yiy_i是第i个样本的真实值,m是数据集D中共有m个样本。

  • 参数估计ω^\hat{\omega}的估计

    • 方法:最小二乘法
      基于均方误差最小化来进行模型求解的一种方法,叫作最小二乘法。
      ω^=argminω^(yXω^)T(yXω^)\hat{\omega}^*=argmin_{\hat{\omega}}(y-X\hat{\omega})^T(y-X\hat{\omega})
    • 求解:
      通过对损失函数分别求参数ω\omega 和b 的偏导,并且令导数为0,可以得到这两个参数的 闭式(closed-form)解(也即解)
      w^=(XTX)1XTy\hat{w^∗}=(X^TX) ^{−1}X ^Ty
      求解过程

注: 这就要求 XTXX^TX必须是可逆矩阵,也即必须是满秩矩阵(full-rank matrix) 或者是 正定矩阵(positive definite matrix),但是!现实任务中XTXX^TX 往往不是满秩的,很多时候 X的列数很多,甚至超出行数(例如 推荐系统,商品数是远远超出用户数的),此时 XTXX^TX显然不满秩,会解出多个 w^\hat{w}这些解都能使得均方误差最小化,选择哪一个解作为输出,这时就需要由学习算法的归纳偏好决定了,常见的做法是引入 正则化项

线性回归实例

scikit-learn中线性回归模块用法

3.2 对数几率回归(逻辑回归)

目的: 监督学习,解决二分类问题
模型函数

y=11+e(ωTx+b)y=\frac{1}{1+e^{-(\omega^Tx+b)}}

其实广义线性模型已经给了我们答案,我们要做的就是 找到一个单调可微的联系函数,把两者联系起来。

对于一个二分类任务,比较理想的联系函数是 单位阶跃函数(unit-step function):
f(x)={0,z<00.5,z=01,z>0 f(x)=\left\{ \begin{aligned} 0,z<0\\ 0.5, z=0\\ 1,z>0 \end{aligned} \right.
但是单位阶跃函数不连续,所以不能直接用作联系函数。这时思路转换为 如何在一定程度上近似单位阶跃函数 呢?对数几率函数(logistic function) 正是我们所需要的常用的替代函数(注意这里的 y 依然是实值):
机器学习笔记九——线性模型原理以及python实现案例
未完待续