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

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)=ω1x1+ω2x2+ω3x3+...+ωdxd+b
f ( x ) = ω T x + b f(\bm{x}) = \bm{\omega^Tx} + b f(x)=ω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 ω=(ω1;ω2;ω3;....;ωd)x=(x1;x2;...;xd)T

线性回归

线性回归试图学得

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

使得

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

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

( ω ∗ , 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 (ω,b)=ω,bargmini=1m(f(xi)yi)2=ω,bargmini=1m(yiωxib)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}}) ω =ωargmin(yXω )T(yXω )

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

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

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

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} f(x i)=x i(XTX)1XTy

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

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

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

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

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

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

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

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

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

在这里插入图片描述

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

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

接下去的看逻辑回归

线性判别分析(LDA)

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

在这里插入图片描述

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

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

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}} J=ωT0ω+ωT1ωωTμ0ωTμ122=ωT(0+1)ωωT(μ0μ1)(μ0μ1)Tω

  • 定义类内散度矩阵
    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} Sw=0+1=xX0(xμ0)(xμ0)T+xX0(xμ1)(xμ1)T
  • 定义类间散度矩阵
    S b = ( μ 0 − μ 1 ) ( μ 0 − μ 1 ) T \bm{S_b = (\mu_0-\mu_1)(\mu_0-\mu_1)^T} Sb=(μ0μ1)(μ0μ1)T
    J = ω T S b ω ω T S w ω \bm{J = \frac{\omega^TS_b\omega}{\omega^TS_w\omega}} J=ωTSwωωTSbω
  • 确定 ω \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} minωωTSbωs.t.ωTSwω=1
  • 由拉格朗日乘子法,得
    S b ω = λ S ω ω \bm{S_b\omega = \lambda S_{\omega}\omega} Sbω=λSωω
  • S b ω \bm{S_b\omega} Sbω的方向恒为 μ 0 − μ 1 \bm{\mu_0 - \mu_1} μ0μ1,令
    S b ω = λ ( μ 0 − μ 1 ) \bm{S_b\omega = \lambda(\mu_0 - \mu_1)} Sbω=λ(μ0μ1)
  • 于是带入得
    ω = S ω − 1 ( μ 0 − μ 1 ) \bm{\omega = S_{\omega}^{-1}(\mu_0 - \mu_1)} ω=Sω1(μ0μ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^+} 1yy=1yym+m

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

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值