fisher線性分類器

2022-04-30 03:00:09 字數 3735 閱讀 8592

fisher準則的基本原理:找到乙個最合適的投影軸,使兩類樣本在該軸上投影之間的距離盡可能遠,而每一類樣本的投影盡可能緊湊,從而使分類效果為最佳。

假設有兩類樣本,分別為$x_1$和$x_2$

則各類在d維特徵空間裡的樣本均值為:

$$m_i = \frac\sum_x_k \ \ \ i=1,2$$

通過$\omega$變換後,將d維空間裡的樣本投影到一維。($y_k$是$x_k$通過$\omega$變換後的標量)

各類在1維特徵空間裡的樣本均值為: 

$$m_i=\frac\sum_y_k\ \ \ i=1,2$$

各類樣本類內離散度:

$$s_i^2=\sum_(y_k-m_i)^2\ \ \ i=1,2$$

我們的目標是變換以後兩類樣本均值距離盡可能遠並且每個樣本盡可能聚在一起,即:

$$max j_f(\omega) = \frac$$

使$j_f$最大的$\omega*$是最佳解向量,也就是fisher的線性判別式

$$y=\omega^tx$$

$$m_i=\frac\sum_\omega^tx_k=\omega^tm_i$$

$$(m_1-m_2)^2 = (\omega^tm_1-\omega^tm_2)^2$$

$$= \omega^t(m_1-m_2)(m_1-m_2)^t\omega = \omega^ts_b\omega$$

原始維度下的類間離散度$s_b=(m_1-m_2)(m_1-m_2)^t$

$s_b$表示兩類均值向量之間的離散度大小

$$s_1^2+s_2^2=\sum_(\omega^tx_k-\omega^tm_i)^2 \ \ \ i=1,2$$

$$=\omega^t · \sum_(x_k-m_i)(x_k-m_i)^t ·\omega = \omega^ts_w\omega$$

樣本"類內總離散度"矩陣$s_w= \sum_(x_k-m_i)(x_k-m_i)^t \ \ \ i=1,2$

將上述推導結論代入$j_f(\omega)$,得:$j_f(\omega)=\frac$

其中$s_b$和$s_w$都可以從樣本集$x_i$直接計算出來

用lagrange乘子法求解。令分母為常數$c=\omega^ts_w\omega\ \ \ c\neq0$

$$l(\omega,\lambda)=\omega^ts_b\omega-\lambda(\omega^ts_w\omega-c)$$

$$\frac=2(s_b\omega-\lambda s_w\omega)=0$$

$\omega$是法向量, 所以比例因子可以去掉。

即$\omega = s_w^(m_1-m-2)$ 

閾值可以根據選擇:

$$b=-\frac(m_1+m_2)=-\frac(\omega^tm_1+\omega^tm_2)$$

import matplotlib.pyplot as plt

import numpy as np

import random

import math

fig=plt.figure()#初始化figure物件

ax=fig.add_subplot(111)#新增子圖

ax.set(xlim=[0,100],ylim=[0,100],title='fisher criterion function')

x1=np.zeros((2,100))

x2=np.zeros((2,100))#新建2*100的矩陣用來儲存資料

for i in range(100):#隨機生成第1類點

rd=random.uniform(0,25)#隨機向量長度

rd2=random.uniform(-math.pi,math.pi)#隨機向量方向

xlab=25+math.sin(rd2)*rd

ylab=75+math.cos(rd2)*rd#隨機點的座標

x1[0][i]=xlab

x1[1][i]=ylab#儲存到x1中

ax.plot(xlab,ylab,color='red', marker='.')#圖形化顯示

for i in range(100):#隨機生成第2類點

rd=random.uniform(0,25)

rd2=random.uniform(-math.pi,math.pi)

xlab=75+math.sin(rd2)*rd

ylab=25+math.cos(rd2)*rd

x2[0][i]=xlab

x2[1][i]=ylab

ax.plot(xlab,ylab,color='blue', marker='.')

m1=np.zeros(2)

m2=np.zeros(2)

for i in range(100):

for j in range(2):

m1[j]=m1[j]+0.01*x1[j][i]#求第一類點的重心

for i in range(100):

for j in range(2):

m2[j]=m2[j]+0.01*x2[j][i]#求第二類點的重心

ax.plot(m1[0],m1[1],color='black',marker='+',markersize=12)#將重心輸出

ax.plot(m2[0],m2[1],color='black',marker='+',markersize=12)

sw=np.zeros((2,2))#求總類內離散度矩陣sw

for i in range(100):

sw=sw+0.01*np.mat(x1[:,i]-m1).t*np.mat(x1[:,i]-m1)

+0.01*np.mat(x2[:,i]-m2).t*np.mat(x2[:,i]-m1)

w=np.dot(np.linalg.pinv(sw),(m1-m2))#求出方向向量

w=np.mat(w.t)

midpoint=(m1+m2)/2#閾值

附:向量求導

附:拉格朗日乘數法

基本形態:求函式$z=f(x,y)$在滿足$\varphi(x,y)=0$條件下的極值,可以轉化為函式$f(x,y,\lambda)=f(x,y)+\lambda\varphi(x,y)$的無條件極值問題,其中λ為引數。

令$f(x,y,\lambda)$對$x$和$y$和$\lambda$的一階偏導數等於零,即

$$f'_x=ƒ'_x(x,y)+\lambda\varphi'_x(x,y)=0$$

$$f'_y=ƒ'_y(x,y)+\lambda\varphi'_y(x,y)=0$$

$$f'_=\varphi(x,y)=0$$

由上述方程組解出$x$,$y$及$\lambda$,如此求得的$(x,y)$,就是函式$z=ƒ(x,y)$在條件$\varphi(x,y)=0$下的可能極值點。

線性分類器 Fisher線性判別

我們知道,基於樣本直接設計分類器需要三個基本要素 判別函式型別 分類器設計準則 尋優演算法。這裡我們討論的線性判別函式型別為 g x w tx w 0 採用不同的準則和不同的尋優演算法就會得到不同的線性分類器。一 線性判別函式 剛才我們說了,線性分類器的判別函式型是線性判別函式 g x w tx w...

Fisher 線性分類器 轉

fisher 線性分類器由r.a.fisher在1936年提出,至今都有很大的研究意義,下面介紹fisher分類器的fisher準則函式 fisher準則函式 在模式識別的分類演算法中,大概可以分為兩類,一種是基於貝葉斯理論的分類器,該型別分類器也稱為引數判別方法,根據是基於貝葉斯理論的分類器必須根...

Fisher線性判別

我們知道,基於樣本直接設計分類器需要三個基本要素 判別函式型別 分類器設計準則 尋優演算法。這裡我們討論的線性判別函式型別為 g x w tx w 0 採用不同的準則和不同的尋優演算法就會得到不同的線性分類器。一 線性判別函式 剛才我們說了,線性分類器的判別函式型是線性判別函式 g x wtx w0...