文章目录

  • 线性判别函数基本概念
  • Fisher线性判别分析基本思想
  • 最优方向推导过程
  • 转换为判别函数
  • 完整代码

线性判别函数基本概念

我们主要讨论在两类情况下判别函数为线性的情况,这里给出一般情况:g(x)=wTxg(\bf{x})=\bf{w}^T \bf{x}g(x)=wTx+w0w_0w0​
式子中x\bf{x}x为d维样本向量,w\bf{w}w为权向量,如下:
x=[x1x2⋮xd],w=[w1w2⋮wd]\bf{x}=\begin{bmatrix} x_1 \\ x_2 \\ \vdots \\ x_d \end{bmatrix},\bf{w}=\begin{bmatrix} w_1 \\ w_2 \\ \vdots \\ w_d \end{bmatrix}x=⎣⎢⎢⎢⎡​x1​x2​⋮xd​​⎦⎥⎥⎥⎤​,w=⎣⎢⎢⎢⎡​w1​w2​⋮wd​​⎦⎥⎥⎥⎤​
w0w_0w0​为一个常数,称为阈值权

g(x)=g1(x)−g2(x)g(\bf{x})=g_1(\bf{x})-g_2(\bf{x})g(x)=g1​(x)−g2​(x)
设x0\bf{x}_0x0​为一个待分类样本,我们可以通过比较g(x0)g(\bf{x}_0)g(x0​)与0的大小来区分此样本属于哪一类

Fisher线性判别分析基本思想

Fisher线性判别分析的基本思想是把所有样本向某一一维向量上投影,使得同一类样本的投影点尽可能集中,而不同类的样本投影点之间距离比较远,如图:

而如何定量分析找到这一最佳投影方向则是我们下面需要进行的任务

最优方向推导过程

原样本空间中,设共有NNN个样本,属于第一类Ψ1\Psi_1Ψ1​的有N1N_1N1​个,属于第二类Ψ2\Psi_2Ψ2​的有N2N_2N2​个,每个样本都为一个d维向量,如之前所述。为了方便计算我们定义一些量:
类均值向量:
mi\bf{m_i}mi​=1Ni∑xj∈Ψixj,\frac{1}{N_i} \sum_{x_j\in\Psi_i}^{} \bf{x}_j,Ni​1​∑xj​∈Ψi​​xj​, i=1,2i=1,2i=1,2
各类的类内离散度矩阵:
si=∑xj∈Ψi(xj−mi)(xj−mi)T,\bf{s}_i=\sum_{x_j\in\Psi_i}^{} (\bf{x}_j-\bf{m}_i)(\bf{x}_j-\bf{m}_i)^T,si​=∑xj​∈Ψi​​(xj​−mi​)(xj​−mi​)T, i=1,2i=1,2i=1,2
总类内离散度矩阵:
Sw=S1+S2\bf{S}_w=\bf{S}_1+\bf{S}_2Sw​=S1​+S2​
类间离散度矩阵:
Sb=(m1−m2)(m1−m2)T\bf{S}_b=(\bf{m}_1-\bf{m}_2)(\bf{m}_1-\bf{m}_2)^TSb​=(m1​−m2​)(m1​−m2​)T
而在投影之后,变为如下各量:
样本:
yi=wTxi,y_i=\bf{w}^T\bf{x}_i,yi​=wTxi​, i=1,2,⋯,Ni=1,2,\cdots,Ni=1,2,⋯,N
两类均值:
mi~=wTmi,\tilde{m_i}=\bf{w}^T\bf{m}_i,mi​~​=wTmi​, i=1,2i=1,2i=1,2
内离散度:
Si2~=∑yj∈Ψi(yj−mi~)2,i=1,2\tilde{S_i^2}=\sum_{y_j\in\Psi_i}(y_j-\tilde{m_i})^2,i=1,2Si2​~​=∑yj​∈Ψi​​(yj​−mi​~​)2,i=1,2
总类内离散度:
Sw~=S12~+S22~\tilde{S_w}=\tilde{S_1^2}+\tilde{S_2^2}Sw​~​=S12​~​+S22​~​
类间离散度:
Sb~=(m1~−m2~)2\tilde{S_b}=(\tilde{m_1}-\tilde{m_2})^2Sb​~​=(m1​~​−m2​~​)2
有了以上的定义,我们的目标可以写为如下:
maxJF(w)=Sb~Sw~max\;J_F(w)=\frac{\tilde{S_b}}{\tilde{S_w}}maxJF​(w)=Sw​~​Sb​~​​
进一步推导可得:
Sb~=wTSbw\tilde{S_b}=\bf{w}^T\bf{S}_b\bf{w}Sb​~​=wTSb​w
Sw~=wTSww\tilde{S_w}=\bf{w}^T\bf{S}_w\bf{w}Sw​~​=wTSw​w
由于我们仅仅关心的是w\bf{w}w的方向而并不关心其幅值,因此我们可以假定分母为常数而使分子尽量大,也就变为如下准则:
maxwTSbw,s.t.wTSww=c≠0max\;\bf{w}^T\bf{S}_b\bf{w},\;s.t.\;\bf{w}^T\bf{S}_w\bf{w}=c≠0maxwTSb​w,s.t.wTSw​w=c​=0
利用拉格朗日乘子的有关知识,我们可以求解出最优方向的w\bf{w}w值:
w=Sw−1(m1−m2)\bf{w}=\bf{S}_w^{-1}(\bf{m_1}-\bf{m_2})w=Sw−1​(m1​−m2​)

