【问题标题】:Bad input shape while applying fit_transform in LDA在 LDA 中应用 fit_transform 时输入形状错误
【发布时间】:2019-08-16 09:41:35
【问题描述】:

当我尝试应用它输出的 LDA 的 fit_transform() 方法时,我已经在我的数据集上应用了 get_dummies() 方法,之后为了训练和测试目的拆分数据集:

ValueError: bad input shape (26905, 8)

我做错了什么?我不确定问题是由于get_dummies() 方法还是我缺少的其他任何东西

# Sample Code


df = pd.read_csv('/Users/rushirajparmar/Downloads/Problem 16 (1)/Problem 16/Problem 16/train_file.csv')


df.drop(['UsageClass','CheckoutType','CheckoutYear','CheckoutMonth'],axis = 1,inplace = True)


Y=pd.get_dummies(df,columns = ['MaterialType'])
X=pd.get_dummies(df,columns = ['Title','Creator','Subjects','Publisher','PublicationYear'])


X.drop(['MaterialType'],axis = 1,inplace = True)


Y.drop(['ID','Checkouts','Title','Creator','Subjects','Publisher','PublicationYear'],axis = 1,inplace = True)

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size = 0.15)


from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)


from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA
lda = LDA(n_components = 1)
X_train = lda.fit_transform(X_train, y_train)
X_test = lda.transform(X_test)

数据集:

这里是train_file.csv 供参考

【问题讨论】:

    标签: machine-learning scikit-learn lda


    【解决方案1】:

    您不必对目标变量应用 get_dummies。您可以直接将多类标签提供给LDA

    From Documentation:

    fit_transform(X, y=None, **fit_params)

    适合数据,然后 转换它。

    使用可选参数 fit_params 和 返回 X 的转换版本。

    参数:
    X : numpy array of shape [n_samples, n_features] Training 设置。

    y : numpy 形状数组 [n_samples] 目标值。

    返回: X_new : numpy 形状数组 [n_samples, n_features_new] 转换后的数组。

    因此,您的y 必须是一维的。

    X_train, X_test, y_train, y_test = train_test_split(X, df['MaterialType'], test_size = 0.15)
    
    lda = LDA(n_components = 1)
    X_train = lda.fit_transform(X_train, y_train)
    

    【讨论】:

    • Minot 修复 - 不仅仅是lda.fit_transform(X_train, df['MaterialType']),您应该使用X_train, X_test, y_train, y_test = train_test_split(X, df['MaterialType'], test_size = 0.15) 来获得正确数量的样本。毕竟,MemoryError 可能是因为X 的巨大形状而存在的
    • @AI_Learning 感谢您的解释!我确信这是我所犯的错误,但无论如何我无法在我的 PC 上或在 Google Colab 上使用 GPU 运行它,我遇到内存错误并且我的会话崩溃。
    • @AI_Learning 是否有进一步优化的可能性,以便我可以运行此代码而不会出现内存错误?
    • 我建议将此作为单独的问题提出,并提供有关列数、行数、每个变量中的类别数等的更多详细信息。
    猜你喜欢
    • 2020-12-16
    • 1970-01-01
    • 1970-01-01
    • 2017-10-15
    • 1970-01-01
    • 1970-01-01
    • 2019-05-11
    • 2023-03-28
    • 2021-04-08
    相关资源
    最近更新 更多