除了推薦任務,在二分類任務中,也可以計算該指標,代碼如下:
# ndcg
def get_dcg(y_pred, y_true, k):
#注意y_pred與y_true必須是一一對應的,並且y_pred越大越接近label=1(用相關性的說法就是,與label=1越相關)
df = pd.DataFrame({"y_pred":y_pred, "y_true":y_true})
df = df.sort_values(by="y_pred", ascending=False) # 對y_pred進行降序排列,越排在前面的,越接近label=1
df = df.iloc[0:k, :] # 取前K個
dcg = (2 ** df["y_true"] - 1) / np.log2(np.arange(1, df["y_true"].count()+1) + 1) # 位置從1開始計數
dcg = np.sum(dcg)
def get_ndcg(df, k):
# df包含y_pred和y_true
dcg = get_dcg(df["y_pred"], df["y_true"], k)
idcg = get_dcg(df["y_true"], df["y_true"], k)
ndcg = dcg / idcg
return ndcg