【问题标题】:error while performing LDA dimensional reduction with scikit-learn使用 scikit-learn 执行 LDA 降维时出错
【发布时间】:2021-05-18 10:30:42
【问题描述】:

我已从名为 df 的 pandas Dataframe 中的此 URL 导入数据集: 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).

【问题讨论】:

    标签: python pandas machine-learning scikit-learn


    【解决方案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

    【讨论】:

    • 使用您的代码,我仍然会收到此错误消息:/python3.8/site-packages/sklearn/utils/validation.py:63: DataConversionWarning: A column-vector y was passed when a 1d array预料之中。请将 y 的形状更改为 (n_samples, ),例如使用 ravel()。
    • 使用ravel()没有效果,还是报错
    • 这里有一个例子。 scikit-learn.org/stable/modules/generated/…。请先尝试运行它。检查 X、y 和变换后的 X 的形状。然后确保您的Xtrainytrain 也遵循相同的形状。
    • @scapiest 感谢您接受答案。如果对您有帮助,还请考虑投票答案。
    猜你喜欢
    • 2016-12-18
    • 2016-12-29
    • 2012-06-29
    • 2019-04-28
    • 2018-05-26
    • 2013-10-30
    • 2016-02-27
    • 2018-07-21
    • 2018-01-27
    相关资源
    最近更新 更多