我已经实现了自己的分类器,现在我想对其运行网格搜索,但出现以下错误:estimator.fit(X_train, y_train, **fit_params)
TypeError: fit() takes 2 positional arguments but 3 were given
我跟着本教程 http://danielhnyk.cz/creating-your-own-estimator-scikit-learn/并使用这个模板 https://github.com/scikit-learn-contrib/project-template/blob/master/skltemplate/template.py由...提供scikit 的官方文档 http://scikit-learn.org/stable/developers/contributing.html。我的类定义如下:
class MyClassifier(BaseEstimator, ClassifierMixin):
def __init__(self, lr=0.1):
self.lr=lr
def fit(self, X, y):
# Some code
return self
def predict(self, X):
# Some code
return y_pred
def get_params(self, deep=True)
return {'lr'=self.lr}
def set_params(self, **parameters):
for parameter, value in parameters.items():
setattr(self, parameter, value)
return self
我正在尝试网格搜索,如下所示:
params = {
'lr': [0.1, 0.5, 0.7]
}
gs = GridSearchCV(MyClassifier(), param_grid=params, cv=4)
EDIT I
我就是这样称呼它的:
gs.fit(['你好世界', '尝试', '你好世界', '尝试', '你好世界', '尝试', '你好世界', '尝试'],
['我','Z','我','Z','我','Z','我','Z'])
结束编辑一
错误是由以下原因产生的_fit_and_score
文件中的方法python3.5/site-packages/sklearn/model_selection/_validation.py
它在呼唤estimator.fit(X_train, y_train, **fit_params)
有 3 个参数,但我的估计器只有两个,所以这个错误对我来说是有意义的,但我不知道如何解决它......我还尝试添加一些虚拟参数fit
方法但没有成功。
EDIT II
完整的错误输出:
Traceback (most recent call last):
File "/home/rodrigo/no_version/text_classifier/MyClassifier.py", line 355, in <module>
['I', 'Z', 'I', 'Z', 'I', 'Z', 'I', 'Z'])
File "/home/rodrigo/no_version/text_classifier/.env/lib/python3.5/site-packages/sklearn/model_selection/_search.py", line 639, in fit
cv.split(X, y, groups)))
File "/home/rodrigo/no_version/text_classifier/.env/lib/python3.5/site-packages/sklearn/externals/joblib/parallel.py", line 779, in __call__
while self.dispatch_one_batch(iterator):
File "/home/rodrigo/no_version/text_classifier/.env/lib/python3.5/site-packages/sklearn/externals/joblib/parallel.py", line 625, in dispatch_one_batch
self._dispatch(tasks)
File "/home/rodrigo/no_version/text_classifier/.env/lib/python3.5/site-packages/sklearn/externals/joblib/parallel.py", line 588, in _dispatch
job = self._backend.apply_async(batch, callback=cb)
File "/home/rodrigo/no_version/text_classifier/.env/lib/python3.5/site-packages/sklearn/externals/joblib/_parallel_backends.py", line 111, in apply_async
result = ImmediateResult(func)
File "/home/rodrigo/no_version/text_classifier/.env/lib/python3.5/site-packages/sklearn/externals/joblib/_parallel_backends.py", line 332, in __init__
self.results = batch()
File "/home/rodrigo/no_version/text_classifier/.env/lib/python3.5/site-packages/sklearn/externals/joblib/parallel.py", line 131, in __call__
return [func(*args, **kwargs) for func, args, kwargs in self.items]
File "/home/rodrigo/no_version/text_classifier/.env/lib/python3.5/site-packages/sklearn/externals/joblib/parallel.py", line 131, in <listcomp>
return [func(*args, **kwargs) for func, args, kwargs in self.items]
File "/home/rodrigo/no_version/text_classifier/.env/lib/python3.5/site-packages/sklearn/model_selection/_validation.py", line 458, in _fit_and_score
estimator.fit(X_train, y_train, **fit_params)
TypeError: fit() takes 2 positional arguments but 3 were given
结束编辑二
SOLVED谢谢大家,我犯了一个愚蠢的错误:有两个不同的函数具有相同的名称(适合),(我使用不同的参数实现了另一个用于自定义目的,一旦我重命名了“自定义适合”,它就正常工作了。)
谢谢你并抱歉