2

我的项目涉及在标题和一些度量之间建立关系。

我依靠 pandas 和 sklearn 来完成这项工作并摆脱 sklearn-pandas 的困扰,因为我发现 DataFrameMapper 可以方便地处理特征提取步骤,而不是链接大量特征联合。

简而言之,这类似于:

dfm = DataFrameMapper([
    ('title', CountVectorizer()),
    (['width', 'height', 'length', 'weight'], StandardScaler()),
])

然后我想在这样的管道上使用它:

p = make_pipeline(dfm, LinearRegression())

这种看起来应该可以工作。但我知道它不能保持我的特征的“对齐”。

当我尝试像这样训练这个简单的模型时:

data = pd.read_csv("data.csv")  # a couple hundred thousands of records.
train_sample = data[:100000]  # arbitrary sample.
test_sample = data[100000:]  # arbitrary test.
p.fit(train_sample, train_sample['target'])
p.predict(test_sample)

它失败了:

ValueError: shapes (1,7) and (18,) not aligned: 7 (dim 1) != 18 (dim 0)

我知道这是由于训练样本比测试样本“更大”,因此 CountVectorizer 词汇表包含的特征更少。但直观地说,我希望管道(以及其中的 DataFrameMapper)能够填充可能出现的缺失值。

在这一点上,我不知道这是否是由于我使用 DFM 错误造成的。或者,如果我错过了一些愚蠢的配置步骤。

有人可以在这里指出我的错误吗?

4

0 回答 0