You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何处理Transformer计算需用但训练数据不应包含的列及相关报错?

解决自定义Transformer依赖列的处理问题

首先,你遇到的ValueError: A given column is not a column of the dataframe报错,本质是ColumnTransformer指定的列在X_train中不存在,先排查以下两点:

  • 核对X_train的列名,确保包含所有在transformer中指定的列(比如time_window、short_window等),注意拼写和大小写是否一致;
  • 确认这些列确实存在于你的训练数据集里,没有被提前误删除。

针对你核心需求——Transformer计算需要用到某些列,但这些列最终不能出现在传给分类器的特征中,可以通过以下两步解决:

1. 自定义Transformer仅输出新生成的特征

你的自定义Transformer必须继承sklearn.base.BaseEstimator和TransformerMixin,并且在transform方法中只返回计算得到的新特征,而不是原始输入列。这样ColumnTransformer只会把新特征拼接到最终特征集里,原始计算列不会被保留。

举个ProbabilityEstimator的正确实现示例:

from sklearn.base import BaseEstimator, TransformerMixin

class ProbabilityEstimator(BaseEstimator, TransformerMixin):
    def fit(self, X, y=None):
        # 这里可以添加拟合逻辑(比如计算统计量)
        return self
    
    def transform(self, X):
        # 基于输入列计算新特征(示例:通过率)
        pass_rate = X['total_pass'] / (X['total_pass'] + X['total_fail'])
        # 返回二维数组(sklearn要求输出必须是2D格式)
        return pass_rate.values.reshape(-1, 1)

同理修改ContactSiteEstimator,确保transform方法仅输出你需要的新特征,而非原始输入列。

2. 利用ColumnTransformer的默认行为丢弃无关列

ColumnTransformer默认参数remainder='drop',所有未被指定在transformers列表中的列都会被自动丢弃。只要你的自定义Transformer只输出新特征,OneHotEncoder处理指定列后输出编码特征,最终传给LogisticRegression的特征就只会是这些新生成的特征,完全不会包含那些用于计算的原始列。

验证修改后的Pipeline

调整后的代码结构可以保持不变,只要确保Transformer的输出正确,X_train包含所需列,就能正常运行:

custom_transformers = ColumnTransformer([
('probability_estimator', ProbabilityEstimator(), ['softbin_first_test', 'time_window', 'total_pass', 'total_fail']),
('contact_site_estimator', ContactSiteEstimator(), ['tester_id', 'site_number', 'short_window']),
('onehotencoder', OneHotEncoder(), ['softbin_first_test', 'bincode_type_last_retest'])])

classifier = LogisticRegression()
pipeline = Pipeline(steps=[
('custom_transformers', custom_transformers),
('classifier', classifier)
])
pipeline.fit(X_train, y_train)

内容的提问来源于stack exchange,提问作者Abir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 23:45:21