Fisher线性分类器

2024-02-19 14:20
文章标签 线性 fisher 分类器

本文主要是介绍Fisher线性分类器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 1.Fisher线性判别
    • 基本原理:
    • 最佳W值的确定:
    • 阈值的确定
    • Fisher线性判别的决策规则
    • “群内离散度”与“群间离散度”
  • 2.Python代码
    • 参考文章

1.Fisher线性判别

线性判别分析是一种经典的线性学习方法,其思想:给定训练样例集,设法将样例投影到一条直线上,使得同类样例的投影点尽可能接近,异样样例的投影点尽可能远离;在对新样本进行分类时,将其投影到同样的直线上,再根据投影点的位置来确定新样本的类别

在这里插入图片描述

基本原理:

在这里插入图片描述

分析w1方向之所以比w2方向优越,可以归纳出这样一个准则,即向量w的方向选择应能使两类样本投影的均值之差尽可能大些,而使类内样本的离散程度尽可能小。这就是Fisher准则函数的基本思路。

Fisher准则的基本原理,就是要找到一个最合适的投影轴,使两类样本在该轴上投影的交迭部分最少,从而使分类效果为最佳。

最佳W值的确定:

最佳w值的确定实际上就是对Fisher准则函数求取其达极大值时的。

对于这个问题可以采用拉格朗日乘子算法解决,保持分母为一非零常数c的条件下,求其分子项的极大值。

在这里插入图片描述

在这里插入图片描述

这个函数称为Fisher准则函数。应该寻找使分子尽可能大,分母尽可能小的w作为投影向量。

在这里插入图片描述

定义函数Lagrange函数:

在这里插入图片描述

对拉格朗日函数分别对w求偏导并置为0来求w的解。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

这是一个求矩阵
在这里插入图片描述
的特征值问题。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

其中(m1-m2)Tw*=R

实际上我们关心的只是向量w*的方向,其数值大小对分类器没有影响。因此在忽略了数值因子R/λ 后,可得:

在这里插入图片描述

上式就是使用Fisher准则求最佳法线向量的解。

向量w就是使Fisher准则函数JF(w)达极大值的解,也就是按Fisher准则将d维X空间投影到一维Y空间的最佳投影方向,该向量w的各分量值是对原d维特征向量求加权和的权值。

阈值的确定

对于两类问题的线性分类器可以采用下属决策规则:

g(x)=g1(x)-g2(x)

如果g(x)>0,则决策x属于W1;如果g(x)<0,则决策x属于W2;如果g(x)=0,则可将x任意分到某一类,或拒绝。

Fisher线性判别的决策规则

根据上述式子:

在这里插入图片描述

可以得到最后决策规则,如果:

在这里插入图片描述

在这里插入图片描述

对于某一个未知类别的样本向量x,如果y=WT·x>y0,则x∈w1;否则x∈w2。

“群内离散度”与“群间离散度”

样本类内离散度矩阵Si

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YkS0yY2i-1588653485704)(attachment:image.png)]

样本类间离散度矩阵Sb

在这里插入图片描述

2.Python代码


