簡體   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