问题描述
我遇到了一些复杂的问题。非常棘手的一个:
上下文:
我将 gridsearchcv 与多个记分员一起使用(4 个记分员,包括一名自定义记分员)
scorers = {'f1_score': 'f1','precision': make_scorer(precision_score),'recall': make_scorer(recall_score),'pr_auc': make_scorer(pr_auc,greater_is_better=True,needs_proba=True)}
# where custom scorer use this function
def pr_auc(y,y_pred):
precision,recall,thresholds = precision_recall_curve(y,y_pred)
pr_auc = auc(recall,precision)
return float(pr_auc)
当我通过 X_train (pd.DataFrame) 和 y_train (pd.Series) 拟合 gridsearch 时,我有时得到回溯:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-788-e522f0faead4> in <module>
----> 1 grid_search_cv.fit(X_train,y_train)
/mnt/disk01/data/dn.mushtakov/envs/envs/stan/lib/python3.7/site-packages/sklearn/utils/validation.py in inner_f(*args,**kwargs)
70 FutureWarning)
71 kwargs.update({k: arg for k,arg in zip(sig.parameters,args)})
---> 72 return f(**kwargs)
73 return inner_f
74
/mnt/disk01/data/dn.mushtakov/envs/envs/stan/lib/python3.7/site-packages/sklearn/model_selection/_search.py in fit(self,X,y,groups,**fit_params)
653
654 scorers,self.multimetric_ = _check_multimetric_scoring(
--> 655 self.estimator,scoring=self.scoring)
656
657 if self.multimetric_:
/mnt/disk01/data/dn.mushtakov/envs/envs/stan/lib/python3.7/site-packages/sklearn/metrics/_scorer.py in _check_multimetric_scoring(estimator,scoring)
481 "mapped to the callable for multiple metric "
482 "evaluation. Got %s of type %s"
--> 483 % (repr(scoring),type(scoring)))
484
485 if isinstance(scoring,(list,tuple,set)):
/mnt/disk01/data/dn.mushtakov/envs/envs/stan/lib/python3.7/site-packages/sklearn/metrics/_scorer.py in __repr__(self)
136 for k,v in self._kwargs.items()])
137 return ("make_scorer(%s%s%s%s)"
--> 138 % (self._score_func.__name__,139 "" if self._sign > 0 else ",greater_is_better=False",140 self._factory_args(),kwargs_string))
AttributeError: 'numpy.float64' object has no attribute '__name__'
魔术错误
但是我在不同的情况下使用了类似的 ML“管道”(基本上,这些情况仅因数据集中的某些特征而异,因为我使用了不同的特征工程技术)。 代码在第一次完美运行。 但是当我为下一个案例运行学习管道时,代码失败了。
- 如果我从 scorers dict 中删除自定义 scorer,那么 gridsearch 拟合将运行良好
- 如果我从命名空间中删除 pr_auc 函数,然后再次定义该函数,gridsearch 拟合也将运行良好
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)