Scikit learn sklearn ndcg_分数返回错误结果

Scikit learn sklearn ndcg_分数返回错误结果,scikit-learn,ranking,recommendation-engine,Scikit Learn,Ranking,Recommendation Engine,我正在从事一个使用NDCG(标准化分布累积增益)的项目,我了解该方法的基本计算 因此,我从sklearn.metrics导入了ndcg_score,然后将一个基本事实数组和另一个数组传递给ndcg_score函数以计算其ndcg得分。地面真相数组具有值[5,4,3,2,1],而另一个数组具有值[5,4,3,2,0],因此这两个数组中只有最后一个元素不同 from sklearn.metrics import ndcg_score user_ndcg = ndcg_score(array([[5

我正在从事一个使用NDCG(标准化分布累积增益)的项目,我了解该方法的基本计算

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

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\u ndcg
实际上返回了
1.0
,这让我很惊讶。起初我认为这是由于舍入,但事实并非如此,因为当我在另一组数组上进行实验时:
ndcg_分数(数组([[5,4,3,2,1]])、数组([[5,4,0,2,0]])
,它正确地返回了0.98898


有人知道这是否可能是sklearn
ndcg_score
函数的错误,或者我的代码是否有问题吗?

我假设您试图预测此问题的六个不同类别(0、1、2、3、4和5)。如果要评估五个不同观测值的ndcg,必须向函数传递两个形状数组
(5,6)

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

# 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\u true\u nd
y\u pred\u nd
的样子:

y\u true\n
数组([[0,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.]])
是的,是的
数组([[0,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.]])

基本事实是否只有一个观察结果,或者应该是5个观察结果?@ArturoSbr基本事实应该是5个观察结果。