线性分类模型之判别函数的几何建模

文章目录

  • 线性分类模型之判别函数的几何建模
    • 1. 判别函数
      • 1.1 两类问题
      • 1.2 多类问题
      • 1.3 Fisher 线性判别 LDA 算法
      • 1.3 代码实现
      • 1.4 结果输出
      • **注释:**
    • 2. 感知机方法
    • 3. 小结

分类问题是将输入向量 x∈Rd\mathbf{x}\in R^dx∈Rd 分配到 KKK 个离散的类 {Ck∣k=1,⋯,k}\{\mathcal{C}_k|k=1,\cdots,k\}{Ck​∣k=1,⋯,k} 中,通常,一个输入只能分配且只能分配到唯一的一个类。输入空间被分界面分割成不同的决策域,如果分类面是输入向量 x\mathbf{x}x 的线性函数时,此分类面可以看作是 DDD 维空间中的 D−1D-1D−1 维分类面,即数据集被超平面严格分开,称为 线性可分

分类问题可以分为两分类和多分类问题,对于输入向量 x\mathbf{x}x,二分类的输出为 t∈{0,1}t\in\{0,1\}t∈{0,1},对于多分类问题,出输出采用 One-hot 的方式,如 5 类问题的第二类 t=(0,1,0,0,0)\mathbf{t}=(0,1,0,0,0)t=(0,1,0,0,0).

构造分类函数的方法主要有三种:

(1)直接构造判别函数 y(x)=f(wTx+w0)y(\mathbf{x})=f(\mathbf{w}^T\mathbf{x}+w_0)y(x)=f(wTx+w0​).

(2)通过概率构造 p(Ck∣x)p(\mathcal{C}_k\vert\mathbf{x})p(Ck​∣x),通过概率的大小确定类别。

(3)通过概率构造生成模型,通过先验和似然获取后验概率,即
p(Ck∣x)=p(x∣Ck)p(Ck)p(x)p(\mathcal{C}_k\vert\mathbf{x})=\frac{p(\mathbf{x}\vert\mathcal{C}_k)p(\mathcal{C}_k)}{p(\mathbf{x})} p(Ck​∣x)=p(x)p(x∣Ck​)p(Ck​)​

1. 判别函数

在线性回归模型中,通过 y(x)=wTx+w0y(\mathbf{x})=\mathbf{w}^T\mathbf{x}+w_0y(x)=wTx+w0​ 来获取一个实数值,如果需要判断一个类别时,我们可以通过构造一种函数,将函数值限制在 [0,1][0,1][0,1] 中,为了达到这种效果,我们可以借助于一个非线性函数 f(⋅)f(\cdot)f(⋅) 来构造参数 w\mathbf{w}w 的线性函数
y(x)=f(wTx+w0)y(\mathbf{x})=f(\mathbf{w}^T\mathbf{x}+w_0) y(x)=f(wTx+w0​)
在机器学习中, f(⋅)f(\cdot)f(⋅) 称为激活函数,在统计学中该函数的拟函数称为连接函数。相应地,决策面函数为
y(x)=constanty(\mathbf{x})=\text{constant} y(x)=constant
也可以写作
wTx+w0=constant(1)\mathbf{w}^T\mathbf{x}+w_0=\text{constant}\tag{1} wTx+w0​=constant(1)
因此,尽管 f(⋅)f(\cdot)f(⋅) 是非线性函数,但是分界面公式(1)仍然是关于 x\mathbf{x}x 一个线性函数,称为广义线性模型

1.1 两类问题

线性判别函数最简单的表示是通过取输入向量 x\mathbf{x}x 的线性函数来获得的
y(x)=wTx+w0y(\mathbf{x})=\mathbf{w}^T\mathbf{x}+w_0 y(x)=wTx+w0​
其中 www 被称为权重向量,w0w_0w0​ 是偏置(不要与统计学意义上的偏差混淆)。如果输入向量 x\mathbf{x}x 对应的函数值 y(x)≥0y(\mathbf{x})\geq 0y(x)≥0,则被分配到第一类 x∈C1\mathbf{x}\in \mathcal{C}_1x∈C1​,否则, x∈C2\mathbf{x}\in \mathcal{C}_2x∈C2​. 因此,对应的判定边界由函数 y(x)=0y(\mathbf{x}) = 0y(x)=0 确定,该关系对应于 DDD 维输入空间内的 (D−1)(D-1)(D−1) 维超平面。考虑位于决策面上的两个点 xA\mathbf{x}_AxA​ 和 xB\mathbf{x}_BxB​,由于 y(xA)=y(xB)=0y(\mathbf{x}_A)=y(\mathbf{x}_B)=0y(xA​)=y(xB​)=0,因此有 wT(xA−xB)=0\mathbf{w}^T(\mathbf{x}_A−\mathbf{x}_B)=0wT(xA​−xB​)=0,因此向量 w\mathbf{w}w 与位于决策曲面内的每个向量正交, w\mathbf{w}w 确定决策曲面的方向(即向量 w\mathbf{w}w 是决策面的法向量)。类似地,如果 x\mathbf{x}x 是决策曲面上的一个点,那么 y(x)=0y(\mathbf{x}) = 0y(x)=0 ,即
wTx∣∣w∣∣=−w0∣∣w∣∣\frac{\mathbf{w}^T\mathbf{x}}{\vert\vert\mathbf{w}\vert\vert}=\frac{-w_0}{\vert\vert\mathbf{w}\vert\vert} ∣∣w∣∣wTx​=∣∣w∣∣−w0​​
**注释:**上式表明分界面上的向量在绿色直线上的投影,即原点到分界面的距离。

