Python 如果未指定评分,则通过的估算值应为';得分';方法

Python 如果未指定评分,则通过的估算值应为';得分';方法,python,keras,scikit-learn,Python,Keras,Scikit Learn,我正在进行超参数调优,并编写了这段代码(来自本教程)- ) 这就是我犯的错误- TypeError Traceback (most recent call last) <ipython-input-39-3821841029c0> in <module> 11 param_grid = dict(batch_size=batch_size, epochs=epochs) 12 grid =

我正在进行超参数调优,并编写了这段代码(来自本教程)- )

这就是我犯的错误-

TypeError                                 Traceback (most recent call last)
<ipython-input-39-3821841029c0> in <module>
     11 param_grid = dict(batch_size=batch_size, epochs=epochs)
     12 grid = GridSearchCV(estimator=model, param_grid=param_grid, n_jobs=-1, cv=3)
---> 13 grid_result = grid.fit(scaled_X, y)
     14 # summarize results
     15 print("Best: %f using %s" % (grid_result.best_score_, grid_result.best_params_))

~\AppData\Local\Continuum\anaconda3\lib\site-packages\sklearn\model_selection\_search.py in fit(self, X, y, groups, **fit_params)
    607 
    608         scorers, self.multimetric_ = _check_multimetric_scoring(
--> 609             self.estimator, scoring=self.scoring)
    610 
    611         if self.multimetric_:

~\AppData\Local\Continuum\anaconda3\lib\site-packages\sklearn\metrics\scorer.py in _check_multimetric_scoring(estimator, scoring)
    340     if callable(scoring) or scoring is None or isinstance(scoring,
    341                                                           str):
--> 342         scorers = {"score": check_scoring(estimator, scoring=scoring)}
    343         return scorers, False
    344     else:

~\AppData\Local\Continuum\anaconda3\lib\site-packages\sklearn\metrics\scorer.py in check_scoring(estimator, scoring, allow_none)
    293                 "If no scoring is specified, the estimator passed should "
    294                 "have a 'score' method. The estimator %r does not."
--> 295                 % estimator)
    296     elif isinstance(scoring, Iterable):
    297         raise ValueError("For evaluating multiple scores, use "

TypeError: If no scoring is specified, the estimator passed should have a 'score' method. The estimator <keras.engine.sequential.Sequential object at 0x0000025F8892C248> does not.
TypeError回溯(最近一次调用)
在里面
11参数网格=dict(批次大小=批次大小,年代=年代)
12网格=网格搜索cv(估计器=模型,参数网格=参数网格,n_作业=-1,cv=3)
--->13网格结果=网格拟合(缩放X,y)
14#总结结果
15打印(“最佳:%f使用%s”%(网格结果。最佳分数,网格结果。最佳参数))
~\AppData\Local\Continuum\anaconda3\lib\site packages\sklearn\model\u selection\\u search.py in fit(self、X、y、groups、**fit\u参数)
607
608名记分员,自我多指标得分(
-->609自我评估,评分=自我评分)
610
611如果是自度量函数:
~\AppData\Local\Continuum\anaconda3\lib\site packages\sklearn\metrics\scorer.py in\u check\u multimetric\u评分(估计器,评分)
340如果可调用(计分)或计分为无或不存在(计分),
341 str):
-->342名评分员={“评分”:检查评分(估计员,评分=评分)}
343名返场得分手,错
344其他:
~\AppData\Local\Continuum\anaconda3\lib\site packages\sklearn\metrics\scorer.py检查评分(估计器、评分、允许无)
293“如果未指定评分,则通过的估计员应”
294“有一个‘评分’方法。估算器%r没有。”
-->295%估计数)
296 elif isinstance(评分,可测量):
297 raise VALUE ERROR(“对于评估多个分数,使用”
TypeError:如果未指定评分,则通过的估计员应具有“评分”方法。估计员没有。
我已经试过了你的答案-


我认为您需要指定在GridSearch中使用的分数类型。因为GridSearch在参数网格上最大化分数。例如,分类问题,您可以使用f1分数、精度、召回分数。如果分数为无,GridSearch将使用估计器的分数方法

from sklearn.metrics import make_scorer
from sklearn.metrics import accuracy_score, precision_score, recall_score

from sklearn.model_selection import GridSearchCV
scorers = {
        'precision_score': make_scorer(precision_score),
        'recall_score': make_scorer(recall_score),
        'accuracy_score': make_scorer(accuracy_score)
        }
grid_search_cv=GridSearchCV(model,param_grid,verbose=1,cv=3,scoring=scorers,refit="precision_score")


您可以使用或。

使用什么评分函数?。我有一个MLPIt,这取决于您最关心的错误类型。例如分类“f1”,“精度”,“召回”是很好的评分方法。我收到了这个错误-类型错误:无法克隆对象“”(类型):它似乎不是scikit学习估计器,因为它没有实现“获取参数”方法。当我使用mse作为评分指标时
from sklearn.metrics import make_scorer
from sklearn.metrics import accuracy_score, precision_score, recall_score

from sklearn.model_selection import GridSearchCV
scorers = {
        'precision_score': make_scorer(precision_score),
        'recall_score': make_scorer(recall_score),
        'accuracy_score': make_scorer(accuracy_score)
        }
grid_search_cv=GridSearchCV(model,param_grid,verbose=1,cv=3,scoring=scorers,refit="precision_score")