python代码完成Fisher判别

本文详细介绍了Fisher线性判别分析的算法思想,包括W的确定、阈值的确定以及决策规则。通过鸢尾花数据集举例,展示了如何用Python实现Fisher判别算法,并探讨了理解和心得。最后提供了参考链接和解决Jupyter绘图问题的方法。
摘要由CSDN通过智能技术生成

一.算法描述

Fisher线性判别分析的基本思想:选择一个投影方向(线性变换,线性组合),将高维问题降低到一维问题来解决,同时变换后的一维数据满足每一类内部的样本尽可能聚集在一起,不同类的样本相隔尽可能地远。
Fisher线性判别分析,就是通过给定的训练数据,确定投影方向W和阈值w0, 即确定线性判别函数,然后根据这个线性判别函数,对测试数据进行测试,得到测试数据的类别。
线性判别函数的一般形式可表示成 :
在这里插入图片描述
其中
在这里插入图片描述
Fisher选择投影方向W的原则,即使原样本向量在该方向上的投影能兼顾类间分布尽可能分开,类内样本投影尽可能密集的要求。 如下为具体步骤:

(1)W的确定

各类样本均值向量mi
在这里插入图片描述
样本类内离散度矩阵 和总类内离散度矩阵
在这里插入图片描述
样本类间离散度矩阵
在这里插入图片描述
在投影后的一维空间中,各类样本均值
在这里插入图片描述
样本类内离散度和总类内离散度
在这里插入图片描述
样本类间离散度
在这里插入图片描述
Fisher准则函数为
在这里插入图片描述

(2)阈值的确定

是个常数,称为阈值权,对于两类问题的线性分类器可以采用下属决策规则:
令 则:
在这里插入图片描述

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

(3)Fisher线性判别的决策规则

Fisher准则函数满足两个性质:
1.投影后,各类样本内部尽可能密集,即总类内离散度越小越好。
2.投影后,各类样本尽可能离得远,即样本类间离散度越大越好。
根据这个性质确定准则函数,根据使准则函数取得最大值,可求出
在这里插入图片描述

这就是Fisher判别准则下的最优投影方向。
最后得到决策规则

在这里插入图片描述

在这里插入图片描述

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

二.数据描述

1.iris数据

IRIS数据集以鸢尾花的特征作为数据来源,数据集包含150个数据集,有4维,分为3 类,每类50个数据,每个数据包含4个属性,是在数据挖掘、数据分类中非常常用的测试集、训练集。

2.sonar数据

Sonar数据集包含208个数据集,有60维,分为2类,第一类为98个数据,第二类为110个数据,每个数据包含60个属性,是在数据挖掘、数据分类中非常常用的测试集、训练集。

“群内离散度”要求的是距离越远越好;而“群间离散度”的距离越近越好

三.鸢尾花数据集例子

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt 
import seaborn as sns
path=r'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,:]-m1
    a=np.array([a])
    b=a.T
    s1=s1+np.dot(b,a)    
for i in range(0,30,1):
    c=Iris2[i,:]-m2
    c=np.array([c])
    d=c.T
    s2=s2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值