1. 程式人生 > >特徵提取方法

特徵提取方法

潛在語義索引

潛在語義索引(Latent Semantic Indexing,以下簡稱LSI),也叫Latent Semantic Analysis ,簡稱LSA。本文中稱為LSI。LSI是一種主題模型,他是利用SVD奇異值分解方法來獲得文字的主題的。奇異值分解詳見點選開啟連結

LSI方法可以用作特徵降維、文字相似度計算等。

優缺點:

(1)SVD是非常耗時的,主題模型非負矩陣分解(NMF)可以很好的解決該問題;

(2)主題值的選取對結果有較大的影響,很難選擇適合的k值。層次狄利克雷過程(HDP)可以自動選擇主題個數;

(3)LSI得到的不是一個概率模型,缺乏統計基礎,結果難以解釋。PLSA和LDA是基於概率分佈的主題模型來代替基於矩陣分解的主題模型。

主成分分析

主成分分析(Principal Component Analysis,PCA), 是一種統計方法。通過正交變換將一組可能存在相關性的變數轉換為一組線性不相關的變數,轉換後的這組變數叫主成分。

在用統計分析方法研究多變數的課題時,變數個數太多就會增加課題的複雜性。人們自然希望變數個數較少而得到的資訊較多。在很多情形,變數之間是有一定的相關關係的,當兩個變數之間有一定相關關係時,可以解釋為這兩個變數反映此課題的資訊有一定的重疊。主成分分析是對於原先提出的所有變數,將重複的變數(關係緊密的變數)刪去多餘,建立儘可能少的新變數,使得這些新變數是兩兩不相關的,而且這些新變數在反映課題的資訊方面儘可能保持原有的資訊。

設法將原來變數重新組合成一組新的互相無關的幾個綜合變數,同時根據實際需要從中可以取出幾個較少的綜合變數儘可能多地反映原來變數的資訊的統計方法叫做主成分分析或稱主分量分析,也是數學上用來降維的一種方法。

計算流程如下:

(1)對樣本生成特徵向量矩陣

(2)先計算每一列特徵的平均值,然後每一維度都需要減去該列的特徵平均值

(3)計算特徵的協方差矩陣(為什麼是協方差矩陣呢?)

(4)針對協方差矩陣進行特徵值和特徵向量的計算

(5)對計算得到的特徵值進行從大到小的排序

(6)取出前K個特徵向量和特徵值,並進行回退,即得到了降維後的特徵矩陣

例子

設資料集為,表中x、y、z表示有3個特徵詞,一共10個樣本。


(1)求出每個特徵詞的平均值。


(2)減去平均值後的特徵值


(3)計算協方差矩陣(協方差矩陣分為2種,一個是樣本間的,一個是特徵間的)


(4)計算特徵值和特徵向量



(5)將特徵值按從大到小的順序進行排序,選擇其中最大的k個,然後將其對應的k個特徵向量分別作為列向量組成特徵向量矩陣。

這裡的特徵向量有3個,我們選擇其中2個,第一個和第三個特徵值。

最後得到降維後的矩陣為

*=

這樣就得到了原始樣本的2維特徵向量空間。

Python程式碼:

from numpy import * 
from numpy.linalg import *

x = []
for i in range(0,10):
temp = []
for j in range(0,3):
w = random.randint(1,20)
temp.append(w)
x.append(temp)
print(x)
w1 = 0.0
w2 = 0.0
w3 = 0.0
for i in range(0,3):
for j in range(0,10):
if (i==0):
w1 += x[j][0]
if (i==1):
w2 += x[j][1]
if (i==2):
w3 += x[j][2]
w1 = w1/10.0
w2 = w2/10.0
w3 = w3/10.0
for i in range(0,3):
for j in range(0,10):
if (i==0):
x[j][0] -= w1
if (i==1):
x[j][1] -= w2
if (i==2):
x[j][2] -= w3
x = array(x)
c = print(cov(x.T))
x = array([
[20.6222,14.4222,10.8667],
[14.4222,25.2111,14.3778],
[10.8667,14.3778,27.1556]
])
print(eig(x))

線性判別分析

       在自然語言處理領域, LDA是隱含狄利克雷分佈(Latent Dirichlet Allocation,簡稱LDA),他是一種處理文件的主題模型。我們本文只討論線性判別分析,因此後面所有的LDA均指線性判別分析。

LDA是一種監督學習的降維技術,而PCA是無監督的降維技術,LDA是在降維的基礎上考慮了類別的因素,希望得到的投影類內方差最小,類與類之間的方差最大。

該方法的詳細介紹以及LDA和PCA的區別詳見最後一個參考文獻,這裡就不在重複了

附:

python 中log2計算方法

def log2(num):

return log(num)/log(2);


參考文獻

基於主成分分析的人臉特徵提取

核函式主成分分析在糧蟲特徵提取中的應用

https://blog.csdn.net/u014755493/article/details/69950744

https://baike.baidu.com/item/%E4%B8%BB%E6%88%90%E5%88%86%E5%88%86%E6%9E%90/829840?fr=aladdin

深度學習

https://blog.csdn.net/ych1035235541/article/details/50974983

https://blog.csdn.net/sunhuaqiang1/article/details/69396401

https://www.cnblogs.com/pinard/p/6805861.html

https://www.cnblogs.com/pinard/p/6244265.html