对于空间中任意一点 x\mathbf{x}x,可以表示为
x=x⊥+r⋅w∥w∥(2)\mathbf{x}=\mathbf{x}_\perp + r\cdot\frac{\mathbf{w}}{\Vert\mathbf{w}\Vert}\tag{2} x=x⊥​+r⋅∥w∥w​(2)
公式(2)两边左乘 wT\mathbf{w}^TwT,然后加上 w0w_0w0​,得
wTx+w0=wTx⊥+w0+r⋅wTw∥w∥\mathbf{w}^T\mathbf{x}+w_0=\mathbf{w}^T\mathbf{x}_\perp+w_0 + r\cdot\frac{\mathbf{w}^T\mathbf{w}}{\Vert\mathbf{w}\Vert} wTx+w0​=wTx⊥​+w0​+r⋅∥w∥wTw​
即,点到直线的距离 rrr 为
r=y(x)∥w∥r = \frac{y(\mathbf{x})}{\Vert\mathbf{w}\Vert} r=∥w∥y(x)​

注释: 公式(2)中的系数 rrr 可看作是向量的模。

为了书写更加简洁,可引入哑变量 x0=1x_0=1x0​=1,然后定义 w~=(w0,w)\widetilde{\mathbf{w}}=(w_0,\mathbf{w})w=(w0​,w) 和 x~=(x0,x)\widetilde{\mathbf{x}}=(x_0,\mathbf{x})x=(x0​,x),则
y(x)=w~Tx~y(\mathbf{x})=\widetilde{\mathbf{w}}^T\widetilde{\mathbf{x}} y(x)=wTx

1.2 多类问题

yk(x)=wkTx+wk0y_k(\mathbf{x})=\mathbf{w}_k^T\mathbf{x}+w_{k0} yk​(x)=wkT​x+wk0​

(wk−wj)Tx+(wk0−wj0)=0(\mathbf{w}_k-\mathbf{w}_j)^T\mathbf{x}+(w_{k0}-w_{j0})=0 (wk​−wj​)Tx+(wk0​−wj0​)=0

x^=λxA+(1−λ)xB\hat{\mathbf{x}}=\lambda\mathbf{x}_A+(1-\lambda)\mathbf{x}_B x^=λxA​+(1−λ)xB​

yk(x^)=λyk(xA)+(1−λ)yk(xB)y_k(\hat{\mathbf{x}})=\lambda y_k(\mathbf{x}_A)+(1-\lambda)y_k(\mathbf{x}_B) yk​(x^)=λyk​(xA​)+(1−λ)yk​(xB​)

多分类问题的最小二乘法:
yk(x)=wkTx+wk0y_k(\mathbf{x})=\mathbf{w}_k^T\mathbf{x}+w_{k0} yk​(x)=wkT​x+wk0​

y(x)=(y1(x)y2(x)⋮yK(x))=(w~1Tw~2T⋮w~KT)x~=W~Tx~\boldsymbol{y}(\mathbf{x})=\left( \begin{array}{c} %该矩阵一共3列,每一列都居中放置 y_1(\mathbf{x})\\ %第一行元素 y_2(\mathbf{x})\\ %第二行元素 \vdots \\ y_K(\mathbf{x}) \end{array} \right)=\left( \begin{array}{c} %该矩阵一共3列,每一列都居中放置 \widetilde{\mathbf{w}}_1^T\\ %第一行元素 \widetilde{\mathbf{w}}_2^T\\ %第二行元素 \vdots \\ \widetilde{\mathbf{w}}_K^T \end{array} \right)\widetilde{\mathbf{x}}=\widetilde{\mathbf{W}}^T\widetilde{\mathbf{x}} y(x)=⎝⎜⎜⎜⎛​y1​(x)y2​(x)⋮yK​(x)​⎠⎟⎟⎟⎞​=⎝⎜⎜⎜⎛​w1T​w2T​⋮wKT​​⎠⎟⎟⎟⎞​x=WTx

ED(W~)=12Tr{(X~W~−T)T(X~W~−T)}E_D(\widetilde{\mathbf{W}})=\frac{1}{2}Tr\Big\{(\widetilde{\mathbf{X}}\widetilde{\mathbf{W}}-\mathbf{T})^T(\widetilde{\mathbf{X}}\widetilde{\mathbf{W}}-\mathbf{T})\Big\} ED​(W)=21​Tr{(XW−T)T(XW−T)}

∂ED(W~)∂W~=X~T(X~W~−T)=X~TX~W~−X~TT=0\frac{\partial E_D(\widetilde{\mathbf{W}})}{\partial \widetilde{\mathbf{W}}}=\widetilde{\mathbf{X}}^T(\widetilde{\mathbf{X}}\widetilde{\mathbf{W}}-\mathbf{T})=\widetilde{\mathbf{X}}^T\widetilde{\mathbf{X}}\widetilde{\mathbf{W}}-\widetilde{\mathbf{X}}^T\mathbf{T}=\boldsymbol{0} ∂W∂ED​(W)​=XT(XW−T)=XTXW−XTT=0

W~=(X~TX~)−1X~T⏟X~†T=X~†T\widetilde{\mathbf{W}}=\underbrace{(\widetilde{\mathbf{X}}^T\widetilde{\mathbf{X}})^{-1}\widetilde{\mathbf{X}}^T}_{\widetilde{\mathbf{X}}^\dagger}\mathbf{T}=\widetilde{\mathbf{X}}^\dagger\mathbf{T} W=X†(XTX)−1XT​​T=X†T

