【问题标题】:Should I perform Linear Discriminant Analysis over the entire dataset for dimensionality reduction?我应该对整个数据集执行线性判别分析以降低维数吗?
【发布时间】: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


    【解决方案1】:

    基于这个壮观的repository/book,您应该在训练数据集上拟合 LDA,然后使用之前拟合的较小的数据集转换训练和测试数据集。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-30
      • 2013-06-19
      • 2018-02-07
      • 2013-12-10
      • 2018-07-08
      • 2022-06-22
      • 1970-01-01
      • 2015-01-01
      相关资源
      最近更新 更多