自定义转换器中的 scikit-learn AttributeError

Igo*_*nov 6 python scikit-learn

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

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_ 
Run Code Online (Sandbox Code Playgroud)

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

ChangeToCategory(to_categories=["Sex", "Embarked"])
AttributeError: 'ChangeToCategory' object has no attribute 'to_categories'
Run Code Online (Sandbox Code Playgroud)

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

Igo*_*nov 7

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

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