y(x)=W~Tx~=TT(X~†)Tx~\boldsymbol{y}(\mathbf{x})=\widetilde{\mathbf{W}}^T\widetilde{\mathbf{x}}=\mathbf{T}^T(\widetilde{\mathbf{X}}^\dagger)^T\widetilde{\mathbf{x}} y(x)=WTx=TT(X†)Tx

1.3 Fisher 线性判别 LDA 算法

分类面在空间中的表示方法:

过原点的直线(法向量为 w\mathbf{w}w)
wTx=0\mathbf{w}^T\mathbf{x}=0 wTx=0
不过原点的直线(法向量为 w\mathbf{w}w)
wTx=c\mathbf{w}^T\mathbf{x}=c wTx=c
有一种分类建模的方法是从降维的角度认识的,将 DDD 维空间上的输入向量 x\mathbf{x}x 投影到一维直线上,可通过内积形式完成
y=wTxy=\mathbf{w}^T\mathbf{x}y=wTx
可对y设置一个阈值进行分类,当 y≥−w0y\geq -w_0y≥−w0​ 则认为是类 C1\mathcal{C}_1C1​,否则为类C2\mathcal{C}_2C2​. 一般来说,投影到一维上会导致大量的信息丢失,并且在原始的D维空间中很好地分离的类可能在一维中变得很强地重叠。然而,通过调整权重向量 w\mathbf{w}w 的分量,我们可以选择最大化类分离的投影。

对于一个两类问题,其中有 C1\mathcal{C}_1C1​ 类的 N1N_1N1​ 个点和 C2\mathcal{C}_2C2​ 类的 N2N_2N2​ 个点,因此这两类的平均向量表示为
m1=1N1∑n∈C1xn,m2=1N1∑n∈C2xn\mathbf{m}_1=\frac{1}{N_1}\sum_{n\in\mathcal{C}_1}\mathbf{x}_n,\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\mathbf{m}_2=\frac{1}{N_1}\sum_{n\in\mathcal{C}_2}\mathbf{x}_n m1​=N1​1​n∈C1​∑​xn​,m2​=N1​1​n∈C2​∑​xn​
两个中心点到直线上的投影分别为
m1=wTm1,m2=wTm2m_1=\mathbf{w}^T\mathbf{m}_1,\;\;\;\;\;\;\;\;\;\;\;\;\;m_2=\mathbf{w}^T\mathbf{m}_2 m1​=wTm1​,m2​=wTm2​
为使得两类尽可能的分开,最直接的方式是满足两个中心点的投影距离最大,即
max⁡w(m2−m1)2={wT(m2−m1)}{wT(m2−m1)}T=wT{(m2−m1)(m2−m1)T}w=wTSBw\max_{\mathbf{w}}\;\;(m_2-m_1)^2 = \Big\{\mathbf{w}^T(\mathbf{m}_2-\mathbf{m}_1)\Big\}\Big\{\mathbf{w}^T(\mathbf{m}_2-\mathbf{m}_1)\Big\}^T \\ =\mathbf{w}^T\Big\{(\mathbf{m}_2-\mathbf{m}_1)(\mathbf{m}_2-\mathbf{m}_1)^T\Big\}\mathbf{w} \\ =\mathbf{w}^T\mathbf{S}_B\mathbf{w} wmax​(m2​−m1​)2={wT(m2​−m1​)}{wT(m2​−m1​)}T=wT{(m2​−m1​)(m2​−m1​)T}w=wTSB​w
为了防止两类投影点有重叠现象,我们希望每一类的投影方差是最小的,即
s12=∑n∈C1(yn−m1)2=∑n∈C1(wTxn−wTm1)2=∑n∈C1{wT(xn−m1)}2=wT{∑n∈C1(xn−m1)(xn−m1)T}ws_1^2=\sum_{n\in\mathcal{C}_1}(y_n-m_1)^2 \\ =\sum_{n\in\mathcal{C}_1}(\mathbf{w}^T\mathbf{x}_n-\mathbf{w}^T\mathbf{m}_1)^2 \\ =\sum_{n\in\mathcal{C}_1}\Big\{\mathbf{w}^T(\mathbf{x}_n-\mathbf{m}_1)\Big\}^2 \\ =\mathbf{w}^T\Big\{\sum_{n\in\mathcal{C}_1}(\mathbf{x}_n-\mathbf{m}_1)(\mathbf{x}_n-\mathbf{m}_1)^T\Big\}\mathbf{w} s12​=n∈C1​∑​(yn​−m1​)2=n∈C1​∑​(wTxn​−wTm1​)2=n∈C1​∑​{wT(xn​−m1​)}2=wT{n∈C1​∑​(xn​−m1​)(xn​−m1​)T}w
相似地,
s22=∑n∈C2(yn−m2)2=∑n∈C2(wTxn−wTm2)2=∑n∈C2{wT(xn−m2)}2=wT{∑n∈C2(xn−m2)(xn−m2)T}ws_2^2=\sum_{n\in\mathcal{C}_2}(y_n-m_2)^2 \\ =\sum_{n\in\mathcal{C}_2}(\mathbf{w}^T\mathbf{x}_n-\mathbf{w}^T\mathbf{m}_2)^2 \\ =\sum_{n\in\mathcal{C}_2}\Big\{\mathbf{w}^T(\mathbf{x}_n-\mathbf{m}_2)\Big\}^2 \\ =\mathbf{w}^T\Big\{\sum_{n\in\mathcal{C}_2}(\mathbf{x}_n-\mathbf{m}_2)(\mathbf{x}_n-\mathbf{m}_2)^T\Big\}\mathbf{w} s22​=n∈C2​∑​(yn​−m2​)2=n∈C2​∑​(wTxn​−wTm2​)2=n∈C2​∑​{wT(xn​−m2​)}2=wT{n∈C2​∑​(xn​−m2​)(xn​−m2​)T}w
综合以上两式,需要类内方差和最小,即
min⁡ws12+s22=wT{∑n∈C1(xn−m1)(xn−m1)T}w+wT{∑n∈C2(xn−m2)(xn−m2)T}w=wT{∑n∈C1(xn−m1)(xn−m1)T+∑n∈C2(xn−m2)(xn−m2)T}w=wTSWw(6)\min_{\mathbf{w}}\;\;s_1^2+s_2^2=\mathbf{w}^T\Big\{\sum_{n\in\mathcal{C}_1}(\mathbf{x}_n-\mathbf{m}_1)(\mathbf{x}_n-\mathbf{m}_1)^T\Big\}\mathbf{w}+\mathbf{w}^T\Big\{\sum_{n\in\mathcal{C}_2}(\mathbf{x}_n-\mathbf{m}_2)(\mathbf{x}_n-\mathbf{m}_2)^T\Big\}\mathbf{w} \\ =\mathbf{w}^T\Big\{\sum_{n\in\mathcal{C}_1}(\mathbf{x}_n-\mathbf{m}_1)(\mathbf{x}_n-\mathbf{m}_1)^T+\sum_{n\in\mathcal{C}_2}(\mathbf{x}_n-\mathbf{m}_2)(\mathbf{x}_n-\mathbf{m}_2)^T\Big\}\mathbf{w} \\ =\mathbf{w}^T\mathbf{S}_W\mathbf{w} \tag{6} wmin​s12​+s22​=wT{n∈C1​∑​(xn​−m1​)(xn​−m1​)T}w+wT{n∈C2​∑​(xn​−m2​)(xn​−m2​)T}w=wT{n∈C1​∑​(xn​−m1​)(xn​−m1​)T+n∈C2​∑​(xn​−m2​)(xn​−m2​)T}w=wTSW​w(6)
综合(3)和(6),分类的目标函数为
max⁡wJ=wTSBwwTSWw(7)\max_{\mathbf{w}}\;J=\frac{\mathbf{w}^T\mathbf{S}_B\mathbf{w}}{\mathbf{w}^T\mathbf{S}_W\mathbf{w}}\tag{7} wmax​J=wTSW​wwTSB​w​(7)
为求公式(7)的极值点,可通过对其进行求导获得
∂J∂w=(wTSBw)SWw−(wTSWw)SBwwTSWwwTSWw=0\frac{\partial J}{\partial\mathbf{w}}=\frac{(\mathbf{w}^T\mathbf{S}_B\mathbf{w})\mathbf{S}_W\mathbf{w}-(\mathbf{w}^T\mathbf{S}_W\mathbf{w})\mathbf{S}_B\mathbf{w}}{\mathbf{w}^T\mathbf{S}_W\mathbf{w}\mathbf{w}^T\mathbf{S}_W\mathbf{w}}=0 ∂w∂J​=wTSW​wwTSW​w(wTSB​w)SW​w−(wTSW​w)SB​w​=0

