继承类时超出了最大递归深度

时间:2017-08-15 18:14:16

标签: python python-3.x inheritance recursion scikit-learn

我正在尝试将DBSCAN类从scikit-learn扩展到另一个类MyDBSCAN,但是我遇到了递归限制,我无法弄清楚它为什么会发生

我已将问题缩减为以下代码:

from sklearn.cluster import DBSCAN

class MyDBSCAN(DBSCAN):
    def __init__(eps=0.5, min_samples=5, metric='euclidean', metric_params=None, algorithm='auto', leaf_size=30, p=None, n_jobs=1):
        super().__init__(eps, min_samples, metric, metric_params, algorithm, leaf_size, p, n_jobs)

if __name__ == "__main__":
    items = [[1], [2], [3], [4]]
    clusterer = MyDBSCAN()
    clusterer.fit(items)

使用DBSCAN类运行上面的工作正常,但在使用MyDBSCAN时,我得到以下输出:

File "./MyDBSCAN.py", line 11, in <module>
    clusterer.fit(items)
  File "/usr/local/lib/python3.4/dist-packages/sklearn/cluster/dbscan_.py", line 281, in fit
    **self.get_params())
  File "/usr/local/lib/python3.4/dist-packages/sklearn/base.py", line 244, in get_params
    deep_items = value.get_params().items()
...
  File "/usr/local/lib/python3.4/dist-packages/sklearn/base.py", line 244, in get_params
    deep_items = value.get_params().items()
  File "/usr/local/lib/python3.4/dist-packages/sklearn/base.py", line 227, in get_params
    for key in self._get_param_names():
  File "/usr/local/lib/python3.4/dist-packages/sklearn/base.py", line 197, in _get_param_names
    init_signature = signature(init)
  File "/usr/lib/python3.4/inspect.py", line 2055, in signature
    return _signature_internal(obj)
  File "/usr/lib/python3.4/inspect.py", line 1953, in _signature_internal
    return Signature.from_function(obj)
  File "/usr/lib/python3.4/inspect.py", line 2458, in from_function
    __validate_parameters__=is_duck_function)
  File "/usr/lib/python3.4/inspect.py", line 2374, in __init__
    for param in parameters))
  File "/usr/lib/python3.4/collections/__init__.py", line 60, in __init__
    self.__update(*args, **kwds)
  File "/usr/lib/python3.4/_collections_abc.py", line 590, in update
    if isinstance(other, Mapping):
  File "/usr/lib/python3.4/abc.py", line 188, in __instancecheck__
    subclass in cls._abc_negative_cache):
  File "/usr/lib/python3.4/_weakrefset.py", line 75, in __contains__
    return wr in self.data
RuntimeError: maximum recursion depth exceeded in comparison

我试图像这样覆盖get_params(),但无济于事:

def get_params():
    super().get_params()

1 个答案:

答案 0 :(得分:1)

我无法在此解决您的所有问题,但HAVING应该__init__作为其第一个参数。

相关问题