【发布时间】:2018-08-24 22:47:14
【问题描述】:
我正在使用 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() 创建了四组数据,我打算将它们用于拟合/转换到管道。
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,)
所以,我将我的数据分成适当的小节进行测试和训练。然后我创建我的管道,它使用TfidfVectorizer、SelectKBest 和LinearSVC,如下所示:
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]
完整的 Traceback 可以查看here。
【问题讨论】:
-
您确定使用正确的数据来打印形状并传递相同的数据。此外,即使您解决了这个错误,LinearSVC 也没有任何
transform()方法。所以在管道上调用fit_transform()会尝试使用LinearSVC的invoke transform()方法,你会得到一个错误。 -
感谢您的评论。我不确定,我之前使用的是备用
train_test_split(),如图所示:X_train, X_test, y_train, y_test = train_test_split(df['cleaned'].tolist(), df['Year'], test_size=0.25),尽管缺乏完成让我相信它会导致MemoryError,即它似乎“永远”运行。我要出去一会儿,但会在此期间继续运行该过程。 -
大约 2 小时后我回来了,发现该进程仍在运行并占用了大量系统的 RAM(近 6GB),这次我将在没有 LinearSVC 的情况下尝试并更新你之后。只是为了澄清一下,我正在使用上述评论中所示的替代
train_test_split()方法,而不是我原来的问题中的那个。干杯。
标签: python pandas scikit-learn vectorization tf-idf