使用scikit-learn进行LDA降维时出错

3
我已经将此URL中的数据集导入到名为df的pandas数据框中: 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).
1个回答

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. 线性判别分析 - 文档

使用您的代码后,我仍然看到以下错误信息:/python3.8/site-packages/sklearn/utils/validation.py:63: DataConversionWarning:传递了一个列向量 y,但是期望的是一个1维数组。请更改 y 的形状为 (n_samples, ),例如使用 ravel() 函数。 - scapiest
使用ravel()没有效果,我仍然得到一个错误。 - scapiest
这里有一个例子: https://scikit-learn.org/stable/modules/generated/sklearn.discriminant_analysis.LinearDiscriminantAnalysis.html。请先尝试运行它。检查X、y和transformed-X的形状。然后确保您的`Xtrain`和`ytrain`也遵循相同的形状。 - CypherX
@scapiest 谢谢您接受了这个答案。如果它对您有帮助,请考虑点赞这个答案。 - CypherX

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接