我的项目涉及在标题和一些度量之间建立关系。
我依靠 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 错误造成的。或者,如果我错过了一些愚蠢的配置步骤。
有人可以在这里指出我的错误吗?