2015-11-05 55 views
1

我面臨一個(可能很簡單)的問題,我必須使用PCA來減少我的特徵向量的維數。所有這一切的主要點是創建一個預測由音素組成的句子的分類器。我用幾小時的句子訓練我的模型(句子只有10個),每個句子都有一個由一組音素組成的標籤(見下文)。PCA應用於MFCC飼養GMM分類器(sklearn庫)

我迄今所做如下:

import mdp 
from sklearn import mixture 
from features import mdcc 

def extract_mfcc(): 
    X_train = [] 
    directory = test_audio_folder 

    # Iterate through each .wav file and extract the mfcc 
    for audio_file in glob.glob(directory): 
     (rate, sig) = wav.read(audio_file) 
     mfcc_feat = mfcc(sig, rate) 

     X_train.append(mfcc_feat) 
    return np.array(X_train) 

def extract_labels(): 
    Y_train = [] 

    # here I have all the labels - each label is a sentence composed by a set of phonemes 
    with open(labels_files) as f: 
     for line in f: # Ex: line = AH0 P IY1 S AH0 V K EY1 K 
      Y_train.append(line) 
     return np.array(Y_train) 

def main(): 
    __X_train = extract_mfcc() 
    Y_train = extract_labels() 

    # Now, according to every paper I read, I need to reduce the dimensionality of my mfcc vector before to feed my gaussian mixture model 

    X_test = [] 
    for feat in __X_train: 
     pca = mdp.pca(feat) 
     X_test.append(pca) 

    n_classes = 10 # I'm trying to predict only 10 sentences (each sentence is composed by the phonemes described above) 
    gmm_classifier = mixture.GMM(n_components=n_classes, covariance_type='full') 
    gmm_classifier.fit(X_train) # error here!reason: each "pca" that I appended before in X_train has a different shape (same number of columns though) 

我怎麼能降維和,在同一時間,爲每個PCA我提取相同的形狀?

我還嘗試了新事物:調用gmm_classifier.fit(...)中的for循環,我得到PCA矢量(見下面的代碼)。函數fit()有效,但我不確定我是否正確地訓練GMM。

n_classes = 10 
gmm_classifier = mixture.GMM(n_components=n_classes, covariance_type='full') 

X_test = [] 
for feat in __X_train: 
    pca = mdp.pca(feat) 
    gmm_classifier.fit(pca) # in this way it works, but I'm not sure if it actually model is trained correctly 

非常感謝

+0

您不應該先將您的整個數據進行PCA處理,然後使用新的減少的數據來訓練您的GMM分類器嗎? –

回答

0

關於你的最後評論/問題: gmm_classifier.fit(PCA)#這樣它的工作原理,但我不知道它實際上模型正確的培訓 無論何時你調用這個,分類器都會忘記以前的信息,只能通過最後的數據進行訓練。嘗試追加循環內的專長,然後適合。