我想在GridSearchCV中定义一个新的评分,就像在这里http://scikit-learn.org/stable/modules/model_evaluation.html#implementing-your-own-scoring-object所说的那样。这是我的代码:
from sklearn.model_selection import GridSearchCV
def pe_score(estimator,x,y):
clf=estimator
clf.fit(x,y)
z=clf.predict(x)
pe=prob_error(z, y)
return pe
pe_error=pe_score(SVC(),xTrain,yTrain)
grid = GridSearchCV(SVC(), param_grid={'kernel':('linear', 'rbf'), 'C':[1, 10, 100,1000,10000]}, scoring=pe_error)
其中 prob_error(z,y)是计算我想要最小化的错误的函数, z 训练集的预测和 y 训练集的真实值。但是,我收到以下错误:
---> 18 clf.fit(xTrain, yTrain)
TypeError: 'numpy.float64' object is not callable
我不知道 pe_error 的格式是否定义明确。我该如何解决?谢谢。
答案 0 :(得分:2)
分数函数的格式应为score_func(y,y_pred,** kwargs)
然后,您可以使用make_scorer函数获取评分函数并使其与GridSearchCV一起使用。
所以,在这种情况下,它将是:
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import make_scorer
clf = estimator
clf.fit(x,y)
z = clf.predict(x)
def pe_score(y, y_pred):
pe = prob_error(y_pred, y)
return pe
pe_error = make_scorer(pe_score)
grid = GridSearchCV(SVC(), param_grid={'kernel':('linear', 'rbf'), 'C':[1, 10, 100,1000,10000]}, scoring= pe_error)
(我假设您已在代码中的其他位置实施或导入prob_error)
文档:http://scikit-learn.org/stable/modules/generated/sklearn.metrics.make_scorer.html