【发布时间】:2017-03-11 03:38:26
【问题描述】:
我不明白如何仅将 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进行降维,那哪种方式是正确的?
【问题讨论】:
标签: python scikit-learn lda dimensionality-reduction