sklearn.metrics.dcg_score?
sklearn.metrics.dcg_score(y_true, y_score, *, k=None, log_base=2, sample_weight=None, ignore_ties=False)
計算折損累計增益。
在應用對數折損后,將真實分數按預測分數進行排序后,求和。
如果真實標簽的y_score排名高,則此排名度量將產生一個高值。
通常,首選歸一化折損累計增益(NDCG,由ndcg_score計算)。
參數 | 說明 |
---|---|
y_true | ndarray, shape (n_samples, n_labels) 多標簽分類的真實目標,或要排名的實體的真實得分。 |
y_score | ndarray, shape (n_samples, n_labels) 目標得分可以是概率估計、置信度值或決策的非閾值度量(如某些分類器上的“ decision_function”所返回)。 |
k | int, optional (default=None) 僅考慮排名中最高的k得分。如果為None,則使用所有輸出。 |
log_base | float, optional (default=2) 用于折扣的對數的底數。較低的值意味著更大的折損(最佳的結果更為重要)。 |
sample_weight | ndarray, shape (n_samples,), optional (default=None) 樣本權重。如果為None,則所有樣本的權重相同。 |
ignore_ties | bool, optional (default=False) 假設y_score在效率增益方面不存在關聯(如果y_score是連續的,則可能是這種情況)。 |
返回值 | 說明 |
---|---|
discounted_cumulative_gain | float 平均樣本的DCG得分。 |
另見
折損累計增益除以理想折損累計增益(獲得理想排名的DCG),以得到0到1之間的得分。
參考
Wikipedia entry for Discounted Cumulative Gain
Jarvelin, K., & Kekalainen, J. (2002). Cumulated gain-based evaluation of IR techniques. ACM Transactions on Information Systems (TOIS), 20(4), 422-446.
Wang, Y., Wang, L., Li, Y., He, D., Chen, W., & Liu, T. Y. (2013, May). A theoretical analysis of NDCG ranking measures. In Proceedings of the 26th Annual Conference on Learning Theory (COLT 2013)
McSherry, F., & Najork, M. (2008, March). Computing information retrieval performance measures efficiently in the presence of tied scores. In European conference on information retrieval (pp. 414-421). Springer, Berlin, Heidelberg.
示例
>>> from sklearn.metrics import dcg_score
>>> # we have groud-truth relevance of some answers to a query:
>>> true_relevance = np.asarray([[10, 0, 0, 1, 5]])
>>> # we predict scores for the answers
>>> scores = np.asarray([[.1, .2, .3, 4, 70]])
>>> dcg_score(true_relevance, scores)
9.49...
>>> # we can set k to truncate the sum; only top k answers contribute
>>> dcg_score(true_relevance, scores, k=2)
5.63...
>>> # now we have some ties in our prediction
>>> scores = np.asarray([[1, 0, 0, 0, 1]])
>>> # by default ties are averaged, so here we get the average true
>>> # relevance of our top predictions: (10 + 5) / 2 = 7.5
>>> dcg_score(true_relevance, scores, k=1)
7.5
>>> # we can choose to ignore ties for faster results, but only
>>> # if we know there aren't ties in our scores, otherwise we get
>>> # wrong results:
>>> dcg_score(true_relevance,
... scores, k=1, ignore_ties=True)
5.0