import pandas as pd
import numpy as np
import matplotlib.pyplot as plt 
import seaborn as sns
path=r'F:/人工智能与机器学习/iris.csv'
df = pd.read_csv(path, header=0)
Iris1=df.values[0:50,0:4]
Iris2=df.values[50:100,0:4]
Iris3=df.values[100:150,0:4]
m1=np.mean(Iris1,axis=0)
m2=np.mean(Iris2,axis=0)
m3=np.mean(Iris3,axis=0)
s1=np.zeros((4,4))
s2=np.zeros((4,4))
s3=np.zeros((4,4))
for i in range(0,30,1):a=Iris1[i,:]-m1a=np.array([a])b=a.Ts1=s1+np.dot(b,a)    
for i in range(0,30,1):c=Iris2[i,:]-m2c=np.array([c])d=c.Ts2=s2+np.dot(d,c) #s2=s2+np.dot((Iris2[i,:]-m2).T,(Iris2[i,:]-m2))
for i in range(0,30,1):a=Iris3[i,:]-m3a=np.array([a])b=a.Ts3=s3+np.dot(b,a) 
sw12=s1+s2
sw13=s1+s3
sw23=s2+s3
#投影方向
a=np.array([m1-m2])
sw12=np.array(sw12,dtype='float')
sw13=np.array(sw13,dtype='float')
sw23=np.array(sw23,dtype='float')
#判别函数以及T
#需要先将m1-m2转化成矩阵才能进行求其转置矩阵
a=m1-m2
a=np.array([a])
a=a.T
b=m1-m3
b=np.array([b])
b=b.T
c=m2-m3
c=np.array([c])
c=c.T
w12=(np.dot(np.linalg.inv(sw12),a)).T
w13=(np.dot(np.linalg.inv(sw13),b)).T
w23=(np.dot(np.linalg.inv(sw23),c)).T
#print(m1+m2) #1x4维度  invsw12 4x4维度  m1-m2 4x1维度
T12=-0.5*(np.dot(np.dot((m1+m2),np.linalg.inv(sw12)),a))
T13=-0.5*(np.dot(np.dot((m1+m3),np.linalg.inv(sw13)),b))
T23=-0.5*(np.dot(np.dot((m2+m3),np.linalg.inv(sw23)),c))
kind1=0
kind2=0
kind3=0
newiris1=[]
newiris2=[]
newiris3=[]
for i in range(30,49):x=Iris1[i,:]x=np.array([x])g12=np.dot(w12,x.T)+T12g13=np.dot(w13,x.T)+T13g23=np.dot(w23,x.T)+T23if g12>0 and g13>0:newiris1.extend(x)kind1=kind1+1elif g12<0 and g23>0:newiris2.extend(x)elif g13<0 and g23<0 :newiris3.extend(x)
#print(newiris1)
for i in range(30,49):x=Iris2[i,:]x=np.array([x])g12=np.dot(w12,x.T)+T12g13=np.dot(w13,x.T)+T13g23=np.dot(w23,x.T)+T23if g12>0 and g13>0:newiris1.extend(x)elif g12<0 and g23>0:newiris2.extend(x)kind2=kind2+1elif g13<0 and g23<0 :newiris3.extend(x)
for i in range(30,50):x=Iris3[i,:]x=np.array([x])g12=np.dot(w12,x.T)+T12g13=np.dot(w13,x.T)+T13g23=np.dot(w23,x.T)+T23if g12>0 and g13>0:newiris1.extend(x)elif g12<0 and g23>0:     newiris2.extend(x)elif g13<0 and g23<0 :newiris3.extend(x)kind3=kind3+1
correct=(kind1+kind2+kind3)/60
print("样本类内离散度矩阵S1:",s1,'\n')
print("样本类内离散度矩阵S2:",s2,'\n')
print("样本类内离散度矩阵S3:",s3,'\n')
print('-----------------------------------------------------------------------------------------------')
print("总体类内离散度矩阵Sw12:",sw12,'\n')
print("总体类内离散度矩阵Sw13:",sw13,'\n')
print("总体类内离散度矩阵Sw23:",sw23,'\n')
print('-----------------------------------------------------------------------------------------------')
print('判断出来的综合正确率:',correct*100,'%')

在这里插入图片描述

参考文章

http://bob0118.club/?p=266

这篇关于Fisher线性分类器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/724935

相关文章

线性回归(Linear Regression)原理详解及Python代码示例

一、线性回归原理详解         线性回归是一种基本的统计方法,用于预测因变量(目标变量)与一个或多个自变量(特征变量)之间的线性关系。线性回归模型通过拟合一条直线(在多变量情况下是一条超平面)来最小化预测值与真实值之间的误差。 1. 线性回归模型         对于单变量线性回归,模型的表达式为:         其中: y是目标变量。x是特征变量。β0是截距项(偏置)。β1

DataWhale机器学习——第三章线性模型笔记

读书笔记: 《机器学习》第三章 线性模型 3.1 基本形式 3.1.1 线性模型的定义 3.1.2 线性模型的优点 简单易理解计算效率高容易实现和解释 3.1.3 线性模型的局限性 只能表达线性关系对于复杂的非线性关系,表现较差 3.2 线性回归 3.2.1 基本概念 3.2.2 最小二乘法 正规方程 3.2.3 正则化 为防止过拟合,可以在损失函数中加入正

高级线性回归模型详解

高级线性回归模型详解 在线性回归模型的基础上,有许多高级的技巧和方法可以进一步提高模型的性能和解释能力。本文将详细介绍多元线性回归、交互项、正则化方法(岭回归和套索回归)、多重共线性处理及模型诊断等高级主题。 目录 多元线性回归交互项正则化方法 岭回归套索回归 多重共线性处理模型诊断总结 多元线性回归 多元线性回归是线性回归的一种扩展形式,涉及多个自变量。其数学表达式为: Y = β

计数排序(第8章线性时间排序)

根据《算法导论》第八章算法实现下面函数,详见《算法导论》第八章计数排序,程序可运行: #include <STDLIB.H>#include <STDIO.H>#include <MALLOC.H>#include <STRING.H>/********************************************************* 函数名: void COUNTI

第六章线性模型选择+正则化

目录 什么是正则化(防止过拟合) 正则化的作用 正则化参数λ 第一题 第二题 回答 第三题 回答 第四题 回答 什么是正则化(防止过拟合) 正则化(Regularization)是指在机器学习和统计学中,通过引入额外的约束或惩罚项来防止模型过拟合的一种技术。过拟合是指模型在训练数据上表现很好,但在测试数据或新数据上表现较差的现象。正则化通过限制模型的复杂度,从而提高模型

Python统计实战:一题搞定多元线性回归、共线性、相对重要性分析

为了解决特定问题而进行的学习是提高效率的最佳途径。这种方法能够使我们专注于最相关的知识和技能,从而更快地掌握解决问题所需的能力。 (以下练习题来源于《统计学—基于Python》。联系获取完整数据和Python源代码文件。) 练习题 为了分析影响不良贷款的因素,一家商业银行在所属的多家分行中随机抽取25家,得到的不良贷款、贷款余额、应收贷款、贷款项目个数、固定资产投资等有关数据如下(前3行

基于MATLAB仿真LFM线性调频信号

基于MATLAB仿真LFM线性调频信号 目录 前言 一、LFM信号简介 二、LFM信号基本原理 三、LFM信号仿真 四、代码 总结 前言         仿真中的接收信号,有时为了简单会直接用一个正弦波代替,但实际中接收到的信号极少是点频信号,一般都是PSK信号、OFDM信号、LFM信号等等。但最近想仿真一下LFM信号,将其用到自己某些算法的仿真中,于是有了下文。本文将

神经网络学习6-线性层

归一化用的较少 正则化用来解决过拟合,处理最优化问题,批量归一化加快速度 正则化(Regularization): 作用:正则化是一种用来防止过拟合的技术,通过向模型的损失函数中添加惩罚项,使得模型在学习过程中更加平滑,避免对训练数据过度拟合。 归一化(Normalization): 作用:归一化是一种数据预处理技术,用来缩放特征值的范围,使得不同特征之间具有可比性,加速模型的收敛过程,提高模型

探索数据结构:集合、线性结构、树状结构和图形结构

在计算机科学中,数据结构是用于组织和存储数据的基础。不同的数据结构有不同的特点和适用场景。今天,我们将深入探讨四种主要的数据结构:集合、线性结构、树状结构和图形结构。通过对它们的理解,您可以更好地选择和应用这些结构来解决实际问题。 集合(Set) 定义与特点 集合是一组互不相同的元素的无序集合。与其他数据结构不同,集合中的元素没有特定的顺序,并且每个元素都是唯一的。这意味着在集合中不存

开关阀(3):Fisher DVC6200定位器原理及调试

Fisher DVC6200---Digital Valve Controllers( 数字阀门控制器)简写 DVC,而6200是Fisher DVC定位器发展的一个系列型号,是Fisher结合DVC2000、DVC6000系列,取其特点发展的有着高适用性和高可靠性的阀门定位器。   DVC6200 原理:(双作用) 从控制系统过来的输入控制信号(4-20mADC)经过信号线接到接线盒。