选择的 LDA 意外数量的功能

LDA unexpected number of features selected

我正在尝试执行 LDA(线性判别分析)以便对我的数据集(features,一个 1360x532 矩阵)执行降维(从 532 个特征)。

lda = LinearDiscriminantAnalysis(n_components=80)
features = lda.fit(features, target).transform(features)
print("[STATUS] LDA performed")
print("[STATUS] feature vector size {}".format(np.array(features).shape))

我写了这段代码,我期待这些功能变成 80,但我得到了这个意外的输出。

[STATUS] target labels shape: (1360,)
/home/robb/.local/lib/python2.7/site-packages/sklearn/discriminant_analysis.py:388: UserWarning: Variables are collinear.
  warnings.warn("Variables are collinear.")
[STATUS] LDA performed
[STATUS] feature vector size (1360, 16)

为什么16?它与我收到的警告有某种关系吗?

LDA 的行为与您预期的不同。

组件的数量 总是 小于唯一的 classes 的数量。

来自docs:

Number of components (< n_classes - 1) for dimensionality reduction.


我的猜测是您在 target 变量中有 17 个唯一的 class 标签,因此,通过指定 80 个组件(大于 17)会导致此结果。