如何在sklearn中使用make_scorer自定义评分功能
Posted
技术标签:
【中文标题】如何在sklearn中使用make_scorer自定义评分功能【英文标题】:How to use make_scorer Custom scoring function in sklearn 【发布时间】:2018-03-14 09:49:38 【问题描述】:我正在尝试实现一个最高十分位召回/精度评分函数以插入到 gridsearchCV 中。但是,我无法弄清楚出了什么问题。我想做的是让我的评分函数接受概率预测、实际标签和理想情况下的十分位阈值百分比。然后我会对分数进行排序,然后确定十分位阈值内的转换率。例如。前 10% 人口的转化率。该转换率将是我输出的分数。越高越好。但是,当我运行下面的代码时,我没有得到概率分数,我不明白评分函数的输入是什么。下面的打印语句只返回 1 和 0 而不是概率。
def top_decile_conversion_rate(y_prob, y_actual):
# Function goes in here
print y_prob, y_actual
return 0.5
features = pd.DataFrame("f1":np.random.randint(1,1000,500) , "f2":np.random.randint(1,1000,500),
"label":[round(x) for x in np.random.random_sample(500)])
my_scorer = make_scorer(top_decile_conversion_rate, greater_is_better=True)
gs = grid_search.GridSearchCV(
estimator=LogisticRegression(),
param_grid='C': [i for i in range(1, 3)], 'class_weight': [None], 'penalty':['l2'],
cv=2,
scoring=my_scorer )
model = gs.fit(features[["f1","f2"]], features.label)
【问题讨论】:
在 make_scorer() 中,评分函数应该有一个签名(y_true, y_pred, **kwargs)
在你的情况下似乎相反。另外,您的top_decile_conversion_rate
返回的是什么?请添加这些详细信息。
top_decile_conersion_rate 将返回一个介于 0 和 1 之间的数字的转化率。是的,签名是这样,但我没有看到传递给该函数的预测。
“我没有看到传递给该函数的预测”是什么意思?你能解释一下吗?预测将在内部传递给该函数。你也可以添加完整的top_decile_conersion_rate
函数,以便我可以调试
更新了代码以反映要调试的完整代码。请注意,打印语句只打印出 1 和 0,而不是任何预测概率
刚刚注意到 needs_proba 参数!现在一切都很好。谢谢@VivekKumar
【参考方案1】:
解决方案是在 make_scorer 函数中添加一个名为 needs_proba=True 的参数!这工作正常。
def top_decile_conversion_rate(y_prob, y_actual):
# Function goes in here
print "---prob--"
print y_prob
print "---actual--"
print y_actual
print "---end--"
return 0.5
features = pd.DataFrame("f1":np.random.randint(1,1000,500) , "f2":np.random.randint(1,1000,500),
"label":[round(x) for x in np.random.random_sample(500)])
my_scorer = make_scorer(top_decile_conversion_rate, greater_is_better=True,needs_proba=True)
gs = grid_search.GridSearchCV(
estimator=LogisticRegression(),
param_grid='C': [i for i in range(1, 3)], 'class_weight': [None], 'penalty':['l2'],
cv=20,
scoring=my_scorer )
model = gs.fit(features[["f1","f2"]], features.label)
【讨论】:
回归类型记分器中带有print()
函数的DEBUG怎么样?我尝试成功,但print()
不起作用。我想显示 y_pred 和 y_true 值,但不能
以前见 [***.com/questions/3807694/…
您需要从 gridsearch 中选择获胜模型,然后调用 predict 函数以获得您的预测。类似 gs.best_estimator_.predict(X)以上是关于如何在sklearn中使用make_scorer自定义评分功能的主要内容,如果未能解决你的问题,请参考以下文章
sklearn基于make_scorer函数为Logistic模型构建自定义损失函数+代码实战(二元交叉熵损失 binary cross-entropy loss)
sklearn基于make_scorer函数为Logistic模型构建自定义损失函数并可视化误差图(lambda selection)和系数图(trace plot)+代码实战