def get_performance(user_pos_test, r, auc, Ks): ''' :param user_pos_test: user 测试集中真实交互的item :param r: r = [1,0,1] 表示预测TOP-K是否命中 :param auc: auc =0 标量 :param Ks: TOP-K :return: ''' precision, recall, ndcg, hit_ratio, MAP = [], [], [], [], [] for K in Ks: precision.append(metrics.precision_at_k(r, K)) recall.append(metrics.recall_at_k(r, K, len(user_pos_test))) ndcg.append(metrics.ndcg_at_k(r, K)) hit_ratio.append(metrics.hit_at_k(r, K)) MAP.append(metrics.AP_at_k(r, K, len(user_pos_test))) return {'recall': np.array(recall), 'precision': np.array(precision), 'ndcg': np.array(ndcg), 'hit_ratio': np.array(hit_ratio), 'MAP': np.array(MAP), 'auc': auc}
# calculate metrics precision_k = np.mean( [precision_at_k(r, args.topk) for r in preds.values()]) fnl_precision.append(precision_k) recall_k = np.mean([ recall_at_k(r, len(test_ur[u]), args.topk) for u, r in preds.items() ]) fnl_recall.append(recall_k) map_k = map_at_k(list(preds.values())) fnl_map.append(map_k) ndcg_k = np.mean([ndcg_at_k(r, args.topk) for r in preds.values()]) fnl_ndcg.append(ndcg_k) hr_k = hr_at_k(list(preds.values()), list(preds.keys()), test_ur) fnl_hr.append(hr_k) mrr_k = mrr_at_k(list(preds.values())) fnl_mrr.append(mrr_k) gc.collect() for i in range(len(val_kpi)): print(f'Validation [{i + 1}] Precision@{args.topk}: {val_kpi[i]}') print('---------------------------------') print(f'Precision@{args.topk}: {np.mean(fnl_precision)}')
'item'].values.tolist() for u in preds.keys(): preds[u] = [1 if e in test_ur[u] else 0 for e in preds[u]] # calculate metrics precision_k = np.mean([precision_at_k(r, k) for r in preds.values()]) fnl_precision.append(precision_k) recall_k = np.mean( [recall_at_k(r, len(test_ur[u]), k) for u, r in preds.items()]) fnl_recall.append(recall_k) map_k = map_at_k(list(preds.values())) fnl_map.append(map_k) ndcg_k = np.mean([ndcg_at_k(r, k) for r in preds.values()]) fnl_ndcg.append(ndcg_k) hr_k = hr_at_k(list(preds.values()), list(preds.keys()), test_ur) fnl_hr.append(hr_k) mrr_k = mrr_at_k(list(preds.values())) fnl_mrr.append(mrr_k) print('---------------------------------') print(f'Precision@{args.topk}: {np.mean(fnl_precision)}') print(f'Recall@{args.topk}: {np.mean(fnl_recall)}') print(f'MAP@{args.topk}: {np.mean(fnl_map)}') print(f'NDCG@{args.topk}: {np.mean(fnl_ndcg)}') print(f'HR@{args.topk}: {np.mean(fnl_hr)}') print(f'MRR@{args.topk}: {np.mean(fnl_mrr)}')