线性模型——机器学习(周志华)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/love__live1/article/details/82869338

C++实现线性回归

线性模型

f ( x ) = ω 1 x 1 + ω 2 x 2 + ω 3 x 3 + . . . + ω d x d + b f(\bm{x}) = \omega_1x_1 + \omega_2x_2 + \omega_3x_3 + ... + \omega_dx_d + b
f ( x ) = ω T x + b f(\bm{x}) = \bm{\omega^Tx} + b

其中 ω = ( ω 1 ; ω 2 ; ω 3 ; . . . . ; ω d ) x = ( x 1 ; x 2 ; . . . ; x d ) T \bm{\omega} = (\omega_1;\omega_2;\omega_3;....;\omega_d), \bm{x} = (x_1;x_2;...;x_d)^T

线性回归

线性回归试图学得

f ( x i ) = ω x i + b f(\bm{x_i}) = \bm{\omega x_i} + b

使得

f ( x i ) y i f(\bm{x_i}) \simeq y_i

如何求得 ω \omega b b ,关键在于衡量 f ( x i ) y i f(\bm{x_i}) \simeq y_i ,他们之间相差越小,结果越好,于是有

( ω , b ) = arg ω , b m i n i = 1 m ( f ( x i ) y i ) 2 = arg ω , b m i n i = 1 m ( y i ω x i b ) 2 (\omega^*,b^*) = \arg \limits_{\bm{\omega}, b} min \sum \limits_{i = 1} ^m (f(\bm{x_i}) - y_i) ^ 2 = \arg \limits_{\bm{\omega}, b} min \sum \limits_{i = 1} ^m (y_i - \bm{\omega x_i} - b) ^ 2
化为一般式:
ω ^ = arg ω m i n ( y X ω ^ ) T ( y X ω ^ ) \widehat{\bm{\omega}}^* = \arg \limits_{\bm{\omega}} min (\bm{y - X\widehat{\omega}})^T(\bm{y - X\widehat{\omega}})

对上式的 ω \bm{\omega} b b 求导,当 X T X \bm{X^TX} 为满秩矩阵或者正定矩阵式,令其等于零得到

ω ^ = ( X T X ) 1 X T y \widehat{\bm{\omega}}^* = (\bm{X^TX})^{-1}\bm{X^Ty}

最后求的线性回归模型为:

f ( x ^ i ) = x ^ i ( X T X ) 1 X T y f(\widehat{\bm{x}}_i) =\widehat{\bm{x}}_i (\bm{X^TX})^{-1}\bm{X^Ty}

m为数据集个数,d为属性个数,其中 X \bm{X} ( m d ) (m*d) , y \bm{y} ( m 1 ) (m*1)

现实中 X T X \bm{X^TX} 往往不是满秩矩阵,会出现列数对于行数, X T X \bm{X^TX} 显然不满秩,此时可解出多个 ω ^ \bm{\widehat{\omega}} , 他们都能使均方误差最小化,选择哪一个解作为输出,将有学习算法的归纳偏好决定,常见的做法是引入正则化项。

也可模型预测值逼近y的衍生物,比如示例所对应的输出标记是在指数尺度上的变化,那么可以将输出标记的对数作为线性模型逼近的目标:
l n y = ω T x + b ln y = \bm{\omega^Tx} + b
这就是“对数线性回归”。

更一般的,考虑单调可微函数。令

y = g 1 ( ω T x + b ) y = g^{-1}(\bm{\omega^Tx} + b)

这样得到的模型成为“广义线性模型”。

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

上面讨论了使用线性模型进行回归学习,但如果要做的时分类任务该如何?我们现在讨论二分类。

这时候就用到逻辑回归,与线性回归不一样的是,再线性回归( z = ω T x + b z = \bm{\omega^Tx} + b )的基础上,外面包装了一个“sigmod”函数 y = 1 1 + e z y = \frac{1}{ 1 + e ^ {-z}} ,函数图像如下。

在这里插入图片描述

若预测值z大于零判为正例,小于零判为负例,预测值为临界值则可任意判别。

  1. 将z带入sigmod函数,得 y = 1 1 + e ( ω T x + b ) y = \frac{1}{ 1 + e ^ {-(\bm{\omega^Tx} + b)}}
  2. 然后化为 l n y 1 y = ω T x + b ln \frac{y}{1-y} = \bm{\omega^Tx} + b
  3. 若将 y y 视为 x x 作为正例的可能性,则 1 y 1-y 是其反例的可能性,两者的比值成为“几率”。

接下去的看逻辑回归

线性判别分析(LDA)