转换为判别函数

以上我们只是求解出了投影方向,如果要得到分类面,需要在投影之后的一维空间上确定一个分类阈值wow_owo​,并采取如下决策规则:
若g(x)=wTx+w0≥0,则x∈Ψ1,否则x∈Ψ2若g(\bf{x})=\bf{w}^T\bf{x}+w_0\geq0,则\bf{x}\in\Psi_1,否则\bf{x}\in\Psi_2若g(x)=wTx+w0​≥0,则x∈Ψ1​,否则x∈Ψ2​
如果不考虑两类样本先验概率不同的情况,可以进行如下取值:
w0=−12(m1~+m2~)w_0=-\frac{1}{2}(\tilde{m_1}+\tilde{m_2})w0​=−21​(m1​~​+m2​~​)

完整代码

以下是利用python将以上过程实现的例子

#导入所需库:
import numpy as np
from matplotlib import pyplot as plt#创建样本集:
X1 = np.array([[[1.2],[2.8]],[[1.9],[3.7]],[[2.5],[3.8]],[[4.8],[7.9]],[[5.6],[7.8]]])
X2 = np.array([[[9.7],[12.6]],[[10.8],[12.7]],[[13.7],[22.7]],[[7.48],[14.82]],[[11.23],[17.16]]])
N1 = X1.shape[0]
N2 = X2.shape[0]#类均值向量:
m1 = np.array([[0],[0]])
for i in range(0,N1):m1 =m1+X1[i]
m1 = m1/N1
m2 = np.array([[0],[0]])
for i in range(0,N2):m2 =m2+X2[i]
m2 = m2/N2#类内离散度矩阵:
S1 = np.zeros((2,2))
for i in range(0,N1):S1 = S1+np.dot(X1[i]-m1,np.transpose(X1[i]-m1))
S2 = np.zeros((2,2))
for i in range(0,N2):S2 = S2+np.dot(X2[i]-m2,np.transpose(X2[i]-m2))
Sw = S1+S2#类间离散度矩阵:
Sb = np.dot(m1-m2,np.transpose(m1-m2))#方向向量:
w = np.dot(np.linalg.inv(Sw),m1-m2)
print(w)#投影后均值:
m11 = np.dot(np.transpose(w),m1)
m21 = np.dot(np.transpose(w),m2)
w0 = -(m11+m21)/2#测试样本:
x_test = np.array([[3.42],[5.86]])
g = np.dot(np.transpose(w),x_test)+w0
if g>0:print('测试样本属于第一类!')
else:print('测试样本属于第二类!')#可视化:
for i in range(0,N1):plt.scatter(X1[i,0],X1[i,1],c='r')
for i in range(0,N2):plt.scatter(X2[i,0],X2[i,1],c='b')
plt.scatter(x_test[0],x_test[1],c='g')
x = np.arange(0,15,0.01)
y = w[1]*x/w[0]
plt.plot(x,y,c='black')
plt.show()

运行结果如图:


最终将测试样本分入第一类,从图像上来看是合理的

