python - fit_transform() 需要 2 个位置参数,但 3 个是通过 LabelBinarizer 给出的

标签 python scikit-learn data-science

我对机器学习完全陌生,并且一直在使用无监督学习技术。

图像显示了我的示例数据(全部清洁后)屏幕截图: Sample Data

我构建了这两条管道来清理数据:

num_attribs = list(housing_num)
cat_attribs = ["ocean_proximity"]

print(type(num_attribs))

num_pipeline = Pipeline([
    ('selector', DataFrameSelector(num_attribs)),
    ('imputer', Imputer(strategy="median")),
    ('attribs_adder', CombinedAttributesAdder()),
    ('std_scaler', StandardScaler()),
])

cat_pipeline = Pipeline([
    ('selector', DataFrameSelector(cat_attribs)),
    ('label_binarizer', LabelBinarizer())
])

然后我将这两个管道合并起来,其代码如下所示:

from sklearn.pipeline import FeatureUnion

full_pipeline = FeatureUnion(transformer_list=[
        ("num_pipeline", num_pipeline),
        ("cat_pipeline", cat_pipeline),
    ])

现在我正在尝试对 Data 进行 fit_transform但它向我展示了错误。

转换代码:

housing_prepared = full_pipeline.fit_transform(housing)
housing_prepared

错误消息:

fit_transform() takes 2 positional arguments but 3 were given

最佳答案

问题:

管道假设 LabelBinarizer 的 fit_transform 方法定义为采用三个位置参数:

def fit_transform(self, x, y)
    ...rest of the code

虽然它被定义为只需要两个:

def fit_transform(self, x):
    ...rest of the code

可能的解决方案:

这可以通过制作一个可以处理 3 个位置参数的自定义转换器来解决:

  1. 导入并创建一个新类:

    from sklearn.base import TransformerMixin #gives fit_transform method for free
    class MyLabelBinarizer(TransformerMixin):
        def __init__(self, *args, **kwargs):
            self.encoder = LabelBinarizer(*args, **kwargs)
        def fit(self, x, y=0):
            self.encoder.fit(x)
            return self
        def transform(self, x, y=0):
            return self.encoder.transform(x)
    
  2. 仅保持代码相同,而不是使用 LabelBinarizer(),而是使用我们创建的类:MyLabelBinarizer()。

<小时/> 注意:如果您想访问 LabelBinarizer 属性(例如,classes_),请将以下行添加到 fit 方法中:

    self.classes_, self.y_type_, self.sparse_input_ = self.encoder.classes_, self.encoder.y_type_, self.encoder.sparse_input_

关于python - fit_transform() 需要 2 个位置参数,但 3 个是通过 LabelBinarizer 给出的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46162855/

相关文章:

python - 在 Apache Cassandra 中混合执行两个 Python 脚本和 DatastaxBulk 加载器脚本以加载到 .csv

python - 获取 3D 空间中某个点的 26 个最近邻点 - 矢量化

python - 机器学习多标签目标是一系列概率

python - 在Python中使用sklearn计算变量n-grams的TF-IDF

python - 如何在 PyCharm 中获得与 RStudio 类似的功能

python - 避免在 Python 的默认参数中重复代码

python - Firebird版本和返回值

python - sklearn 未知标签类型

python - 无法将 Pandas 数据框保存到csv

python - 使用 XGBoost 进行超参数网格搜索 - 评分函数与评估指标