【问题标题】:scikit-learn AttributeError in custom transformer自定义转换器中的 scikit-learn AttributeError
【发布时间】:2021-10-25 18:32:38
【问题描述】:

我正在尝试创建一个将列类型从“对象”更改为“类别”的转换器,因此我为此创建了自定义类:

from sklearn.base import BaseEstimator, TransformerMixin

class ChangeToCategory(BaseEstimator, TransformerMixin):
    def __init__(self, to_categories = None):
        self.to_categories_ = to_categories
    def fit(self, X, y=None):
        return self
    def transform(self, X, y=None):
        X_ = X.copy()
        for cat in self.to_categories_:
            X_[cat] = X_[cat].astype("category")
        return X_ 

但是当我尝试创建此类的对象时出现错误:

ChangeToCategory(to_categories=["Sex", "Embarked"])
AttributeError: 'ChangeToCategory' object has no attribute 'to_categories'

我做错了什么?基于错误,我假设它在某处尝试调用属性“to_categories”,但我使用属性“to_categories_” - 带有下划线,并且没有来自 init 的变量,我不会在任何地方调用。

【问题讨论】:

    标签: python scikit-learn


    【解决方案1】:

    所以,我发现我错了。从sklearn documentation 开始,您必须将所有估计器参数初始化为类的属性。

    此外,init 接受的每个关键字参数都应该对应于实例上的一个属性。在进行模型选择时,Scikit-learn 依靠它来找到要在估计器上设置的相关属性。

    【讨论】:

      猜你喜欢
      • 2020-02-04
      • 2020-02-03
      • 2019-02-06
      • 2019-11-20
      • 2016-04-16
      • 2020-02-05
      • 2021-09-06
      • 1970-01-01
      • 2018-09-25
      相关资源
      最近更新 更多