(wTSBw)SWw=(wTSWw)SBw(8)(\mathbf{w}^T\mathbf{S}_B\mathbf{w})\mathbf{S}_W\mathbf{w}=(\mathbf{w}^T\mathbf{S}_W\mathbf{w})\mathbf{S}_B\mathbf{w}\tag{8} (wTSB​w)SW​w=(wTSW​w)SB​w(8)
由于 SBw=(m2−m1)(m2−m1)Tw=constant⋅(m2−m1)\mathbf{S}_B\mathbf{w} = (\mathbf{m}_2-\mathbf{m}_1)(\mathbf{m}_2-\mathbf{m}_1)^T\mathbf{w}=\text{constant}\cdot(\mathbf{m}_2-\mathbf{m}_1)SB​w=(m2​−m1​)(m2​−m1​)Tw=constant⋅(m2​−m1​),

又因为我们只关心w的方向,而不关心它的长度,可认为 wTSBw=constant1\mathbf{w}^T\mathbf{S}_B\mathbf{w}=\text{constant}_1wTSB​w=constant1​,wTSww=constant2\mathbf{w}^T\mathbf{S}_w\mathbf{w}=\text{constant}_2wTSw​w=constant2​,因此,公式(8)可改写为
SWw=constant⋅(m2−m1)(9)\mathbf{S}_W\mathbf{w}=\text{constant}\cdot(\mathbf{m}_2-\mathbf{m}_1)\tag{9} SW​w=constant⋅(m2​−m1​)(9)
公式(9)两边同时左乘 SW−1\mathbf{S}_W^{-1}SW−1​,得
w∝SW−1⋅(m2−m1)(10)\mathbf{w}\propto \mathbf{S}_W^{-1}\cdot(\mathbf{m}_2-\mathbf{m}_1)\tag{10} w∝SW−1​⋅(m2​−m1​)(10)
公式(10)就是著名的 Fisher 判别法 (Linear Discriminant Analysis, LDA),此时,只给出了求投影直线的方法,并没有进行分类。确定分类面,我们还需要确定一个阈值 y0y_0y0​,判断 wTx\mathbf{w}^T\mathbf{x}wTx 与阈值的大小关系

  • 如 wTx≥y0\mathbf{w}^T\mathbf{x}\geq y_0wTx≥y0​,则 x∈C1\mathbf{x}\in \mathcal{C}_1x∈C1​

  • 如 wTx<y0\mathbf{w}^T\mathbf{x}< y_0wTx<y0​,则 x∈C2\mathbf{x}\in \mathcal{C}_2x∈C2​

