我正在滚动我自己的预测器,并希望像使用任何scikit例程(例如RandomForestRegressor)一样使用它。我有一个类包含fit
和predict
方法,似乎工作得很好。但是,当我尝试使用一些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_params
和score
),但我不确定制作这些方法的正确规范是什么。有关于这个话题的信息吗?谢谢。
完整的说明可以在scikit-learn文档中获得,而API背后的原理由yours truly等人在本文中列出。简而言之,除了fit
,你需要的估计器是get_params
和set_params
,它们返回(作为dict
)并设置(从kwargs)估计器的超参数,即学习算法本身的参数(而不是它学习的数据参数)。这些参数应该与__init__
参数匹配。
这两个方法都可以通过继承sklearn.base
中的类来获得,但是如果你不想让你的代码依赖于scikit-learn,你也可以自己提供它们。
请注意,输入验证应该在fit
中完成,而不是在构造函数中完成,否则您仍然可以在set_params
中设置无效的参数,并使fit
以意想不到的方式失败。