文章目录
一.算法描述
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