繁体   English   中英

n_components 不能大于 min(n_features, n_classes - 1)。 在执行 LDA 时

[英]n_components cannot be larger than min(n_features, n_classes - 1). while performing LDA

from sklearn.preprocessing import LabelEncoder
class_le = LabelEncoder()
y = class_le.fit_transform(data['10'].values)

from sklearn.preprocessing import StandardScaler
stdsc = StandardScaler()
X_train_std = stdsc.fit_transform(data.iloc[:,range(int(0),int(10))].values) 

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
lda = LinearDiscriminantAnalysis(n_components=2)
X_train_lda = lda.fit_transform(X_train_std, y)

即使我更改数据集它显示相同的错误,这也是错误。 我的数据集包含 9 个属性+类。 如果我给出 n_components=1,如果我给出任何其他数字,它就会显示错误。

ValueError                                Traceback (most recent call last)
<ipython-input-8-b53ad0e7c804> in <module>()
      1 from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
      2 lda = LinearDiscriminantAnalysis(n_components=2)
----> 3 X_train_lda = lda.fit_transform(X_train_std, y)

1 frames
/usr/local/lib/python3.7/dist-packages/sklearn/discriminant_analysis.py in fit(self, X, y)
    575             if self.n_components > max_components:
    576                 raise ValueError(
--> 577                     "n_components cannot be larger than min(n_features, n_classes - 1"
    578                 )
    579             self._max_components = self.n_components

ValueError: n_components cannot be larger than min(n_features, n_classes - 1).

根据您的错误n_components cannot be larger than min(n_features, n_classes - 1) ,您的标签很可能仅包含两个类,因此最大组件数只能是 2-1 = 1。我的猜测是您可能有把它误认为是一种降维方法,就像这篇文章一样。

您可以查看这篇文章以获得更理论的解释,以及sebastianraschka 的这篇博客文章中的步骤的详细解释:

在 LDA 中,线性判别式的数量最多为 c-1,其中 c 是 class 标签的数量,因为中间散布矩阵 SB 是 Z4A8A08F09D37B74 或更少秩的总和。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM