如何在 sklearn 中修复这个自定义转换器?
Posted
技术标签:
【中文标题】如何在 sklearn 中修复这个自定义转换器?【英文标题】:How to fix this custom transformer in sklearn? 【发布时间】:2019-05-23 07:59:45 【问题描述】:我编写了这个简单的自定义转换器,它用 0 填充特定列中的 na。当我在我的数据集上 fit_transform 时,它不会在指定列中填充 nas。我没有在我的代码中看到问题。
class CustomImputer(BaseEstimator, TransformerMixin):
def fit(self, X, y=None):
return self
def transform(self, X, y=None):
for col in ('PavedDrive', 'GarageQual', 'GarageFinish', 'FireplaceQu', 'KitchenQual', 'CentralAir', 'HeatingQC', 'BsmtExposure', 'BsmtCond', 'BsmtQual', 'ExterCond', 'ExterQual', 'Street'):
X[col].fillna(0)
return X
我希望返回的数据框是指定列已用 0 填充 nas 的数据框,但是,我得到了一个具有相同空值的数据框。
【问题讨论】:
现在您明白正确缩进代码的重要性了。它只会导致混乱 你是对的...... 【参考方案1】:您从未将fillna
操作分配给新变量。使用
X[col].fillna(0)
不会原地发生。而是使用:
X.loc[:,col] = X[col].fillna(0)
【讨论】:
【参考方案2】:一个班轮解决方案是
cols = ['PavedDrive', 'GarageQual', 'GarageFinish', 'FireplaceQu', 'KitchenQual', 'CentralAir', 'HeatingQC', 'BsmtExposure', 'BsmtCond', 'BsmtQual', 'ExterCond', 'ExterQual', 'Street']
X.loc[:,cols] = X[cols].fillna(0)
【讨论】:
以上是关于如何在 sklearn 中修复这个自定义转换器?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 sklearn 中编写自定义估算器并对其使用交叉验证?
如何在sklearn中使用make_scorer自定义评分功能
管道中的自定义 sklearn 转换器为 cross_validate 抛出 IndexError 但在使用 GridSearchCV 时不会