LDA的思想:给定训练集,设法将样例投影到一条直线上,是的同样类例的投影点尽可能接近、异类投影点尽可能远离;再对新样本进行分类时,将其同样投到这条直线上,再根据投影点的位置确定新样本的类别。

在这里插入图片描述

X i μ i i X_i、\mu_i、\sum_i 分别代表第 i { 0 , 1 } i \in {\{0,1\}} 类示例的集合、均值向量、协方差矩阵

  • 两类样本的中心在直线上的投影分别为 ω T μ 0 \omega^T\mu_0 ω T μ 1 \omega^T \mu_1 ;
  • 若将所有样本点都投影到直线上,则两类样本的协方差分别为 ω T 0 ω \omega^T\sum_0\omega ω T 1 ω \omega^T\sum_1\omega ;
  • 我们的目的是 ω T 0 ω + ω T 1 ω \omega^T\sum_0\omega + \omega^T\sum_1\omega 尽可能小,使 ω T μ 0 ω T μ 1 2 2 ||\omega^T\mu_0-\omega^T \mu_1||_2^2 尽可能大;

J = ω T μ 0 ω T μ 1 2 2 ω T 0 ω + ω T 1 ω = ω T ( μ 0 μ 1 ) ( μ 0 μ 1 ) T ω ω T ( 0 + 1 ) ω \bm{J = \frac{||\omega^T\mu_0-\omega^T \mu_1||_2^2}{\omega^T\sum_0\omega + \omega^T\sum_1\omega} = \frac{\omega^T(\mu_0-\mu_1)(\mu_0-\mu_1)^T\omega}{\omega^T(\sum_0+\sum_1)\omega}}

  • 定义类内散度矩阵
    S w = 0 + 1 = x X 0 ( x μ 0 ) ( x μ 0 ) T + x X 0 ( x μ 1 ) ( x μ 1 ) T \bm{S_w = \sum_0+\sum_1 = \sum_{x\in X_0} (x-\mu_0)(x-\mu_0)^T + \sum_{x\in X_0} (x-\mu_1)(x-\mu_1)^T}
  • 定义类间散度矩阵
    S b = ( μ 0 μ 1 ) ( μ 0 μ 1 ) T \bm{S_b = (\mu_0-\mu_1)(\mu_0-\mu_1)^T}
    J = ω T S b ω ω T S w ω \bm{J = \frac{\omega^TS_b\omega}{\omega^TS_w\omega}}
  • 确定 ω \bm{\omega}
    m i n ω ω T S b ω s . t . ω T S w ω = 1 \bm{min_\omega \quad -\omega^TS_b\omega} \\ s.t. \quad\bm{\omega^TS_w\omega = 1}
  • 由拉格朗日乘子法,得
    S b ω = λ S ω ω \bm{S_b\omega = \lambda S_{\omega}\omega}
  • S b ω \bm{S_b\omega} 的方向恒为 μ 0 μ 1 \bm{\mu_0 - \mu_1} ,令
    S b ω = λ ( μ 0 μ 1 ) \bm{S_b\omega = \lambda(\mu_0 - \mu_1)}
  • 于是带入得
    ω = S ω 1 ( μ 0 μ 1 ) \bm{\omega = S_{\omega}^{-1}(\mu_0 - \mu_1)}

多分类学习

不失一般性,考虑N 个类别C1 , C2 ,… , CN , 多分类学习的基本思路是"拆解法飞即将多分类任务拆为若干个二分类任务求解.具体来说,先对问题进行拆分,然后为拆出的每个二分类任务训练一个分类器;在测试时,对这些分类器的预测结果进行集成以获得最终的多分类结果。这里的关键是如何对多分类任务进行拆分,以及如何对多个分类器进行集成。

最经典的拆分策略有三种. “一对一” (One vs. One,简称OvO) 、“一对多” (One vs. Rest ,简称OvR)和"多对多" (Many vs. Many,简称MvM).
在这里插入图片描述

类别不平衡

加入有998个反例,2个正例,那么学习方法只需要放回一个永远将新样本预测为反例的学习器,就能达到99.8%的精度。

解决办法:

  1. 对数据过多的一方进行欠采样
  2. 对数据过少的一方进行过采样
  3. 基于原始数据集进行学习,但是在用训练好的分类器进行预测时,加入一个策略到其决策过程,成为“阈值移动”。
    y 1 y = y 1 y m m + \frac{y^{'}}{1-y^{'}} = \frac{y}{1-y} * \frac{m^-}{m^+}

m m + m^-、m^+ 分别为正反例数目

猜你喜欢

转载自blog.csdn.net/love__live1/article/details/82869338