我不明白如何使用LDA来减少维数。
我有一个75x65矩阵,有64个功能,1列用于类索引。可以找到此矩阵here。
我正在尝试使用LDA来降低维度,使用sklearn中的this function。
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来降低维数,哪种方法是正确的?