您可以使用 LDA(线性判别分析)作为 sklearn 管道的一部分进行预处理吗?

Posted

技术标签:

【中文标题】您可以使用 LDA(线性判别分析)作为 sklearn 管道的一部分进行预处理吗?【英文标题】:Can you use LDA (Linear Discriminant Analysis) as part of sklearn pipeline for preprocessing? 【发布时间】:2022-01-10 04:23:57 【问题描述】:

所以这就是我将数据通过方差阈值运行以进行特征选择,然后通过归一化器和 LDA 进行降维的汇总。

我不太确定 LDA 元素,因为我找不到在管道中使用此元素的任何示例(作为降维/数据转换技术,而不是独立的分类器。)

我有点担心,因为当使用它并将转换后的数据传递给一系列分类器时 - 它们会产生一系列相同的准确度、精确度、召回率和 F1 分数。只有 AdaBoost 的应用才能带来不同的东西。

我在这里做错了吗?

pipeline = Pipeline([
    ('feature_selection', VarianceThreshold()),
    ('normaliser', Normalizer()),
    ('lda', LinearDiscriminantAnalysis())], verbose = True)


X_train_post_pipeline = pipeline.fit_transform(X_train, Y_train)
X_test_post_pipeline = pipeline.transform(X_test)

【问题讨论】:

【参考方案1】:

LinearDiscriminantAnalysis 是一种降维技术,可以与PCA 进行比较。因此它可以在管道中用作预处理。

使用其结果的分类器最终可能得到与 LDA 项目输入到最具辨别力的方向相同的分数。

以下是使用 LDA 作为预处理步骤的管道示例:

from sklearn.pipeline import make_pipeline
from sklearn.feature_selection import VarianceThreshold
from sklearn.preprocessing import Normalizer
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression


X, y = make_classification(n_classes=2)

pipe = make_pipeline(VarianceThreshold(),
                     Normalizer(),
                     LinearDiscriminantAnalysis(),
                     LogisticRegression())

pipe.fit(X, y)

【讨论】:

以上是关于您可以使用 LDA(线性判别分析)作为 sklearn 管道的一部分进行预处理吗?的主要内容,如果未能解决你的问题,请参考以下文章

R语言线性判别分析(LDA),二次判别分析(QDA)和正则判别分析(RDA)

线性判别分析(LDA)

线性判别分析LDA算法——

降维方法-LDA线性判别分析

线性判别分析LDA的核心思想LDA的数学形式LDA的优缺点

降维技术2-线性判别分析(LDA)