您當前的位置:首頁 > 書法

(三)K-L變換及其python實現

作者:由 王振慶 發表于 書法時間:2019-11-01

關於特徵選擇和提取

特徵選擇和提取是構造模式識別系統時的一個重要課題。在很多實際問題中,往往不容易找到那些最重要的特徵,或受客觀條件的限制,不能對它們進行有效的測量。因此在測量時,由於人們心理上的作用,只要條件許可總希望把特徵取得多一些。另外,由於客觀上的需要,為了突出某些有用資訊,抑制無用資訊,有意加上一些比值、指數或對數等組合計算特徵;如果將數目很多的測量值

不做分析,全部直接用作分類特徵,不但耗時,而且會影響到分類的效果

,產生“

特徵維數災難

”問題。在遙感影象分割上則體現在影象的多個光譜資訊,諸如植被指數、水體指數、建築物指數等各種建模指數。

為了設計出效果好的分類器,通常需要對原始的測量值集合進行分析,

經過選擇或變換處理

,組成有效的識別特徵。在保證一定分類精度的前提下,減少特徵維數,即進行“降維”處理,使分類器實現快速、準確和高效的分類。為達到上述目的,關鍵是所提供的識別特徵應具有很好的可分性,使分類器容易判別。為此,需對特徵進行選擇:應去掉模稜兩可、不易判別的特徵;所提供的特徵不要重複,即去掉那些相關性強且沒有增加更多分類資訊的特徵。

K-L變換

K-L變換(Karhunen-Loeve變換)屬於上述中的變換處理,將原來的特徵做正交變換,獲得的每個資料都是原來n個數據的線性組合,然後從新的資料中選出少數幾個,使其儘可能多地反映各類模式之間的差異,而這些特徵間又儘可能相互獨立,則比單純的選擇方法更靈活、更有效。

K-L變換是一種適用於任意機率密度函式的正交變換

在將整體模式進行K-L變換之前,應先將其均值作為新座標軸的原點,採用協方差矩陣C或自相關矩陣R來計算特徵值。

K-L變換的步驟:

求取協方差矩陣

求取協方差矩陣的特徵值、特徵向量

對特徵值從大到小排序,取前m個對應的特徵向量進行變換

例子:

•設有如下兩類樣本集,其出現的機率相等:

\omega_1 =\{(0,0,0)^{T},(1,0,0)^{T},(1,0,1)^{T},(1,1,0)^{T}\}

\omega_2 =\{(0,0,1)^{T},(0,1,0)^{T},(0,1,1)^{T},(1,1,1)^{T}\}

用K-L變換,分別把特徵空間維數降到二維和一維。

解題程式碼如下:

import

numpy

as

np

omega_1

=

np

array

([[

0

0

0

],[

1

0

0

],[

1

0

1

],[

1

1

0

]])

T

omega_2

=

np

array

([[

0

0

1

],[

0

1

0

],[

0

1

1

],[

1

1

1

]])

T

# 將Omega_1和Omega_2兩種模式作為一個整體考慮

x

=

np

concatenate

((

omega_1

omega_2

),

axis

=

1

# 求取均值(寫作業要用到)

m

=

np

mean

x

axis

=

1

# 求取協方差矩陣

C

=

np

cov

x

bias

=

True

# 求取協方差矩陣的特徵值、特徵向量

lamda

phi

=

np

linalg

eig

C

# 對特徵值從大到小排序

sort_lamda

=

-

np

sort

-

lamda

# 從大到小排序,輸出原始序列的索引

sort_index

=

np

argsort

-

lamda

# 降到2維,從大到小選取前2個特徵向量

Selected_phi2

=

np

concatenate

((

phi

[:,

sort_index

0

]]

reshape

3

1

),

phi

[:,

sort_index

1

]]

reshape

3

1

)),

axis

=

1

omega_1_tra2

=

np

dot

Selected_phi2

T

omega_1

omega_2_tra2

=

np

dot

Selected_phi2

T

omega_2

print

‘omega_1_tra2:’

omega_1_tra2

print

‘omega_2_tra2:’

omega_2_tra2

# 降到1維,從大到小選取前1個特徵向量

Selected_phi1

=

phi

[:,

sort_index

0

]]

reshape

3

1

omega_1_tra1

=

np

dot

Selected_phi1

T

omega_1

omega_2_tra1

=

np

dot

Selected_phi1

T

omega_2

print

‘omega_1_tra1:’

omega_1_tra1

print

‘omega_2_tra1:’

omega_2_tra1

後記

如有問題,歡迎交流批評指正。

標簽: omega  np  特徵  Sort  SELECTED