Fisher线性判别分析以及python实现相关推荐

  1. Fisher线性判别分析原理解析及其Python程序实现两例

    一.Fisher线性判别分析原理解析与算法描述 Fisher:1890-1962, 英国数学家,生物学家,现代统计学奠基人之一,证明了孟德尔的遗传律符合达尔文的进化论. Fisher线性判别分析(Li ...

  2. 【基础机器学习算法原理与实现】使用感知器算法LDA、最小二乘法LSM、Fisher线性判别分析与KNN算法实现鸢尾花数据集的二分类问题

    本文设计并实现了PerceptronLA.PseudoIA.LeastSM.LinearDA.KNN等五个算法类,以及DataProcessor的数据处理类.对感知器算法LDA.最小二乘法LSM的伪逆 ...

  3. Fisher线性判别分析

    目录 前言 一.简单定义 二.使用步骤 1.通过spss导入数据 2.通过spss进行分析 3.除此之外,该算法还可以用于多分类. 总结 前言 今天学习了分类,对于二分类,经常用的有逻辑回归和Fish ...

  4. Fisher线性判别分析Fisher Linear Distrimination

    Fisher线性判别分析是一种线性分类方法,它的主要思想是:是类内的方差小,类均值之间相差比较大.(类间大,类内小) 以两个类的分类为例: 将两个类由在x1,x2上投影到向量u 上,这样由二维转到了一 ...

  5. fisher线性判别分析matlab,线性判别分析LDA

    首先搞清楚什么叫判别分析?Discriminant Analysis就是根据研究对象的 各种特征值判别其类型归属问题的一种多变量统计分析方法. 根据判别标准不同,可以分为距离判别.Fisher判别.B ...

  6. matlab fisher检验,FISHER线性判别MATLAB实现.doc

    FISHER线性判别MATLAB实现 Fisher线性判别上机实验报告 班级: 学号: 姓名: 算法描述 Fisher线性判别分析的基本思想:选择一个投影方向(线性变换,线性组合),将高维问题降低到一 ...

  7. 线性判别分析(LDA)

    1.简介 线性判别式分析(Linear Discriminant Analysis, LDA),也叫做Fisher线性判别(Fisher Linear Discriminant ,FLD),是模式识别 ...

  8. 『矩阵论笔记』线性判别分析(LDA)最全解读+python实战二分类代码+补充:矩阵求导可以参考

    线性判别分析(LDA)最全解读+python实战二分类代码! 文章目录 一.主要思想! 二.具体处理流程! 三.补充二中的公式的证明! 四.目标函数的求解过程! 4.1.优化问题的转化 4.2.拉格朗 ...

  9. LDA(线性判别分析(普通法))详解 —— python

    在这里和大家道个歉,因为我有一篇matlab的LDA和这篇内容大致相同,我就犯懒了,直接复制,没想到公式复制过来全变成了图片,然后造成了,排版有问题,非常难看,真的很抱歉!!!以后大家督促哈,我再犯懒 ...

最新文章

  1. 图书馆自动化系统 Evergreen 3.3 发布,迁移到 Angular
  2. ACM 进阶计划~~转
  3. 一文教你 Dubbo 服务性能压测(with JMeter)
  4. require与include+php,PHP中include与require有什么区别
  5. promolike原型开发前后台打通
  6. mixin模式 python_总结了 90 条写 Python 程序的建议
  7. Canny边缘检测及C++实现
  8. 阿里巴巴投入1000亿元助力共同富裕,包括十大行动
  9. 产品需求文档写作方法(一)写前准备+梳理需求
  10. 开方根运算——没有FPU的解决办法
  11. windows下phpstorm的高效使用
  12. 循环神经网络(RNN)详解
  13. 操作系统课程设计 —— 模拟磁盘文件系统实现 (Java)
  14. 二分图完全匹配算法之匈牙利算法
  15. 不同版本CLODOP 预览关闭窗口时返回值不同
  16. 华为2019届校招笔试题
  17. authorized_keys与known_hosts
  18. 什么是深度学习,深度学习和机器学习之间,主要有什么区别
  19. 【R生态】非参数多元检验(ADONIS、ANOSIM、PERMANOVA及MRPP等多元方差分析)
  20. VSCode (Visual Studio Code) V1.43.0下载并设置成中文语言

热门文章

  1. vue 改变i标签icon图标的大小
  2. 软件测试人员必备的32个网站清单,果断收藏了!
  3. C语言学习之路(高级篇)—— 变量和内存分布(上)
  4. 安卓打气筒_12.安卓,ListView,打气筒的初次使用
  5. 仿射变换与透视变换(也即射影变换)的直观理解
  6. kali安装所有工具
  7. Lazarus 兼容 Delphi 的跨平台 IDE
  8. 主动信息搜集:基于ARP的主机发现
  9. 003-囚徒健身-第一章到第十章的读书心得
  10. 基于C#的书店零售管理系统#窗体#cs