我已经从这个URL导入了数据集到pandas数据框中,命名为df:https://www.kaggle.com/jakeshbohaju/brain-tumor?select=Brain+Tumor.csv
但是,在运行线性判别分析时,我总是得到下面的错误。
from sklearn.discriminant_analysis import LinearDiscriminantAnalysisX = 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)# 可以使用: lda.fit_transform(X, y)X_r2 = lda.fit_transform(X, y)## 推荐的方式# 或者, 使用: lda.fit(X, y)# 接着使用 lda.transform(X)lda.fit(X, y)X_r2 = lda.transform(X)