目录
一、线性分类器理论基础
假设对一模式X已抽取n个特征,表示为:
X = ( x 1 , x 2 , x 3 , . . . . x n ) T X=(x_1,x_2,x_3,....x_n)^T X=(x1,x2,x3,....xn)T
X是n维空间的一个向量
模式识别问题就是根据模式X的n个特征来判别模式属于ω1 ,ω2 , … , ωm类中的那一类。
例如这个图:三类的分类问题,它们的边界线就是一个判别函数
用判别函数进行模式分类,取决两个因素:
判别函数的几何性质:线性与非线性
判别函数的参数确定:判别函数形式+参数
判别函数包含两类:
一类是线性判别函数:
线性判别函数:线性判别函数是统计模式识别的基本方法之一,简单且容易实现。
广义线性判别函数:
所谓广义线性判别函数就是把非线性判别函数映射到另外一个空间(高维)变成线性判别函数
分段线性判别函数:
另一类是非线性判别函数
这里我们举一个多类问题的例子
先手工推导一下
首先确定判别边界
作图如下:有点丑,大概意思是对的
将X代入判别函数方程组并得到结果
下面我们用python代码来实现一下
代码如下
def dragin(x1,x2):
#三个判别式
d1=-1*x1+x2+1
d2=x1+x2-4
d3=-1*x2+1
if d1>0:
print("属于第一类!")
elif d2>0:
print("属于第二类!")
elif d3>0:
print("属于第三类!")
while True:
temp=input("输入要判定的一个模式的第一个参数:")
one=int(temp)
temp1=input("输入要判定的一个模式的第二个参数:")
two=int(temp1)
dragin(one,two)
结果如下:
结果相同,证明我们算的还是没问题的。
理解了这些让我们开始进行更深层次的分类吧。
二、Fisher判别
1.算法描述
Fisher线性判别分析的基本思想:选择一个投影方向(线性变换,线性组合),将高维问题降低到一维问题来解决,同时变换后的一维数据满足每一类内部的样本尽可能聚集在一起,不同类的样本相隔尽可能地远。
Fisher线性判别分析,就是通过给定的训练数据,确定投影方向W和阈值w0, 即确定线性判别函数,然后根据这个线性判别函数,对测试数据进行测试,得到测试数据的类别。
线性判别函数的一般形式可表示成 g ( X ) = w T X + w 0 g(X)=w^TX+w_0 g(X)=wTX+w0 其中
X = { X 1 . . . X d } (1) X= \begin{Bmatrix} X_1 \\ ... \\ X_d \end{Bmatrix} \tag{1} X=⎩⎨⎧X1...Xd⎭⎬⎫(1)
W = { W 1 W 2 . . . W d } (2) W= \begin{Bmatrix} W_1 \\ W_2\\ ...\\ W_d \end{Bmatrix} \tag2{} W=⎩⎪⎪⎨⎪⎪⎧W1W2...Wd⎭⎪⎪⎬⎪⎪⎫(2)
Fisher选择投影方向W的原则,即使原样本向量在该方向上的投影能兼顾类间分布尽可能分开,类内样本投影尽可能密集的要求。
2.推导过程
Fisher判别分析是要实现有最大的类间距离,以及最小的类内距离
对于给定的数据集,D(已经设置好分类标签),Xi,Ui,∑i,分别表示给定类别ii 的集合,均值向量,协方差矩阵。现将数据投影到直线x=0上,则样本中心的投影为 0 = w 1 ∗ u 1 + w 2 ∗ u 2 + ⋯ + w n ∗ u n 0=w_1∗u_1+w_2∗u_2+⋯+w_n∗u_n 0=w1∗u1+w2∗u2+⋯+wn∗un(n 为样本维度,接下来的讨论中将统一设置为2),写成向量形式则为 w T u = 0 w^Tu=0 wTu=0如果将所有的样本都投影到直线上,则两类样本的协方差分别为 w T ∑ 0 w w^T\sum^{}_{}0w wT∑0w
w T ∑ 1 w w^T\sum^{}_{}1w wT∑1w。要想达到较好的分类效果,应该是的同类样本的投影点尽可能的接近&#x