次元削減のためだけにLDAを使用する方法がわかりません。次元削減のためにデータセット全体で線形判別分析を実行する必要がありますか?
私は、クラスインデックスのために64のフィーチャーと1つの列を持つ75x65のマトリックスを持っています。この行列はhereです。
私は、sklearnのthis functionを使用して、次元削減にLDAを使用しようとしています。
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プロット例えば
、。明らかなパターンを持っていないし、私達は私達のトレーニングデータセットで見ることができるものにはほど遠い
:私はテストセットとプロットX_testを変換する際
はしかし、私はこれを持っています。
これは小さなデータセット(5つのクラスに均等に75個のサンプルしかない)の結果である可能性があると仮説を立てていますが、残念ながらこのデータは実際には集められません。
トレーニング/テストセットのデータセットを分離して別の分類子で分類する前に、すべてのデータセットに対してLDAを使用している人から読んだことがあります(この方法でエラーの10%未満を達成できます)。私も、コードで言及した方法を使うべきだと多くの人が言っているのを聞いた。次元削減のためにLDAだけを使用しているのであれば、どちらの方法が正しいですか?