实现自定义scikit-learn估算器的完整规范是什么?



我正在滚动我自己的预测器,并希望像使用任何scikit例程(例如RandomForestRegressor)一样使用它。我有一个类包含fitpredict方法,似乎工作得很好。但是,当我尝试使用一些scikit方法(如交叉验证)时,会得到如下错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:Python27libsite-packagessklearncross_validation.py", line 1152, in cross_val_
score
    for train, test in cv)
  File "C:Python27libsite-packagessklearnexternalsjoblibparallel.py", line 516, in __
call__
    for function, args, kwargs in iterable:
  File "C:Python27libsite-packagessklearncross_validation.py", line 1152, in <genexpr>
    for train, test in cv)
  File "C:Python27libsite-packagessklearnbase.py", line 43, in clone
    % (repr(estimator), type(estimator)))
TypeError: Cannot clone object '<__main__.Custom instance at 0x033A6990>' (type <type 'inst
ance'>): it does not seem to be a scikit-learn estimator a it does not implement a 'get_para
ms' methods.

我看到它想让我实现一些方法(大概是get_params以及set_paramsscore),但我不确定制作这些方法的正确规范是什么。有关于这个话题的信息吗?谢谢。

完整的说明可以在scikit-learn文档中获得,而API背后的原理由yours truly等人在本文中列出。简而言之,除了fit,你需要的估计器是get_paramsset_params,它们返回(作为dict)并设置(从kwargs)估计器的超参数,即学习算法本身的参数(而不是它学习的数据参数)。这些参数应该与__init__参数匹配。

这两个方法都可以通过继承sklearn.base中的类来获得,但是如果你不想让你的代码依赖于scikit-learn,你也可以自己提供它们。

请注意,输入验证应该在fit中完成,而不是在构造函数中完成,否则您仍然可以在set_params中设置无效的参数,并使fit以意想不到的方式失败。

相关内容

  • 没有找到相关文章

最新更新