Я не понимаю, как использовать LDA только для уменьшения размерности.Должен ли я выполнять линейный дискриминантный анализ по всему набору данных для уменьшения размерности?
У меня есть матрица 75x65 с 64 функциями и 1 столбец для индекса класса. Эта матрица может быть найдена 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 после снижения размерности у меня есть:
Который имеет хорошее разделение класса.
Но когда я преобразовать тестовый набор и сюжет X_test, у меня есть это:
Который не имеет видимый образца и далеко от того, что мы могли видеть в нашем учебном наборе данных.
Я полагаю, что это может быть результатом небольшого набора данных (всего 75 образцов, равномерно распределенных в 5 классах), но этих данных действительно сложно собрать, к сожалению.
Я читал из разных мест людей, использующих LDA по всему набору данных, прежде чем пытаться отделить набор данных на обучающих/тестовых наборах и классифицировать его с помощью другого классификатора (таким образом, я мог бы достичь менее 10% ошибки), но Я также слышал, как многие люди говорили, что я должен использовать то, как я упоминал в коде. Если я использую только LDA для уменьшения размерности, какой путь правильный?