线性模型是机器学习最基础的模型,但却十分强大,很多复杂模型都是线性模型的变体。

首先,最基础的线性模型为\(h=w^Tx+b\)

根据数据算出一个分数(score),这就是回归模型,再加上一个阈值判断,如

\[ {\rm{h}} = \theta ({w^T}x) = \left\{ {\begin{array}{*{20}{c}} {1,{w^T}x \ge 0.5}\\ {0,{w^T}x < 0.5} \end{array}} \right. \]

接下来我们分析不同的模型(主要从损失函数分析):

回归模型

  1. 线性回归:

    损失函数采用平方损失
    \[ L = \sum\limits_{i = 1}^N {({y_i} - {w^T}{x_i})} \] 求解,可以采用梯度下降法。

    写成向量的形式:

    \[ L = (y-Xw)^T(y-Xw) \]

    \(w\)求导:

    \[ \frac{\partial L}{\partial w} = 2{X^T}(Xw - y) \]

    \(X^TX\)为满秩矩阵或正定矩阵,也就是可逆,得:

    \[ w^*=(X^TX)^{-1}X^Ty \]

    最终的线性模型为:

    \[ g = (X^TX)^{-1}X^Tyx \]

分类模型

如何分类?直接讲,如果概率大于0.5,我们就认为他是1类,否则就是0类。

  1. 感知机
    更多的感知机算法,详情见: http://wuqiansheng.xyz/2018/04/09/感知机算法/
    这里主要从损失函数方向推导:

    空间一个点到超平面的距离为:
    \[ \frac{1}{||w||}|w^Tx_i+b| \]

    对于误分类的点\((x_i,y_i)\)

    什么叫误分类呢,感知机的阈值定为0,其实0.5,0都一样,只不过是在\(b\)上加个偏移。

    误分就是:
    \[ -y_i(w^Tx_i+b)>0 \]

    那么损失函数为:

    \[ L=\sum_{i}^{N} \max(0, y_i(w^Tx_i+b)) \]

    换成另外一种形式,极小化:
    \[ L=-\sum_{x_i \in M}{y_i(w^Tx_i+b)} \]

    采用梯度下降求解。 \[ w = w+\eta y_ix_i \\ b = b+\eta y_i \] \(\eta\)为更新步长,又称学习率。

    考虑它的对偶模型为:

    考虑最终的\(w,b\)是修改n次后的增量,也就是: \[ w=\sum_{i=1}^{N}\alpha_iy_ix_i \\ b=\sum_{i=1}^{N}\alpha_iy_i \\ \] 其中\(\alpha_i=n_i\eta\)

    最终的\(h\)如下: \[ h=\sum_{i=1}^{N}\alpha_iy_ix_i\cdot x+b \]

  2. 逻辑回归

    逻辑回归想解决的问题:把回归得到的结果转化为0,1的分类。上面介绍了一种粗略的解法, 用0.5做阈值,但是这样太过粗暴,不可导,不连续,求解比较困难。因此,引入sigmod函数 进行近似。
    看图:

    sigmod函数为: \(\theta = \frac{1}{1+e^{-z}}\)

    则对于逻辑回归问题,hypothesis就是这样的形式:

    \[h(x)=\frac {1}{e^{−w^Tx}}\]

    那我们的目标就是求出这个预测函数h(x),使它接近目标函数f(x)。

    我们令目标函数为\(f(y=+1|x)=\),则

    \[ p(y|x) = \left\{ {\begin{array}{*{20}{c}} {f(x),y = + 1}\\ {1 - f(x),y = - 1} \end{array}} \right. \]

    sigmod函数满足一个性质: \(h(-x)=1-h(x)\)

    那么似然函数为:

    \[likehood(h)=p(x_1)h(+x_1)\times p(x_2)h(-x_x) \times \cdots p(x_N)h(- x_N)\]

    \(p(x_N)\)对所有的h来说都是一样的,可以忽 略,再加上log, 那么损失函数为:

    \[ \mathop {\max }\limits_h = \log \prod\limits_{i = 1}^N {h({y_i}{x_i})} \]

    带入\(w\)

    \[ \mathop {\max }\limits_w = \log \prod\limits_{i = 1}^N {\theta({y_i}{w^T}{x_i})} \]

    接着,我们将maximize问题转化为minimize问题,添加一个负号就行,并引入平均数操作\(\frac{1}{N}\)

    \[ \mathop {\min }\limits_w \frac{1}{N}\sum\limits_{i = 1}^N { - \ln \theta ({y_i}{w^T}{x_i})} \]

    带入\(\theta(s)=\frac{1}{1+exp(-s)}\)

    得到:

    \[ \mathop {\min }\limits_w \frac{1}{N}\sum\limits_{i = 1}^N {\ln (1 + \exp ( - {y_i}{w^T}{x_i}))} \]

    其中\(\ln (1 + \exp ( - {y_i}{w^T}{x_i})\) 叫做交叉熵。

    当然还有其他的推导方法,周志华老师书上采用另外一种推导方法(p59),

    也就是:

    \[ \sum_i {y_i p(y=1|x_i) + (1-y_i)p(y=0|x_i)} \]

  3. 支持向量机

    支持向量机求解的是获得最大支撑面。

    巴啦巴拉求解之后得到:

    \[ \min_{w,b}\frac{1}{2}||w||^2 \\ s.t.\; y_i(w^Tx_i+b) \ge 1, \; i = 1,2,...,N. \]

    损失函数就是:

    \[ \sum_{i=1}^{N} \frac{1}{2}||w||^2 + max(0, 1-y_i(w^Tx_i+b)) \]

    那SVM为什么不采用求解这个损失函数呢,因为部分不可导,求解也会失去核技巧的便利,以及svm对偶求解可以获得稀疏解,仅保存支撑向量即可。

    \(s=w^Tx+b\),

    分类模型都是用连续可导函数去近似01损失函数,并且都是它的上界,图中还缺少了AdaBoost的指数损失函数\(e^{-ys}\)

至此,线性模型介绍完毕。