[英]ValueError: n_components=4 must be between 0 and min(n_samples, n_features)=2 with svd_solver='full'
[英]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.