【发布时间】:2021-08-31 10:30:28
【问题描述】:
我创建了一个基于 SKLearn 的 OneHotEncoder 的自定义转换器。但是,在调用 fit 之后,transform 告诉我 OneHotEncoder 尚未安装,我不知道为什么。下面的简化版本(我也派生自我在此处删除的另一个类,因为它不是必需的)。我调试并正确调用了 fit 方法。我得到的错误:
sklearn.exceptions.NotFittedError: This OneHotEncoder instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.
class CustomOneHotEncoder(OneHotEncoder):
"""
OneHot Encoding
----------
"""
# todo: max_num_categories als parameter
def __init__(self, categories='auto', drop=None, sparse=True, dtype=np.int, handle_unknown='error'):
OneHotEncoder.__init__(self, categories=categories, drop=drop, sparse=sparse, dtype=dtype, handle_unknown=handle_unknown)
def fit(self, X, y=None):
OneHotEncoder.fit(self, X, y=y)
return self
def transform(self, X):
"""
:type X: DataFrame
"""
try:
ret = OneHotEncoder().transform(X).toarray() # Here I get the error
return ret
except Exception as e:
raise Exception("Internal Error")
【问题讨论】:
-
X, y 的拟合位置在哪里?
-
在fit方法中,在调用transform之前调用。这里安装的 OneHotEncoder 是 super() 的,我只是不能调用 super,因为我是从此处未显示的另一个类派生而来的。
-
最好附上我们可以调试的完整代码
-
如上图代码可以调试,只需要一个import 'from sklearn.preprocessing import OneHotEncoder'
标签: python scikit-learn