无法通过断言检查[创建自定义转换器,scikit-learn]

时间:2019-10-08 01:34:30

标签: python pandas machine-learning scikit-learn assertion

提供来自

的数据
%%bash
mkdir data
wget http://dataincubator-wqu.s3.amazonaws.com/mldata/providers-train.csv -nc -P ./ml-data
wget http://dataincubator-wqu.s3.amazonaws.com/mldata/providers-metadata.csv -nc -P ./ml-data

这些上下文: “我们将从DataFrame中包含数字和布尔特征的列开始。一些行包含空值;估计器无法处理空值,因此必须插值或将其丢弃。我们将创建一个包含处理这些特征的转换器的Pipeline,然后由一个估算器。

注意:评分者检查您的答案时,会将字典列表传递给估计器(而不是DataFrame)的predict或predict_proba方法。这意味着您的模型必须同时使用两种数据类型。因此,我们提供了一个自定义的ColumnSelectTransformer,供您使用scikit-learn自己的ColumnTransformer。“

我受命完成以下代码段。 但是我无法通过断言测试。以下是我的尝试:

simple_cols = ['BEDCERT', 'RESTOT', 'INHOSP', 'CCRC_FACIL', 'SFF', 'CHOW_LAST_12MOS', 'SPRINKLER_STATUS', 'EXP_TOTAL', 'ADJ_TOTAL']

class ColumnSelectTransformer(BaseEstimator, TransformerMixin):
    def __init__(self, columns):
        self.columns = columns

    def fit(self, X, y=None):
        return self

    def transform(self, X):
        if not isinstance(X, pd.DataFrame):
            X = pd.DataFrame(X)
        X.dropna(inplace=True)
        return X[self.columns].values()

simple_features = Pipeline([
    ('cst', ColumnSelectTransformer(simple_cols)),
])

完成此断言检查

assert data['RESTOT'].isnull().sum() > 0
assert not np.isnan(simple_features.fit_transform(data)).any()

非常感谢我能提供的任何帮助,谢谢!

1 个答案:

答案 0 :(得分:0)

由于以下原因,我无法通过断言测试:

 return X[self.columns].values()

正确的return语句应该是

return X[self.columns].values