首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sklearn ndcg_score返回不正确的结果

sklearn ndcg_score返回不正确的结果
EN

Stack Overflow用户
提问于 2021-03-14 07:32:34
回答 1查看 382关注 0票数 0

我正在做一个涉及使用归一化分布累积增益( NDCG )的项目,我了解该方法的基本计算。

因此,我从sklearn.metrics导入了ndcg_score,然后将一个基本实值数组和另一个数组传递给ndcg_score函数,以计算它们的NDCG分数。基本事实数组的值为[5, 4, 3, 2, 1],而另一个数组的值为[5, 4, 3, 2, 0],因此这两个数组中只有最后一个元素不同。

代码语言:javascript
复制
from sklearn.metrics import ndcg_score

user_ndcg = ndcg_score(array([[5, 4, 3, 2, 1]]), array([[5, 4, 3, 2, 0]]))

我预计结果会在0.96233左右(9.88507/10.27192)。然而,user_ndcg实际上返回了1.0,这让我很惊讶。最初我认为这是因为四舍五入,但事实并非如此,因为当我在另一组数组ndcg_score(array([[5, 4, 3, 2, 1]]), array([[5, 4, 0, 2, 0]]))上做实验时,它正确地返回了0.98898。

有没有人知道这可能是sklearn ndcg_score函数的错误,或者是我的代码出了什么问题?

EN

回答 1

Stack Overflow用户

发布于 2021-03-14 17:10:39

我假设你正在尝试为这个问题预测六个不同的类别(0,1,2,3,4和5)。如果要为五个不同的观测值评估ndcg,则必须向函数传递两个形状数组,每个数组为(5, 6)

也就是说,您已经将基本事实和预测转换为每行五行六列数组。

代码语言:javascript
复制
# Current form of ground truth and predictions
y_true = [5, 4, 3, 2, 1]
y_pred = [5, 4, 3, 2, 0]
# Transform ground truth to ndarray
y_true_nd = np.zeros(shape=(5, 6))
y_true_nd[np.arange(5), y_true] = 1
# Transform predictions to ndarray
y_pred_nd = np.zeros(shape=(5, 6))
y_pred_nd[np.arange(5), y_pred] = 1
# Calculate ndcg score
ndcg_score(y_true_nd, y_pred_nd)
> 0.8921866522394966

下面是y_true_ndy_pred_nd的样子:

代码语言:javascript
复制
y_true_nd

array([[0., 0., 0., 0., 0., 1.],
       [0., 0., 0., 0., 1., 0.],
       [0., 0., 0., 1., 0., 0.],
       [0., 0., 1., 0., 0., 0.],
       [0., 1., 0., 0., 0., 0.]])

y_pred_nd

array([[0., 0., 0., 0., 0., 1.],
       [0., 0., 0., 0., 1., 0.],
       [0., 0., 0., 1., 0., 0.],
       [0., 0., 1., 0., 0., 0.],
       [1., 0., 0., 0., 0., 0.]])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66619605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档