Fisher判别法
#三类问题的判别
def determine(x1,x2):#x1,x2表示模式x=[7,5]^t
d1x=d1[0]*x1+d1[1]*x2+d1[1]
d2x=d2[0]*x1+d2[1]*x2+d2[1]
d3x=d3[0]*x1+d1[1]*x2+d3[1]
if d1x>0:
print("该判定结果:X∈ω1")
elif d2x>0:
print("该判定结果:X∈ω2")
elif d3x>0:
print("该判定结果:X∈ω3")
else:
print("分类失败")
d1=[-1,1,1]#表示d1的系数和截距
d2=[1,1,-4]#表示d2的系数和截距
d3=[-1,1,0]#表示d3的系数和截距
determine(7,5)
该判定结果:X∈ω2
Fisher判别法是判别分析的方法之一,它是借助于方差分析的思想,利用已知各总体抽取的样品的p维观察值构造一个或多个线性判别函数y=l′x其中l= (l1,l2…lp)′,x= (x1,x2,…,xp)′,使不同总体之间的离差(记为B)尽可能地大,而同一总体内的离差(记为E)尽可能地小来确定判别系数l=(l1,l2…lp)′。数学上证明判别系数l恰好是|B-λE|=0的特征根,记为λ1≥λ2≥…≥λr>0。所对应的特征向量记为l1,l2,…lr,则可写出多个相应的线性判别函数,在有些问题中,仅用一个λ1对应的特征向量l1所构成线性判别函数y1=l′1x不能很好区分各个总体时,可取λ2对应的特征向量l′2建立第二个线性判别函数y2=l′2x,如还不够,依此类推。有了判别函数,再人为规定一个分类原则(有加权法和不加权法等)就可对新样品x判别所属
对数据集的 fisher线性分类
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
path=r'D:\\iris.data'
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))