如何定义自己的评分策略sklearn.model_selection.GridSearchCV?

时间:2017-11-20 13:22:23

标签: python python-3.x machine-learning scikit-learn grid-search

我想在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 的格式是否定义明确。我该如何解决?谢谢。

1 个答案:

答案 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