1.3 代码实现
# 利用 linear Descriminant Analysis (LDA, 又称 Fisher判别分析) 方法进行二分类,
# 结果中的直线不是分类线,是投影直线;阈值是需要事先设定的,此处是利用的投影均值。import numpy as np
import matplotlib.pyplot as plt# 生成两类数据集
def createDataSet():# 类别1X1 = np.mat(np.random.random((50, 2)) * 5 + 15)# 类别2X2 = np.mat(np.random.random((40, 2)) * 5 + 2)return X1, X2#
def average(dataset):ave = []a, b = np.shape(dataset)for i in range(b):n = np.sum(dataset[:, i]) / aave.append(n)return np.array(ave)def compute_sw(dataset, ave):sw = 0a, b = np.shape(dataset)for i in range(a - 1):sw += np.dot(dataset[i, :] - ave, (dataset[i, :] - ave).T)return np.array(sw)x1_x, x2_x = createDataSet()
x1_x_ave = average(x1_x)
x2_x_ave = average(x2_x)x1_sw = compute_sw(x1_x, x1_x_ave)
x2_sw = compute_sw(x2_x, x2_x_ave)
Sw = x1_sw + x2_sw# 求广义逆
pinv = np.linalg.pinv(Sw)
w = np.multiply(x1_x_ave - x2_x_ave, pinv)[0, :]
print('w 的值为:', w)data = np.vstack((x1_x,x2_x))
y = np.dot(w,data.T)thresh = np.mean(y)
a=np.array(y>thresh)
ind1 = a[0,:]
a=np.array(y<thresh)
ind2 = a[0,:]
print('两类数据的类标号', ind1)x1_x = np.array(x1_x)
x2_x = np.array(x2_x)
data = np.vstack((x1_x,x2_x))test = np.array([15,10])
test =test.reshape((-1,1))
cls = np.dot(w,test)>thresh
print('测试为第一类的结果为:',cls)# 画图
plt.figure()
plt.scatter(data[:,0],data[:,1])
x = np.arange(-5,10,0.01)
y = -w[0]*x/w[1]
plt.plot(x,y)
plt.scatter(data[ind1,0],data[ind1,1])
plt.scatter(data[ind2,0],data[ind2,1])plt.show()
1.4 结果输出
w 的值为: [0.03483013 0.03467873]
两类数据的类标号 [ True  True  True  True  True  True  True  True  True  True  True  TrueTrue  True  True  True  True  True  True  True  True  True  True  TrueTrue  True  True  True  True  True  True  True  True  True  True  TrueTrue  True  True  True  True  True  True  True  True  True  True  TrueTrue  True False False False False False False False False False FalseFalse False False False False False False False False False False FalseFalse False False False False False False False False False False FalseFalse False False False False False]
测试为第一类的结果为: [ True]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5HjlEHab-1669101371512)(Img/Fisher.png)]

注释:

LDA算法既可以用来降维,又可以用来分类,但是目前来说,主要还是用于降维。在我们进行图像识别图像识别相关的数据分析时,LDA是一个有力的工具。下面总结下LDA算法的优缺点。

  • LDA算法的主要优点有:

    1)在降维过程中可以使用类别的先验知识经验,而像PCA这样的无监督学习则无法使用类别先验知识。

    2)LDA在样本分类信息依赖均值而不是方差的时候,比PCA之类的算法较优。

  • LDA算法的主要缺点有:

    1)LDA不适合对非高斯分布样本进行降维,PCA也有这个问题。

    2)LDA降维最多降到类别数k-1的维数,如果我们降维的维度大于k-1,则不能使用LDA。当然目前有一些LDA的进化版算法可以绕过这个问题。

    3)LDA在样本分类信息依赖方差而不是均值的时候,降维效果不好。

    4)LDA可能过度拟合数据。

2. 感知机方法

2.1 回顾分类面在空间中的表示方法:

过原点的直线(法向量为 w\mathbf{w}w)
wTx=0\mathbf{w}^T\mathbf{x}=0 wTx=0
不过原点的直线(法向量为 w\mathbf{w}w)
wTx=c或wTx−c=0\mathbf{w}^T\mathbf{x}=c \;\;\;\;或\;\;\;\;\;\mathbf{w}^T\mathbf{x}-c=0 wTx=c或wTx−c=0
则 x′\mathbf{x}'x′ 带入上式得
wTx′−c>0\mathbf{w}^T\mathbf{x}'-c > 0 wTx′−c>0
则 x′′\mathbf{x}''x′′ 带入上式得
wTx′′−c<0\mathbf{w}^T\mathbf{x}''-c < 0 wTx′′−c<0
由上可知,令 x′\mathbf{x}'x′ 对应的类为正类,即 t′=+1t'=+1t′=+1, x′′\mathbf{x}''x′′ 对应的类为负类,即 t′′=−1t''=-1t′′=−1 则有

