Inherit Class of LabelBinarizer with “maximum recursion depth exceede” error
我从LabelBinarizer创建了一个定制的编码器类。这是它的样子
1 2 3 4 5 6 7 8 9 10 | class my_lb(LabelBinarizer): def fit(self, X, y=None): self.fit(X) def transform(self, X, y=None): return self.transform(X) def fit_transform(self, X, y=None): return self.fit(X).transform(X) |
我有一个"超过最大递归深度"的错误,发生在fit方法中。我在网上做了一些笔记:
1 2 3 4 5 6 7 8 9 10 11 12 13 | class my_lb(LabelBinarizer): def __init__(self): super().__init__() def fit(self, X, y=None): super().fit(X) def transform(self, X, y=None): return super().transform(X) def fit_transform(self, X, y=None): return super().fit(X).transform(X) |
但我的问题是,它如何解决我的问题?我可以理解这里其他文章中的原因(我可以看到它构建了一个显式的无限循环),但是我读了labelbinarizer的代码,这对我来说很正常。我找不到任何可能导致无限循环的东西。
1 2 3 4 5 6 7 8 9 10 | def fit(self, y): self.y_type_ = type_of_target(y) if 'multioutput' in self.y_type_: raise ValueError("Multioutput target data is not supported with" "label binarization") if _num_samples(y) == 0: raise ValueError('y has 0 samples: %r' % y) self.sparse_input_ = sp.issparse(y) self.classes_ = unique_labels(y) return self |
有人能告诉我这里缺少什么吗?当我创建继承类时,它还将帮助我更好地了解何时需要super。
在更改为调用
另一方面,
另一方面,修改后的版本通过对
但最好的解决方法是简单地删除派生类中的