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

Sklearn自定义转换器未生成转换后数据集问题求助

问题分析与解决方案

你的自定义转换器逻辑本身没问题,但没有把转换结果存下来——pandas的操作默认返回新的DataFrame,不会直接修改原data变量。

核心修正步骤

只需要把fit_transform的结果赋值给变量即可:

scale_log = Scale_log()
# 把转换后的数据存到新变量,或者直接覆盖原数据
transformed_data = scale_log.fit_transform(data)
# 如果要替换原数据集,就写 data = scale_log.fit_transform(data)

额外优化建议

  • 用矢量化运算代替apply:apply是逐列遍历,速度较慢,直接用numpy的矢量化操作效率更高:
    class Scale_log(BaseEstimator, TransformerMixin):
        def fit(self, X, y=None):
            return self
        def transform(self, X, y=None):
            # 直接对整个DataFrame做矢量化运算
            return np.log(1 + X)
    
  • 添加数据校验:避免非数值型数据或无效值导致报错:
    class Scale_log(BaseEstimator, TransformerMixin):
        def fit(self, X, y=None):
            return self
        def transform(self, X, y=None):
            # 检查是否所有特征都是数值型
            if not np.issubdtype(X.dtypes, np.number).all():
                raise ValueError("所有特征必须是数值类型")
            # 检查是否存在会导致log无意义的数值(x < -1时1+x为负)
            if (X < -1).any().any():
                raise ValueError("数据中存在小于-1的数值,无法计算log(1+x)")
            return np.log(1 + X)
    

内容的提问来源于stack exchange,提问作者Joao Gabriel Rodrigues Reis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 11:50:18