zoukankan      html  css  js  c++  java
  • 机器学习--线性判别分析

    ​ 在前面的博文中,我们介绍了一种经典的用于线性分类的方法--感知机。这篇博文中,我们介绍另外一种用于线性分类的方法:线性判别分析。其主要思想就是找到一条直线,把所有的样本投影到该直线上,使得同类型的样本尽可能近,非同类型的样本尽可能远。对于数据集(D={((x_1,y_1), cdots,(x_N,y_N)})而言,定义(mathbf{X=[x_1,cdots,x_N]}^T),(mathbf{Y}=[y_1,cdots,y_N]^T)为数据集对应的标签,另外数据集可以分为两类,其中(y_i=1)的样本集为(c_1={(x_i|y_i=1)}),其样本个数为(N_1),另外(y_i=-1)的样本集为(c_2=(x_i|y_i=-1)),其样本个数为(N_2).线性判别分析的原则就是让类内方差足够小,类间方差足够大。

    ​ 首先对于样本点(x_i),定义(z_i)

    [z_i=mathbf{w}^Tx_iquad s.t. lvertlvert mathbf{w} vert vert=1 ]

    那么均值和方差可以表示成

    [ar{Z}=frac{1}{N}sum_{i=1}^{N}mathbf{w}^Tx_i\S_z=frac{1}{N}sum_{i=1}^{N}(z_i-ar{Z})(z_i-ar{Z})^T ]

    那么样本数据集(c_1)和样本数据集(c_2)的均值和方差可以分别表示成

    [ar{Z}_1=frac{1}{N_1}sum_{i=1}^{N_1}mathbf{w}^{T}x_i\S_1=frac{1}{N_1}sum_{i=1}^{N_1}(z_i-ar{Z}_{1})(z_i-ar{Z}_{1})^T\ar{Z}_2=frac{1}{N_2}sum_{i=1}^{N_2}mathbf{w}^{T}x_i\S_2=frac{1}{N_2}sum_{i=1}^{N_2}(z_i-ar{Z}_{2})(z_i-ar{Z}_{2})^T\ ]

    那么根据类内小,类间大的原则,定义如下的损失函数(J(w))

    [J(w)=frac{(ar{Z}_1-ar{Z}_{2})^2}{S_1+S_2} ]

    通过最大化(J(w)),得到权重系数(w)

    [hat{mathbf{w}}=argmax quad J(w) ]

    首先分子可以化简成

    [(ar{Z}_1-ar{Z}_2)^2=(frac{1}{N_1}sum_{i=1}^{N_1}mathbf{w}^Tx_i-frac{1}{N_2}sum_{i=1}^{N_2}mathbf{w}^Tx_i)^2\=mathbf{w}^T(X_{c_{1}}-X_{c_2})(X_{c_{1}}-X_{c_2})^Tmathbf{w} ]

    首先化简(S_1),可以表示成

    [S_1=frac{1}{N_1}sum_{i=1}^{N_1}(mathbf{w}^Tx_i-ar{Z}_1)(mathbf{w}^Tx_i-ar{Z_2})^T\=frac{1}{N_1}sum_{i=1}^{N1}(mathbf{w}^Tx_i-frac{1}{N_1}sum_{j=1}^{N_1}mathbf{w}^Tx_j)(mathbf{w}^Tx_i-frac{1}{N_1}sum_{j=1}^{N_1}mathbf{w}^Tx_j)^T\frac{1}{N_1}sum_{i=1}^{N_1}mathbf{w}^T(x_i-frac{1}{N_1}sum_{j=1}^{N_1}x_j)(x_i-frac{1}{N_1}sum_{j=1}^{N_1}x_j)mathbf{w}\=mathbf{w}^TS_{c_1}mathbf{w} ]

    其中(S_{c_1})表示样本数据集(c_1)的样本协方差矩阵。同理可得(S_2)可以化简成

    [S_2=mathbf{w}^TS_{c_2}mathbf{w} ]

    (S_{c_2})表示样本数据集(c_2)的样本协方差矩阵。这样就可以将(J(w))表示成

    [J(w)=frac{mathbf{w}^T(X_{c_{1}}-X_{c_2})(X_{c_{1}}-X_{c_2})^Tmathbf{w}}{mathbf{w}^T(S_{c_1}+S_{c_2})mathbf{w}}\J(w)=frac{mathbf{w}^TS_bmathbf{w}}{mathbf{w}^TS_wmathbf{w}} ]

    其中(S_w)表示类内方差,(S_b)表示类间方差。那么

    [J(w)=mathbf{w}^TS_bmathbf{w}(mathbf{w}^TS_wmathbf{w})^{-1}\ ]

    然后对(J(w))求偏导,然后令偏导数为0,可以得到(mathbf{w})的解为

    [mathbf{w}=frac{mathbf{w}^TS_wmathbf{w}}{mathbf{w}^TS_bmathbf{w}}(S_w^{-1}S_bmathbf{w}) ]

    因为(mathbf{w}^TS_wmathbf{w})的乘积是一个实数,那么(mathbf{w})就可以进一步表示成

    [mathbf{w} varpropto S_w^{-1}S_bmathbf{w}\ ightarrow mathbf{w} varpropto S_w^{-1}(X_{c_{1}}-X_{c_2})(X_{c_{1}}-X_{c_2})^Tmathbf{w} ]

    ((X_{c_{1}}-X_{c_2})^Tmathbf{w})的结果是一个实数,对方向并没有影响,那么就可以得到

    [mathbf{w} varpropto S_w^{-1}(X_{c_{1}}-X_{c_2}) ]

    因为只需要求得(S_w^{-1}(X_{c_{1}}-X_{c_2})),就可以得到(mathbf{w}).

  • 相关阅读:
    细说java平台日志组件
    linux远程执行命令
    linux命令 common 文件比较
    Linux Shell脚本编程--cut命令
    linux sort命令
    shell中if判断一个变量为空
    linux shell if参数
    wc命令
    date 命令
    let 与 expr Shell运算比较 let强强胜出
  • 原文地址:https://www.cnblogs.com/tingweichen/p/12775699.html
Copyright © 2011-2022 走看看