正确分类的情形:
t′(wTx′−c)>0,t′′(wTx′′−c)>0t'(\mathbf{w}^T\mathbf{x}'-c) > 0 \;\;,\;\;\; t''(\mathbf{w}^T\mathbf{x}''-c) > 0 t′(wTx′−c)>0,t′′(wTx′′−c)>0
错误分类的情形:
t′′(wTx′−c)<0,t′(wTx′′−c)<0t''(\mathbf{w}^T\mathbf{x}'-c) < 0 \;\;,\;\;\; t'(\mathbf{w}^T\mathbf{x}''-c) < 0 t′′(wTx′−c)<0,t′(wTx′′−c)<0
综上可知,对于任意的数据 (xi,ti)(\mathbf{x}_i,t_i)(xi​,ti​),错分的总和为
∑i=1Nti(wTxi−c)<0\sum_{i=1}^N t_i(\mathbf{w}^T\mathbf{x}_i-c) < 0 i=1∑N​ti​(wTxi​−c)<0
由于上式中的误差和为负数,可构造相反数变成正数,同时令 −c=b-c=b−c=b,则对于错误分类的集合MMM,损失函数(感知机学习的经验风险函数或错误率)为

E(w,b)=−∑xi∈Myi(wTxi+b)(11)E(\textbf{w},b)=-\sum_{\textbf{x}_i\in M}y_i(\textbf{w}^T\textbf{x}_i+b)\tag{11} E(w,b)=−xi​∈M∑​yi​(wTxi​+b)(11)
注释: 公式(11)只考虑错误分类的数据,对于正确分类的视而不见,即正确分类数据不影响参数 w\textbf{w}w。

公式(11)的极小化问题为
(w^,b^)=arg⁡min⁡w,bE(w,b)(\hat{\mathbf{w}},\hat{b})=\arg\min_{\textbf{w},b} E(\mathbf{w},b) (w^,b^)=argw,bmin​E(w,b)
关于w\textbf{w}w求偏导数
∂E(w,b)∂w=−∑xi∈Myixi\frac{\partial E(\textbf{w},b)}{\partial \textbf{w}}=-\sum_{x_i\in M}y_i\textbf{x}_i ∂w∂E(w,b)​=−xi​∈M∑​yi​xi​
关于 bbb 求偏导
∂E(w,b)∂b=−∑xi∈Mti\frac{\partial E(\textbf{w},b)}{\partial b}=-\sum_{x_i\in M}t_i ∂b∂E(w,b)​=−xi​∈M∑​ti​

对于错分数据集(根据 ti(wTxi−c)<0t_i(\mathbf{w}^T\mathbf{x}_i-c) < 0ti​(wTxi​−c)<0 判断),由于采用随机梯度下降,一次随机选取一个误分类点 (xi,ti)(\mathbf{x}_i , t_i )(xi​,ti​) 的参数更新公式为:
w←w+ηtixib←b+η∑xi∈Mti\textbf{w}\leftarrow \textbf{w}+\eta t_i\textbf{x}_i \\ b\leftarrow b+\eta \sum_{x_i\in M}t_i w←w+ηti​xi​b←b+ηxi​∈M∑​ti​
2.2 感知机算法:

初始化 w0\textbf{w}_0w0​ 和 b0b_0b0​

步1:如果误分类,即 ti(wTxi+b)<0t_i(\textbf{w}^T\textbf{x}_i+b)<0ti​(wTxi​+b)<0

步2:执行 w\textbf{w}w 和 bbb 的更新\

步3:返回步1,直至没有误分点

# !/usr/bin/env python
# -*- coding:utf-8 -*-"""
author:LEE CZThe form of perceptron
"""import numpy as np
import matplotlib.pyplot as plt
from matplotlib.lines import Line2D# 可视化展示分类结果
def plotResult(dataMat, labelMat, weight, bias,fig):axes = fig.add_subplot(111)# 设置坐标轴的显示范围plt.xlim(-5, 10)plt.ylim(-5, 10)axes.scatter(dataMat[:,0],dataMat[:,1],c=labelMat[:])y = (0.1 * -weight[0] / weight[1] + -bias / weight[1], 4.0 * -weight[0] / weight[1] + -bias / weight[1])axes.add_line(Line2D((0.1, 4.0), y, linewidth=1, color='blue'))plt.xlabel('X')plt.ylabel('Y')plt.pause(1)plt.cla()# 感知机算法
def trainPerceptron(dataMat, labelMat, eta,fig):m, n = dataMat.shapeweight = np.zeros(n)bias = 0flag = Truewhile flag:for i in range(m):if np.any(labelMat[i] * (np.dot(weight, dataMat[i]) + bias) <= 0):weight = weight + eta * labelMat[i] * dataMat[i].Tbias = bias + eta * labelMat[i]print('weight is {}, bias is {}'.format(weight, bias))plotResult(dataMat, labelMat, weight, bias,fig)flag = Truebreakelse:flag = Falsereturn weight, biasif __name__ == "__main__":# 导入数据,并确定X和ydata = np.loadtxt('testSet.txt')dataMat = data[:, 0:2]labelMat = data[:, 2]eta = 1 # 步长,或学习率fig = plt.figure()weight, bias = trainPerceptron(dataMat, labelMat, 1,fig)plotResult(dataMat, labelMat, weight, bias,fig)print(labelMat)print('The final weight is {}, the final bias is {}'.format(weight, bias))

weight is [3. 3.], bias is -1.0
weight is [2. 2.], bias is -2.0
weight is [1. 1.], bias is -3.0
weight is [ 0. -1.], bias is -4.0
weight is [3. 2.], bias is -3.0
weight is [2. 1.], bias is -4.0
weight is [0.  0.5], bias is -5.0
weight is [3.  3.5], bias is -4.0
weight is [2.  2.5], bias is -5.0
weight is [0. 2.], bias is -6.0
weight is [3. 5.], bias is -5.0
weight is [2. 4.], bias is -6.0
weight is [1. 3.], bias is -7.0
weight is [0. 1.], bias is -8.0
weight is [3. 4.], bias is -7.0
weight is [2. 3.], bias is -8.0
weight is [1. 1.], bias is -9.0
weight is [4. 4.], bias is -8.0
weight is [3. 3.], bias is -9.0
weight is [2. 1.], bias is -10.0
weight is [5. 4.], bias is -9.0
weight is [4. 3.], bias is -10.0
weight is [3. 1.], bias is -11.0
weight is [6. 3.], bias is -10.0
weight is [4.  2.5], bias is -11.0
[-1. -1.  1.  1. -1.  1.  1. -1.]
The final weight is [4.  2.5], the final bias is -11.0

2.3 感知机模型的对偶

误分点的更新过程
w:=w+ηtixib:=b+ηti\mathbf{w}:=\mathbf{w}+\eta t_i\mathbf{x}_i\\ b:=b+\eta t_i w:=w+ηti​xi​b:=b+ηti​
若 (xi,ti)(\mathbf{x}_i,t_i)(xi​,ti​) 在 nin_ini​ 次循环中均被看做误分点,(不失一般性,设 w0=0,b0=0\mathbf{w}_0=\mathbf{0},b_0=0w0​=0,b0​=0),则 w,b\mathbf{w},bw,b 关于点(xi,ti)(\mathbf{x}_i,t_i)(xi​,ti​) 的增量分别为 (niη)tixi(n_i\eta) t_i \mathbf{x}_i(ni​η)ti​xi​ 和 (niη)ti(n_i\eta) t_i(ni​η)ti​

即 w,b\mathbf{w},bw,b 关于 (xi,yi)(\mathbf{x}_i,y_i)(xi​,yi​) 点的增量可记为(令 αi=niη\alpha_i=n_i\etaαi​=ni​η )
Δw(xi,yi)=αitixiΔb(xi,yi)=αitiΔαi=η\Delta \mathbf{w}_{(x_i,y_i)}=\alpha_i t_i \mathbf{x}_i\\ \Delta b_{(x_i,y_i)}=\alpha_i t_i\\ \Delta\alpha_i=\eta Δw(xi​,yi​)​=αi​ti​xi​Δb(xi​,yi​)​=αi​ti​Δαi​=η

从全数据的执行,最终学到的 w\mathbf{w}w 和 bbb 分别为
w=∑i=1Nαitixib=∑i=1Nαiti\mathbf{w}=\sum_{i=1}^N\alpha_i t_i \mathbf{x}_i\\ b=\sum_{i=1}^N\alpha_i t_i w=i=1∑N​αi​ti​xi​b=i=1∑N​αi​ti​
则判断准则 ti(wTxi+b)<0t_i(\mathbf{w}^T\mathbf{x}_i+b)<0ti​(wTxi​+b)<0 可重写为
ti(∑j=1NαjtjxjTxi+b)<0t_i\Big(\sum_{j=1}^N\alpha_jt_j\mathbf{x}_j^T\mathbf{x}_i+b\Big)<0 ti​(j=1∑N​αj​tj​xjT​xi​+b)<0

ti(∑j=1Nαjtj(xj,xi)⏟向量的内积+b)<0t_i\Big(\sum_{j=1}^N\alpha_jt_j\underbrace{(\mathbf{x}_j,\mathbf{x}_i)}_{向量的内积}+b\Big)<0 ti​(j=1∑N​αj​tj​向量的内积(xj​,xi​)​​+b)<0
更新过程:
αi:=αi+ηb:=b+ηti\alpha_i:=\alpha_i+\eta\\ b:=b+\eta t_i αi​:=αi​+ηb:=b+ηti​
直至所有点均无误分的情况

注:对偶方法的优势在于只计算内积 (xi,xj)(\mathbf{x}_i,\mathbf{x}_j)(xi​,xj​),内积矩阵为Gram矩阵,因此在引入核函数时非常有利,无需知道 y=ϕ(x)y=\phi(\mathbf{x})y=ϕ(x) 的形式。

"""
author:LeeCZThe dual form of perceptron
"""import numpy as np
import matplotlib.pyplot as plt
from matplotlib.lines import Line2D# 载入数据集
def loadData():data = np.loadtxt('testSet.txt')dataMat = data[:, 0:2]labelMat = data[:, 2]labelMat = labelMat.reshape((labelMat.shape[0], 1))return dataMat, labelMat"""
训练模型
b:bias
eta:learning rate
"""
def trainModel(dataMat, labelMat, alpha, b, eta):flag = Truewhile flag:for i in range(m):if (labelMat[i, 0] * (np.sum((alpha * labelMat * np.dot(dataMat, dataMat[i].T).reshape((m, 1)))) + b)) <= 0:alpha[i] = alpha[i] + etab = b + eta * labelMat[i]flag = Truebreakelse:flag = Falsew = np.dot(dataMat.T, alpha * labelMat)return w, b# 可视化结果
def plotResult(dataMat, labelMat, weight, bias):fig = plt.figure()axes = fig.add_subplot(111)axes.scatter(dataMat[:,0],dataMat[:,1],c=labelMat[:,0])y = (0.1 * -weight[0] / weight[1] + -bias / weight[1], 4.0 * -weight[0] / weight[1] + -bias / weight[1])axes.add_line(Line2D((0.1, 4.0), y, linewidth=1, color='blue'))plt.xlabel('X')plt.ylabel('Y')plt.show()# 主函数
if __name__ == "__main__":dataMat, labelMat = loadData()m, n = dataMat.shapealpha = np.zeros((m, 1))b = 0eta = 1w, b = trainModel(dataMat, labelMat, alpha, b, eta)print('weight is {}, \n bias is {}'.format(w, b))plotResult(dataMat, labelMat, w, b)

结果

weight is [[4. ][2.5]], bias is [-11.]

3. 小结

Bishop 模式识别与机器学习读书笔记 || 线性分类模型之判别函数的几何建模相关推荐

  1. Bishop 模式识别与机器学习读书笔记_ch1.1 机器学习概述

    模式识别与机器学习-读书笔记 第一章 机器学习概述(I) 数据模式搜索问题是一个基础性的问题,有着悠久而成功的历史. 16世纪对第谷布拉赫的广泛天文观测使约翰内斯开普勒发现了行星运动的经验定律,从而为 ...

  2. Bishop 模式识别与机器学习读书笔记_ch1.3 决策论与信息论基础

    ch1.3 决策论与信息论 文章目录 ch1.3 决策论与信息论 @[toc] 1. 模型选择 1.1 交叉验证 1.2 交叉验证的弊端 2. 维数灾难 2.1 基于直角坐标系的网格分析法 2.2 存 ...

  3. R语言与机器学习学习笔记(分类算法)

    转载自:http://www.itongji.cn/article/0P534092014.html 人工神经网络(ANN),简称神经网络,是一种模仿生物神经网络的结构和功能的数学模型或计算模型.神经 ...

  4. 机器学习读书笔记(开篇)

    新近到手一本<机器学习实战>(Peter Harringtom),兴奋之余,本着好记性不如烂笔头的真理,打算将读书的过程记录下来,形成读书笔记,重点记录自己所理解的算法思想与应用示例.本人 ...

  5. 数据压缩读书笔记——线性代数的几何意义(五)

    文章目录 第四章 向量组及向量空间的几何意义 4.1 向量组的几何意义 4.1.1 线性表示.组合及相关性的意义 4.1.2 向量组等价及秩的几何意义 向量组等价的几何解释 向量的秩及极大无关向量组 ...

  6. 机器学习(六)分类模型--线性判别法、距离判别法、贝叶斯分类器

    机器学习(六)分类模型--线性判别法.距离判别法.贝叶斯分类器 首先我们了解常见的分类模型和算法有哪些 线性判别法 简单来说就是用一些规定来寻找某一条直线,用直线划分学习集,然后根据待测点在直线的哪一 ...

  7. 【机器学习】SVM支持向量机在手写体数据集上进行二分类、采⽤ hinge loss 和 cross-entropy loss 的线性分类模型分析和对比、网格搜索

    2022Fall 机器学习 1. 实验要求 考虑两种不同的核函数:i) 线性核函数; ii) ⾼斯核函数 可以直接调⽤现成 SVM 软件包来实现 ⼿动实现采⽤ hinge loss 和 cross-e ...

  8. 逻辑回归和线性回归的区别_[PRML]线性分类模型贝叶斯逻辑回归

    线性分类相关文章:1.Fisher线性判别分析(LDA)[1]2.广义模型与线性模型& 判别分析 [2]3.逻辑回归[3]4.线性分类模型简介5.感知机原理及代码复现6.概率生成模型7.概率判 ...

  9. 实体 联系 模型mysql_数据库系统概念读书笔记――实体-联系模型_MySQL

    bitsCN.com 数据库系统概念读书笔记--实体-联系模型 前言 为了重新回顾我写的消息系统架构,我需要重新读一下数据库系统概念的前三章,这里简单的做一个笔记,方便自己回顾 基本概念 实体-联系( ...

最新文章

  1. jsp静态化和伪静态化转载
  2. 装完Windows 7后开启硬盘AHCI模式的方法
  3. 基于PLSQL的数据库备份方法及如何解决导出clob和blob类型数据报错的问题
  4. JS数据类型与分支结构
  5. Android开发之http网络请求返回码问题集合。
  6. 实现自己的.NET Core配置Provider之EF
  7. Linux关闭防火墙详述
  8. zblog php 七牛缩略图,zblog中Gravatar头像不显示解决方法
  9. Enterprise Library: Logging and Instrumentation Application Block概述
  10. tshark 解析pcap中带TLS协议的数据包
  11. Go语言的变量、函数、Socks5代理服务器 1
  12. pyspark 逻辑回归程序
  13. 实用的手机app商城购物网站模板源码
  14. 网络收集的逻辑思维题
  15. React 集成 jsoneditor 以对json数据进行展示和修改
  16. 高级计算机程序员实操题,国家计算机软考高级程序员历年真题1990.doc
  17. CMMB蓄势待发,模拟电视东山再起
  18. DOS计算机设置登录密码,如何在DOS里设置计算机密码
  19. 计算机网络修复提示DNS服务器,dns被劫持或提示配置错误,该怎么解决
  20. 北京编程女子图鉴,谁说女子不如男

热门文章

  1. [DSP]DSP初学者指南
  2. 区块链中“鸡肋”的RPC漏洞
  3. 星岚技术 Win10 x64 无精简完整版 V2021.5
  4. 手游公司为什么加班?给员工和管理者的建议
  5. 【Pyecharts50例】添加自定义地图/geojson使用/区县地图
  6. 职场值得学习的6种精神
  7. 你对P300事件相关电位知道多少?
  8. CAN、RS485总线中120欧姆终端电阻的作用
  9. 86盒IP对讲一键报警器
  10. 让人费解的统计(股票、幸福指数等)