在理解Fisher线性分类的参考代码基础上(matlab代码),改用python代码完成Fisher判别的推导。重点理解“群内离散度”(样本类内离散矩阵)、“群间离散度”(总类内离散矩阵)的概念和几何意义。
一、Fisher线性判别
Fisher线性判别分析的基本思想:选择一个投影方向(线性变换,线性组合),将高维问题降低到一维问题来解决,同时变换后的一维数据满足每一类内部的样本尽可能聚集在一起,不同类的样本相隔尽可能地远。
Fisher线性判别分析,就是通过给定的训练数据,确定投影方向W和阈值w0, 即确定线性判别函数,然后根据这个线性判别函数,对测试数据进行测试,得到测试数据的类别。
Fisher判别分析是要实现有最大的类间距离,以及最小的类内距离
线性判别函数的一般形式可表示成
g ( X ) = W T X + w 0 g(X)=W^TX+w_{0} g(X)=WTX+w0
其中
Fisher选择投影方向W的原则,即使原样本向量在该方向上的投影能兼顾类间分布尽可能分开,类内样本投影尽可能密集的要求。
(一)W的确定
各类样本均值向量mi
样本类内离散度矩阵和总类内离散度矩阵Sw
样本类间离散度矩阵Sb
在投影后的一维空间中,各类样本均值
样本类内离散度和总类内离散度
样本类间离散度
Fisher准则函数为max
(二)阈值的确定
是个常数,称为阈值权,对于两类问题的线性分类器可以采用下属决策规则:
如果g(x)>0,则决策x属于W1;如果g(x)<0,则决策x属于W2;如果g(x)=0,则可将x任意分到某一类,或拒绝。
(三)Fisher线性判别的决策规则
1.投影后,各类样本内部尽可能密集,即总类内离散度越小越好。
2.投影后,各类样本尽可能离得远,即样本类间离散度越大越好。
根据这两个性质,可求出
这就是Fisher判别准则下的最优投影方向。最后得到决策规则,如果
则
对于某一个未知类别的样本向量x,如果y=WT·x>y0,则x∈w1;否则x∈w2。
(四)“群内离散度”与“群间离散度”
“群内离散度”要求的是距离越远越好;而“群间离散度”的距离越近越好
由上可知:“群内离散度”(样本类内离散矩阵)的计算公式为
因为每一个样本有多维数据,因此需要将每一维数据代入公式计算后最后在求和即可得到样本类内离散矩阵。存在多个样本,重复该计算公式即可算出每一个样本的类内离散矩阵
“群间离散度”(总体类离散度矩阵)的计算公式为
例如鸢尾花数据集,会将其分为三个样本,因此就会得到三个总体类离散度矩阵,三个总体类离散度矩阵根据上述公式计算即可。
二、python实现
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
path=r'media/Iris.csv'
df = pd.read_csv(path, header=0)
Iris1=df.val