试图' Fit_Transform()' DataFrame导致"输入变量与样本数量不一致"错误

时间:2018-03-15 23:43:47

标签: python pandas scikit-learn vectorization tf-idf

我正在使用pandas.read_csv()将两列.csv文件读入Pandas数据框。 Dataframe的负责人如下所示:

        Year    cleaned
    0   1909    acquaint hous receiv follow letter clerk crown...
    1   1909    ask secretari state war whether issu statement...
    2   1909    i beg present petit sign upward motor car driv...
    3   1909    i desir ask secretari state war second lieuten...
    4   1909    ask secretari state war whether would introduc...

在此之后,我调用df.dropna(inplace=True)(感谢Brad Solomon)以允许即将到来的适合/转换调用继续进行,而不会产生' MemoryError'如我之前的问题here所示。

既然我有一个对内存友好的Dataframe形式,我使用SKLearn' train_test_split()创建了四组数据,我打算用它来拟合/转换为Pipeline。

X_train, X_test, y_train, y_test = train_test_split(df, df['Year'], test_size=0.25)

这些变量的形状为:

[IN] X_train.shape [OUT] (1785, 2)
[IN] X_test.shape  [OUT] (595, 2)
[IN] y_train.shape [OUT] (1785,)
[IN] y_test.shape  [OUT] (595,)

因此,我将我的数据分成适当的子部分进行测试和培训。然后我创建了我的管道,它使用了TfidfVectorizerSelectKBestLinearSVC,如下所示:

pipeline = Pipeline(
    [('vectorizer', TfidfVectorizer(decode_error='replace', encoding='utf-8', stop_words='english', ngram_range=(1,2), sublinear_tf=True)),
     ('chi2', SelectKBest(chi2, k=1000)),
     ('classifier', LinearSVC(C=1.0, penalty='l1', max_iter=3000, dual=False))
    ])

最后,当我尝试在前面提到的X和y训练数据上调用fit_transform()时,我们遇到了标题中提到的错误

model = pipeline.fit_transform(X_train, y_train)

......反过来会产生错误:

ValueError: Found input variables with inconsistent numbers of samples: [2, 1785]

可以查看完整的回溯here

1 个答案:

答案 0 :(得分:0)

inconsistent numbers of samples: [2, 1785] 似乎表明行和列已在管道中翻转。

尝试:

pipeline.fit_transform(X_train.T,
                       y_train.reshape((1785, 1)))

可能需要reshape y_train查看this similar question并牢记在使用前需要对test_Xtest_y应用相同的转换。< / p>