2016-10-28 69 views
1

我不知道如何使用LDA只是降維。我應該比降維整個數據集進行線性判別分析?

我有64層的功能和爲類索引1列中的75x65矩陣。這個矩陣可以找到here

我試圖使用LDA降維,使用this function從sklearn。

def classify(featureMatrix): 
    X, y = featureMatrix[:, :63], featureMatrix[: ,64] 
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20) 
    lda = LinearDiscriminantAnalysis(n_components=2) 
    rf = RandomForestClassifier(n_estimators=10, criterion="gini", max_depth=20) 

    X_train = lda.fit_transform(X_train, y_train) 
    X_test = lda.transform(X_test) 

    rf.fit(X_train, y_train) 
    print rf.score(X_test, y_test) 

但是,我的分類評分通常很低(20-30%)。這個問題似乎是在我轉換測試數據時。

例如,當我在降維後繪製X_train我:

enter image description here

具有良好的類分離。

但是,當我轉換測試集和情節X_test,我有這樣的:

enter image description here

它沒有明顯的模式,遠不是我們可以在我們的訓練數據集看。

我推測,這可能是一個小的數據集(僅75個樣本均勻分佈在5類)的結果,但這個數據是真的很難不幸聚集。

我已經從不同的地方讀過使用LDA在所有數據集上試圖在訓練/測試集中分離數據集並將它與另一個分類器分類之前(這種方法我可以實現小於10%的誤差),但我也聽到很多人說我應該用我在代碼中提到的方式。如果我只使用LDA進行降維,哪種方法是正確的?在此基礎上壯觀的repository/book

回答

0

你應該適合LDA在訓練數據集,然後變換訓練和使用較小的前裝有測試數據集。