精华内容
下载资源
问答
  • 线性判别分析

    2020-04-28 10:51:56
    线性判别分析 文章目录线性判别分析核心思想数学推导算法实现参考文献线性判别分析核心思想数学推导算法实现参考文献算法实现参考文献 核心思想 线性判别分析(Linear Discriment Analysis, LDA)是一种经典的分类算法...

    线性判别分析

    核心思想

    线性判别分析(Linear Discriment Analysis, LDA)是一种经典的分类算法。核心思想是将训练数据投影到这样的一条直线上:

    • 在该直线上的所有投影点,属于同一类别的数据尽可能的近,简称类内近。
    • 在该直线上的所有投影点,属于不同类的数据尽可能的远,简称类间远。

    当我们对新数据进行预测时,只需同样的将该数据投影到求得的直线上,通过判断,投影点哪一个类近,就认为是哪一类。

    总结起来就是六个字:类内近,类间远。

    数学推导

    我们以二分类为例:

    我们假设输入样本为(X,Y)(X,Y),样本总数为N,有两个类别C1C_1C2C_2
    X=(x11,x12,x1px21,x22,,x2pxn1,xN2,,xNp)N×pX=\left(\begin{array}{c}x_{11}, x_{12}, \cdots x_{1 p} \\ x_{21}, x_{22}, \cdots, x_{2 p} \\ \vdots \\ x_{n 1}, x_{N 2}, \cdots, x_{N p} \end{array}\right)_{N \times p}
    Y=(y1,y2,,yN),y{C1,C2}Y=\left(y_{1}, y_{2}, \cdots, y_{N}\right)^{\top}, \quad y \in\{C_1,C_2\}

    则所求直线可表示为:

    y=Wxy=W^{\top} x
    其中,W=(w1,w2,,wN)W=\left(w_{1}, w_{2}, \cdots, w_{N}\right)^{\top}

    为方便运算,我们假定W=1\|W\|=1

    其中样本点xi\|x_i\|在直线y=wxy =w^{\top} x的投影距为:

    xicosθ=xiwcosθ=ωxi\|\overrightarrow{x_{i}}\| \cdot \cos \theta=\left\|\vec{x}_{i}\right\| \cdot\|\vec{w}\| \cdot \cos \theta=\omega^{\top} x_{i}

    我们以投影距作为样本点xix_i在直线y=wxy =w^{\top} x的一维坐标。

    类间距我们用样本的方差均值表示,类内距我们用样本方差表示。

    样本均值:yˉ=1Ni=1Nwxi\begin{aligned}\bar{y}=\frac{1}{N} \sum_{i=1}^{N} w^{\top} x_{i} \end{aligned}

    样本方差:S=1Ni=1N(wxiyˉ)(wxiyˉ)\begin{aligned}S=\frac{1}{N} \sum_{i=1}^{N}\left(w^{\top} x_{i}-\bar{y}\right)\left(w^{\top} x_{i}-\bar{y}\right)^{\top} \end{aligned}

    类间距为:(yˉ1yˉ2)2\left(\bar{y}_{1}-\bar{y}_{2}\right)^{2}

    类内距为:S1+S2S_1+S_2

    优化函数为:J(w)=(y1ˉyˉ2)2S1+S2\Large J(w)=\frac{\left(\bar{y_{1}}-\bar{y}_{2}\right)^{2}}{S_{1}+S_{2}}

    w^=argmaxwJ(w)=argmaxw(yˉ1yˉ2)S1+S2\Large \widehat{w}=\arg \max _{w} J(w)=\arg \max _{w} \frac{\left(\bar{y}_{1}-\bar{y}_{2}\right)}{S_{1}+S_{2}}

    其中:

    (yˉ1yˉ2)2=(1N1i=1N1wxi1N2i=1N1wxi)2=(w1Nii=1N1xiωii=1N2xi)2=w(xˉc1xˉc2)(xˉc1xˉc2)w\begin{aligned} \left(\bar{y}_{1}-\bar{y}_{2}\right)^{2} & = \left(\frac{1}{N_{1}} \sum_{i=1}^{N_{1}} w^{\top} x_{i}-\frac{1}{N_{2}} \sum_{i=1}^{N_{1}} w^{\top} x_{i}\right)^{2} \\ & =\left(w^{\top} \frac{1}{N_{i}} \sum_{i=1}^{N_{1}} x_{i}-\omega_{i} \sum_{i=1}^{N_{2}} x_{i}\right)^{2} \\ & =w^{\top}\left(\bar{x}_{c_{1}}-\bar{x}_{c_2}\right)(\bar x_{c_1}-\bar x_{c_2})^{\top} w \end{aligned}

    S1=1N1i=1N1(ωjˉxiyˉ1)(ωxiyˉ1)=1N1i=1N1(wxi1)N1i=1Nwxi)(ωxi1N1i=1Nwxi=1N1i=1N1w(xi1N1i=1Nxi)(xi1N1i=1Nxi)w=w1N1i=1N(xixˉ1)(xixˉ1)w=wSC1w\begin{aligned} S_{1} &=\frac{1}{N_{1}} \sum_{i=1}^{N_{1}}\left(\omega^{\bar{j}} x_{i}-\bar{y}_{1}\right)\left(\omega^{\top} x_{i}-\bar{y}_{1}\right)^{\top} \\ &=\frac{1}{N_{1}} \sum_{i=1}^{N_{1}}\left(w^{\top} x_{i}-\frac{1}){N_{1}} \sum_{i=1}^{N} w^{\top} x_{i}\right) \cdot\left(\omega_{x_{i}}-\frac{1}{N_{1}} \sum_{i=1}^{N} w^{\top} x_{i}\right.\\ &=\frac{1}{N_{1}} \sum_{i=1}^{N_{1}} w^{\top}\left(x_{i}-\frac{1}{N_{1}} \sum_{i=1}^{N} x_{i}\right) \cdot\left(x_{i}-\frac{1}{N_{1}}\sum_{i=1}^{N} x_{i}\right)^\top \cdot w \\ &=w^{\top} \frac{1}{N_{1}} \sum_{i=1}^{N}\left(x_{i}-\bar{x}_{1}\right)\left(x_{i}-\bar{x}_{1}\right)^{\top} \cdot w \\ &=w^{\top} S_{C_1} w \end{aligned}

    同理S2=wSC2wS_2 = w^\top S_{C_2}w

    故 :
    J(w)=(y1ˉyˉ2)2S1+S2=w(xˉc1xˉc2)(xˉc1xˉc2)ww(SC1+SC2)w\Large \begin{aligned} J(w)&= \frac{\left(\bar{y_{1}}-\bar{y}_{2}\right)^{2}}{S_{1}+S_{2}} \\ & = \frac{w^{\top}\left(\bar{x}_{c_{1}}-\bar{x}_{c_2}\right)(\bar x_{c_1}-\bar x_{c_2})^{\top} w} {w^{\top} (S_{C_1}+S_{C_2}) w } \end{aligned}

    而其中(xˉc1xˉc2)(xˉc1xˉc2)(\bar{x}_{c_{1}}-\bar{x}_{c_2})(\bar x_{c_1}-\bar x_{c_2})^{\top}(SC1+SC2)(S_{C_1}+S_{C_2})与w无关,为方便运算,我们令Sb=(xˉc1xˉc2)(xˉc1xˉc2)S_{b}= (\bar{x}_{c_{1}}-\bar{x}_{c_2})(\bar x_{c_1}-\bar x_{c_2})^{\top}, Sw=SC1+SC2S_{w}=S_{C_{1}}+S_{C_{2}}

    J(w)=wSbwwSww\Large J(w) = \frac{w^{\top} S_{b} w}{w^{\top} S_{w} w}

    对w进行求导:

    J(ω)ω=wωSbω(ωSwω)1=2Sbw(wSww)1+wSbw(1)(wSww)22Sωw=0\begin{aligned} \frac{\partial J(\omega)}{\partial \omega} &=\frac{\partial}{\partial w} \omega^{\top} S_{b} \omega\left(\omega^{\top} S_{w} \omega\right)^{-1} \\ &=2 S_{b} w\left(w^{\top} S_{w} w\right)^{-1}+w^{\top} S_{b} w(-1)\left(w^{\top} S_{w} w\right)^{-2} \cdot 2 S_{\omega} w=0 \end{aligned}

    两边同乘以(wSww)2\left(w^{\top} S_{w} w\right)^{2},得:

    Sbw(wSww)wSbwSww=0S_{b} w\left(w^{\top} S_{w} w\right)-w^{\top} S_{b} w \cdot S_{w} w=0

    SbwwSww=wSbwSwwS_{b} w w^{\top} S_{w} w=w^{\top} S_{b} w S_{w} w

    其中:SbS_bSwS_w均是(p * p)维的,而w是(p * 1)维的,

    wSwww^{\top} S_{w} wwSbww^{\top} S_{b} w的结果均为1维常量,故可直接消去,不妨设为常数C。则

    Sww=wSwwwSbwSbw\Large S_{w} w=\frac{w^{\top} S_{w} w}{w^{\top} S_{b} w} S_{b} w

    w=CSv1Sbw\Large w=C S_{v}^{-1} S_{b} w

    wSw1Sbw\Large w \propto S_{w}^{-1} S_{b} w

    wSw1(xˉc1xˉc2)(xˉc1xˉc2)w\Large w \propto S_{w}^{-1}\left(\bar{x}_{c_{1}}-\bar x_{c_{2}}\right)\left({\bar x_{c_{1}}-\bar x_{c_{2}}}\right)^{\top} w

    同理(xˉc1xˉc2)w\left({\bar x_{c_{1}}-\bar x_{c_{2}}}\right)^{\top} w 是一个常数。

    故最终可获得:

    wSw1(xˉc1xˉc2)w(Sc1+Sc2)1(xˉ1xˉ2)\begin{array}{l} w \propto S_{w^{-1}}\left(\bar{x}_{c_1}-\bar x_{c_{2}}\right) \\ w \propto\left(S_{c_1}+S_{c_{2}}\right)^{-1}(\bar x_{1} -\bar x_2) \end{array}

    即我们计算得到了w的方向,从而也就知道了分类的超平面(垂直于该直线),便可进行分类任务。

    算法实现

    待更新。

    参考文献

    [1] 机器学习
    [2] https://github.com/shuhuai007/Machine-Learning-Session
    [3] 图解机器学习

    展开全文
  • 在R语言中,线性判别分析(LinerDiscriminantAnalysis,简称LDA),依靠软件包MASS中有线性判别函数lqa()来实现。该函数有三种调用格式:1)当对象为数据框data.frame时lda(x,grouping,prior = propotions,tol = 1.0e-4...

    在R语言中,线性判别分析(Liner

    Discriminant

    Analysis,简称LDA),依靠软件包MASS中有线性判别函数lqa()来实现。该函数有三种调用格式:

    1)当对象为数据框data.frame时

    lda(x,grouping,prior = propotions,tol = 1.0e-4,method,CV =

    FALSE,nu,…)

    2) 当对象为公式Formula时

    lda(formula,data,…,subnet,na.action)

    3) 当对象为矩阵Matrix时

    lda(x,group,…,subnet,na.action)

    对于第一种情况,grouping表示每个观测样本的所属类别;

    prior表示各类别的先验概率,默认取训练集中各样本的比例;

    tol表示筛选变量,默认取0.0001

    对于第二种情况,formula表示判别公式,比如,y~x1 x2 x3,或者y~x1*x1

    data表示数据集

    subnet表示样本

    na.action表示处理缺失值的方法,默认为“如果样本中有缺失值,则lda()函数无法运行”;如果设置为na.omit,则表示“自动删除样本中的缺失值,然后,进行计算”

    对于第三种情况,x表示矩阵

    data表示数据集

    subnet表示样本

    na.action表示处理缺失值的方法,默认为“如果样本中有缺失值,则lda()函数无法运行”;如果设置为na.omit,则表示“自动删除样本中的缺失值,然后,进行计算”

    下面,举一个例子,来说明线性判别分析。我们选用kknn软件包中的miete数据集进行算法演示。miete数据集记录了1994年慕尼黑的住房佣金标准中一些有趣变量,比如房子的面积、是否有浴室、是否有中央供暖、是否供应热水等等,这些因素都影响着佣金的高低。

    1.数据概况

    首先,简单了解一下,miete数据集。

    > library(kknn) > data(miete)

    > head(miete)

    nm wfl  bj bad0 zh ww0 badkach

    fenster kueche mvdauer bjkat wflkat

    1  693.29  50 1971.5

    0  1

    0  0  0  0  2  4

    1

    2  736.60  70 1971.5

    0  1

    0  0  0  0  26  4

    2

    3  732.23  50 1971.5

    0  1

    0  0  0  0  1  4

    1

    4 1295.14  55 1893.0  0  1  0

    0

    0

    0

    0

    1  2

    5  394.97  46 1957.0

    0  0

    1  0  0  0  27  3

    1

    6 1285.64  94 1971.5  0  1  0

    1

    0

    0

    2

    4  3

    nmqm rooms nmkat adr wohn

    1 13.865800  1

    3  2

    2

    2 10.522857  3

    3  2

    2

    3 14.644600  1

    3  2

    2

    4 23.548000  3

    5  2

    2

    5  8.586304  3  1  2

    2

    6 13.677021  4

    5  2

    2

    > dim(miete)

    [1] 1082  17

    我们看到,该数据集一共有1082条样本,和17个变量。下面,我们利用summary()来查看变量的信息。

    > summary(miete)

    nm  wfl  bj  bad0  zh  ww0

    Min.  : 127.1  Min.

    : 20.00  Min.

    :1800  0:1051

    0:202  0:1022

    1st Qu.: 543.6  1st Qu.: 50.25  1st Qu.:1934  1:  31

    1:880  1:

    60

    Median : 746.0  Median : 67.00  Median :1957

    Mean  : 830.3  Mean

    : 69.13  Mean

    :1947

    3rd Qu.:1030.0  3rd Qu.: 84.00  3rd Qu.:1972

    Max.  :3130.0  Max.

    :250.00  Max.

    :1992

    badkach fenster  kueche  mvdauer  bjkat  wflkat

    nmqm

    0:446  0:1024  0:980

    Min.  : 0.00

    1:218  1:271

    Min.  : 1.573

    1:636  1:  58  1:102  1st Qu.: 2.00  2:154

    2:513  1st Qu.: 8.864

    Median : 6.00  3:341  3:298

    Median :12.041

    Mean  :10.63  4:226

    Mean  :12.647

    3rd Qu.:17.00  5: 79  3rd Qu.:16.135

    Max.  :82.00  6: 64

    Max.  :35.245

    rooms  nmkat  adr  wohn

    Min.  :1.000  1:219

    1:  25  1:

    90

    1st Qu.:2.000  2:230  2:1035

    2:673

    Median :3.000  3:210  3:

    22  3:319

    Mean  :2.635  4:208

    3rd Qu.:3.000  5:215

    Max.  :9.000

    我们可以选择nmkat(净租金)作为

    待判别变量—一是,由于该变量在含义上容易受其他变量影响,为被解释变量;二是,nmkat自身就有5个等级类别,其相应的样本量依次为

    219、230、210、208、215,即每一类的样本量都为200个左右,分布比较均匀。

    2.数据预处理

    下面,我们将miete数据集,分为训练集和测试集。

    为了提高判别效果,我们考虑采用分层抽样的方式,由于miete数据集中,待判别变量nmkat的5个等级分布比较均匀,因此采用5个等级按等量抽取样本。(如果分布不均匀,则采用按比例抽取样本)。具体如下:

    > library(sampling) > n =

    round(2/3*nrow(miete)/5) > n

    [1] 144

    可以看到,训练集占总样本的2/3,测试集占总样本的1/3,从训练集中nmkat变量的每一个等级抽取的样本数是144个。

    > #以nmkat变量的5个等级划分层次,进行分层抽样 >

    sub_train = strata(miete,stratanames =

    "nmkat",size=rep(n,5),method="srswor") >

    head(sub_train)

    #显示训练集抽取的情况,包括nmkat变量取值、该样本在数据集中的序号、被抽取的概率、以及被抽取的层次。

    nmkat ID_unit  Prob Stratum

    1  3

    1

    0.6857143  1

    2  3

    2

    0.6857143  1

    3  3

    3

    0.6857143  1

    16  3  16 0.6857143

    1

    20  3  20 0.6857143

    1

    22  3  22 0.6857143

    1

    >

    > #获取如上ID_unit所对应的样本构成训练集,并删除变量1、3、12

    > data_train =

    getdata(miete[,c(-1,-3,-12)],sub_train$ID_unit) >

    data_test = getdata(miete[,c(-1,-3,-12)],-sub_train$ID_unit)

    > dim(data_train); dim(data_test)

    #分别显示训练集、测试集的维度

    [1] 720  14

    [1] 362  14

    > head(data_test)

    wfl bad0 zh ww0 badkach fenster kueche mvdauer bjkat

    nmqm rooms

    nmkat

    7  28  0

    1  0  0  1  1  9  4 17.011071  1  1

    8  36  0

    1  0  0  0  1  3  4 19.710278  1  3

    9  33  0

    1  0  0  0  0  1  4 25.840606  1  4

    10  57  0

    1  0  1  0  1  9  6 11.534035  2  2

    11  75  0

    1  0  1  0  1  3  6 16.504533  3  5

    17  79  0

    1  0  0  0  0  20  4  7.507215  3  2

    adr wohn

    7  2  2

    8  2  2

    9  2  2

    10  2  2

    11  2  2

    17  2  2

    至此,数据理解和数据预处理过程结束,得到可以直接使用的训练集data_train和测试集data_test。

    3.线性判别

    这里使用公式formula格式,进行判别。首先要加载软件包MASS,接着使用nmkat作为待判别变量,其他变量作为特征变量,根据公式nmkat~.

    (如果变量为y,则公式为y~. ) ,使用训练集data_train来运行 lda()函数。

    > library(MASS) > fit_lda1 =

    lda(nmkat~., data_train) #以公式格式进行线性判别 >

    names(fit_lda1) > fit_lda1$prior

    1  2  3  4

    5

    0.2 0.2 0.2 0.2 0.2

    我们可以看到,各类别的先验概率在5个等级中都为0.2,之和为1,即它们都相等,这与它们分别均匀对应。

    > fit_lda1$means

    wfl  bad01

    zh1

    ww01  badkach1

    fenster1  kueche1

    1 54.87500 0.055555556 0.6041667 0.138888889 0.3888889 0.06944444

    0.04166667

    2 60.59722 0.013888889 0.8125000 0.027777778 0.5486111 0.08333333

    0.04166667

    3 66.76389 0.013888889 0.8194444 0.041666667 0.5208333 0.06944444

    0.07638889

    4 74.70833 0.013888889 0.8750000 0.041666667 0.6458333 0.03472222

    0.07638889

    5 90.10417 0.006944444 0.9375000 0.006944444 0.7708333 0.04166667

    0.20833333

    mvdauer  bjkat.L

    bjkat.Q

    bjkat.C

    bjkat^4  bjkat^5

    1 14.444444 -0.21580517 -0.104562739  0.031056500

    0.17323372 -0.17585847

    2 11.923611 -0.12450298 -0.211398581 -0.002588042 0.20604313

    -0.12642562

    3 11.847222 -0.12782306 -0.145478593  0.049690399

    0.16273470 -0.07349309

    4 10.347222 -0.08964215 -0.127293769 -0.035197366 0.12861291

    0.01137393

    5  5.333333 -0.04482107 -0.009092412

    0.018633900 0.02624753 -0.01574852

    nmqm  rooms  adr.L

    adr.Q

    wohn.L  wohn.Q

    1  8.231574 2.173611 -0.019641855 -0.7654655

    0.03437325 -0.3997431

    2 10.988627 2.416667 -0.034373246 -0.7569604 0.08838835

    -0.4252586

    3 12.495436 2.597222 -0.019641855 -0.7654655 0.11294067

    -0.3487121

    4 14.107342 2.861111  0.004910464 -0.7909811

    0.16695577 -0.3912379

    5 17.108865 3.250000  0.019641855 -0.7484552

    0.27498597 -0.2041241

    从上面的结果中,可以看到一些很能反映现实情况的数据特征。比如,住房面积wfl变量,它明显随着租金nmkat的升高而逐步提高。这与我们的常识“房子的面积越大,租金就越贵”是十分吻合的。

    展开全文
  • 线性判别分析(Linear Discriminant Analysis, LDA)是另外一种线性降维方法。与主成分分析法不同,线性判别分析是一种有监督学习,也就意味着线性判别分析需要使用带标签的数据进行训练来完成降维。Ph0en1x Notebook...

    ede64f494298186b8e5e76a77bd536f4.png

    线性判别分析(Linear Discriminant Analysis, LDA)是另外一种线性降维方法。与主成分分析法不同,线性判别分析是一种有监督学习,也就意味着线性判别分析需要使用带标签的数据进行训练来完成降维。


    Ph0en1x Notebookph0en1xgseek.github.io

    主成分分析法的主要思想是找到一种线性映射至低维空间的方法,保证降维后带有不同标签的数据能够尽量分散,而带有相同标签的数据能够尽量相互集中,与PCA一样,分散这一评价指标仍然由方差来决定。

    1. 二分类情况

    考虑当样本的类别只有两类(0和1)且从d维映射至一维的问题,如下图(来自西瓜书)

    d2ec3ad882839e0d258557db1bc88012.png

    LDA的优化目标

    4cfe920ae6a207cc4d5b95a8ea529482.png

    其中μi为第i类样本的中心点,∑i表示第i类样本的协方差矩阵,即(x-μi)(x-μi)T; w即需要找到的最佳映射方式

    定义“类内散度矩阵”(within-class scatter matrix)

    37a02a2a28e0d9c303e5fda70310fa46.png

    以及“类间散度矩阵”(between-class scatter matrix)

    5055071afdd5748b87819de11a8234b6.png

    则优化目标可以写为

    37f10f072151c2a238e9ef2bb7695380.png

    称为Sb和Sw的“广义瑞利商”(generalized Rayleigh quotient)

    但是只有这个式子是不够的,因为当w乘以一个倍数的时候,答案J不会改变,就有无穷多解。要求唯一解,就要对w进行限制,限制之后的优化目标:

    5b8c6efa39030392d937ff1cf2812b5d.png

    与PCA相同,通过拉格朗日乘子法,得到:

    c463b44f854b4aa6fe27d47abbc2bd21.png

    25e7e2e8b1dd6d6425e24803610b30f5.png

    803bf5ee702a9ecc9ceb0d8bd39c1c31.png

    a472cf5219350a185c525eff58565440.png

    由于w的任何倍数不会影响结果,所以

    f8ce26467bcc1708534d2a816e7298d7.png

    我们只要求出Sw就可以出最优的w

    1. 多分类情况

    多分类情况下,需要定义“全局散度矩阵”:

    8e2bace029ff4b48efaab91b7157aef7.png

    类内散度与类间散度矩阵的规定不变

    0f525341fd2358487f9259db603eb6de.png

    fb910f75f5da72fc98fcd25137dcdfab.png

    只要知道其中的两者利用广义瑞利商就可以算出最优解,例如按照二分类的方法得到

    25e7e2e8b1dd6d6425e24803610b30f5.png

    同样也能求出解;

    如果觉得我的笔记内描述不准确,欢迎留言与我交流 ,如果觉得我的笔记写的还行,欢迎给我点个赞

    展开全文
  • 这几天看了看SVM的推导,看的是真的头疼,所以来写一写自己可以搞明白的线性判别分析,让自己心情好一些。封面:电影《风之谷》线性判别分析是一种线性的分类模型。线性分类模型是指采用直线(或超平面)将样本直接...

    b6d1b2f124f636119702fa8b4a638684.png

    这几天看了看SVM的推导,看的是真的头疼,所以来写一写自己可以搞明白的线性判别分析,让自己心情好一些。

    封面:电影《风之谷》


    线性判别分析是一种线性的分类模型。

    线性分类模型是指采用直线(或超平面)将样本直接划开的模型,其形式可以表示成

    的形式,划分平面可以表示成
    。这里可以看出,线性分类模型对于样本的拟合并不一定是线性的,例如逻辑回归(外面套了一层sigmod函数)和感知机(外面套了一层激活函数)。

    线性判别分析的基本思想是把所有样本投影到一条直线上,使样本在这条直线上最容易分类。

    e10bd414e02b5ff672fb19cb432871cf.png

    设直线的方向向量为

    ,则样本
    在直线上的投影为
    ,如图:

    138967f81677636730393e91942aaef7.png

    我们的目标是使两类样本的中心点在线上的投影距离大(两类样本区分度高),同时使每一类样本在线上投影的离散程度尽可能小(类内样本区分度低)。

    分别代表每一类的样本,每一类样本的均值向量,每一类样本的协方差矩阵。

    若将所有样本都投影到直线上,则两类样本的中心点可分别表示为

    ,

    若将所有样本都投影到直线上,则两类样本的协方差可表示为

    ,

    协方差是什么?协方差表示的是两个变量总体误差的期望。如果两个变量的变化趋势一致,则Cov为正值;若相反则为负值;变化趋势无关时为0,此时两个变量独立。

    c2f5079441eb6dd2ce3903d144672136.png

    协方差矩阵是什么?协方差矩阵的元素是任意两个变量之间的协方差。

    aa7a8e09652bebcd900c1e3895e8deb8.png

    81d9fbc85c0614020726393d22d4f669.png

    因此我们如果要让两类样本在投影后离散程度尽可能小,我们就应该让他们之间的方差尽可能小。计算每一类元素投影后的方差在做向量化时,中间就是协方差矩阵(不好意思,下面第二个(X-E(X))应该加个转置)

    b627d72cba5021b65bbde0676f6de292.png

    使两类样本的中心点在线上的投影距离大,同时使每一类样本在线上投影的离散程度尽可能小的表达式可以写为:

    对于参数w的优化问题可以做如下转换:

    因为求的w是一个方向向量,所以lambda w同样也是所求的解,因此我们可以假定

    (相当于为w乘以一个系数lambda使得其最后的和为1)

    则问题转换为二次规划问题:

    解得

    最后的判别模型可表示为

    其中b由于不在目标函数中,所以要手动去找,一般经验方法是:


    Python实现如下:

    import numpy as np
    
    # 2 dm vectors
    x_0 = np.array([[2.95,6.63],[2.53,7.79],[3.57,5.65],[3.16,5.47]])
    x_1 = np.array([[2.58,4.46],[2.16,6.22],[3.27,3.52]])
    
    # mean vectors
    u_0 = np.mean(x_0, axis=0)
    u_1 = np.mean(x_1, axis=0)
    
    # S_w & S_b
    S_w = np.cov(x_0, rowvar=False) + np.cov(x_1, rowvar=False)
    S_b = np.matmul((u_0 - u_1).reshape(-1,1), (u_0 - u_1).reshape(1,-1))
    
    # Result
    w = np.matmul(np.linalg.inv(S_w), (u_0 - u_1))
    b = -1 * np.dot((u_0+u_1)/2, w)

    实验结果:

    利用 LDA 进行一个分类的问题:假设一个产品有两个参数柔软性 A 和钢性 B,来衡量它是否合格,如下图所示:

    a504b60369eb66d0fc89bf067188a4ae.png

    X_0类:

    for i in x_0:
        print(np.dot(w , i) + b) 
    
    # 7.908179218783431
    # 8.836977507881144
    # 11.047547831774281
    # 3.8717837839741094

    X_1类:

    for i in x_1:
        print(np.dot(i , x_0[0]) + b) 
    
    # -39.39697440389426
    # -28.96717440389427
    # -43.59367440389427
    展开全文
  • 通用线性判别分析

    2021-03-16 02:53:28
    通用线性判别分析
  • 线性判别分析总览(Linear Discriminant Analysis,LDA):用于数据预处理中的降维、分类任务,其目标是找到能够最大化类间区分度的坐标轴成分。用几个词概括LDA的特征,即降维、分类。1.样本分类假设一批患者使用同一...
  • 线性判别分析(Linear Discriminant Analysis, LDA),LDA是一种监督学习的降维技术,其具体的原理用一个栗子来说明。首先,从一个简单的分类开始,如下图所示尝试找一个向量,并将各个样本投影到该向量上,比如上面...
  • R语言中的线性判别分析_r语言 线性判别分析 在R语言中,线性判别分析(Liner Discriminant Analysis,简称LDA),依靠软件包MASS中有线性判别函数lqa()来实现。该函数有三种调用格式: 1)当对象为数据框data....
  • 如何根据样本确定线性判别函数是线性判别分析要研究的问题。线性判别分析从形式上来看类似于数理统计中的线性统计模型,但两者又有很大的不同。这里的不同主要表现为因变量 的取值方式不一样。在线性统计模型中,因...
  • 线性判别分析(Fisher判别分析) Python编程 线性判别分析(Fisher判别分析) 线性判别分析(LDA)是一种经典的线性学习方法。 LDA的思想非常朴素:给定训练样例集,设法将样例投影到一条直线上,使得同类样例的...
  • IDA classify EMG线性判别分析
  • 结构化稀疏线性判别分析
  • 关于LDA可以移步Frank Tian:用线性回归的方式打开LDA​zhuanlan.zhihu.com那么让我们补充学习一下kernel Fisher判别分析是什么。这个Fisher,是个人:Sir Ronald Aylmer Fisher FRS (17 February 1890 – 29 July ...
  • Note: 将 Fisher 判别分析放入非参这一部分框架来讲,原因是在Fisher判别分析里同样没有假设数据的分布形式,而是以基于投影后的数据形态的Fisher指标作为优化线性模型的依据。 1. Background and Motivation 在统计...
  • LDA 线性判别分析

    2017-03-22 11:00:22
    线性判别分析
  • 主成分分析(PCA)和线性判别分析(LDA)原理简介

    万次阅读 多人点赞 2018-02-04 21:58:53
    本文整理自下面的博客,对PCA和LDA的原理进行介绍,并对比了其不同点。 1).主成分分析(PCA)原理详解 2).线性判别分析LDA与主成分分析...6).Dimensionality Reduction——LDA线性判别分析原理篇 7).主成分分析...
  • 线性判别分析(Linear Discriminant Analysis,简称LDA)是一种经典的线性学习方法,在二分类问题.上因为最早由[Fisher, 1936]提出,亦称“Fisher判别分析”。 LDA的基本思想:给定训练样例集,设法将样例投影到一条直线上...
  • 线性判别分析(discriminant_analysis.LinearDiscriminantAnalysis)和二次判别分析(discriminant_analysis.QuadraticDiscriminantAnalysis)是两个经典的分类器。 正如他们名字所描述的那样,他们分别代表了线性决策...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,710
精华内容 1,084
关键字:

线性判别分析