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
非常感謝
您不應該先將您的整個數據進行PCA處理,然後使用新的減少的數據來訓練您的GMM分類器嗎? –