使用scikit-learn执行LDA降维时出现错误



我已经从这个URL导入了数据集在pandas Dataframe中名为df:https://www.kaggle.com/jakeshbohaju/brain-tumor?select=Brain + Tumor.csv

但是,在进行线性判别分析时,我总是在底部得到错误。

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
X = df.drop(['label','Image'], axis=1)
y = df[['label']]
lda = LinearDiscriminantAnalysis(n_components=2)
X_r2 = lda.fit(X, y).transform(X)

错误:

ValueError                                Traceback (most recent call last) <ipython-input-41-f7a0f19db224> in <module>
25 lda = LinearDiscriminantAnalysis(n_components=2)
26 lda2 = LinearDiscriminantAnalysis(n_components=2)
---> 27 X_r3 = lda2.fit(X_train,y_train.values.ravel()).transform(X_train)
28 X_r2 = lda.fit(X, y).transform(X)
29 
~/miniforge3/envs/pyM1/lib/python3.8/site-packages/sklearn/discriminant_analysis.py in fit(self, X, y)
537         else:
538             if self.n_components > max_components:
--> 539                 raise ValueError(
540                     "n_components cannot be larger than min(n_features, "
541                     "n_classes - 1)."
ValueError: n_components cannot be larger than min(n_features, n_classes - 1).

解决方案

lda.fit(X, y)不返回任何东西,因此您不能在其上调用名为.transform()的方法。该API将允许您仅在已经定义的情况下调用方法。

改成这个。我也鼓励你在文档上花更多的时间。

lda = LinearDiscriminantAnalysis(n_components=2)
# either use: lda.fit_transform(X, y)
X_r2 = lda.fit_transform(X, y)
## PREFERRED WAY
# or, use: lda.fit(X, y)
# followed by lda.transform(X)
lda.fit(X, y)
X_r2 = lda.transform(X)
引用

  1. LinearDiscriminantAnalysis- Docs

最新更新