Scikit-learn pipeline执行fit_transform返回全零列表问题求解
问题根源
- 你调用
fit_transform()时仅传入1条样本作为训练集,StandardScaler的计算规则为*(原值 - 对应特征的训练集均值) / 对应特征的训练集标准差*:- 单样本训练场景下,每个特征的训练集均值就是该特征在这条样本上的取值,
原值 - 特征均值直接等于0 - 单样本训练场景下每个特征的训练集标准差为0,scikit-learn会自动将标准差为0的特征的分母替换为1避免报错,最终计算结果就会全为0
- 单样本训练场景下,每个特征的训练集均值就是该特征在这条样本上的取值,
- 你期望的输出,是基于完整训练集拟合得到的pipeline对这条单样本做变换的结果,而非用单样本自己拟合自己再做变换的结果。
解决方法
- 先使用完整的训练数据集拟合pipeline,不要用待预测的单样本做拟合:
# full_train为你的完整训练集,形状为(总训练样本数, 13) my_pipeline.fit(full_train)
- 拟合完成后调用
transform()方法处理待预测的单条样本,即可得到预期输出:
getting = my_pipeline.transform(real)
内容的提问来源于stack exchange,提问作者puranjan
相关产品推荐
相关产品推荐

