Нормализованная формула накопленного дисконтированного усиления в R - PullRequest
0 голосов
/ 10 марта 2020

Я хотел бы закодировать в R следующую формулу в функции:

normalized cumulative discount gain

Которая должна быть в пакете R, но один раз Установленный пакет отсутствует ...

# original source: 
https://www.rdocumentation.org/packages/rrecsys/versions/0.9.5.4/topics/nDCG
#Alternative source:
https://en.wikipedia.org/wiki/Discounted_cumulative_gain

Использование функции с двумя векторами в качестве входных данных.

# example
v1=c(1,2,3,4)
v2=c(1,3,2,4)
nDGC(v1,v2)

любой может помочь мне эффективно ее кодировать ?

A python версия DG C:

rel = zip(range(1,7),[3,2,3,0,1,2])
dcg6 = rel[0][1] + sum(map(lambda (a,b):b/math.log(a,2),rel[1:]))
print dcg6

1 Ответ

1 голос
/ 10 марта 2020

Это простая реализация R уравнений в Википедии с включенной проверкой ошибок:


Первое уравнение

enter image description here

DCG_pos <- function(rel, p)
{
  if(missing(p)) p <- length(rel)
  stopifnot(p <= length(rel))

  sum(rel[seq(p)]/log(seq(p) + 1, 2))
}

Второе уравнение

enter image description here


IDCG_pos <- function(rel, p)
{
  if(missing(p)) p <- length(rel)
  stopifnot(p <= length(rel))

  sum((2^(rel[seq(p)]) - 1)/log(seq(p) + 1, 2))
}

Третье уравнение

enter image description here

nDGC_pos <- function(rel, p)
{
  if(missing(p)) p <- length(rel)
  stopifnot(p <= length(rel))

  DCG_pos(rel, p) / IDCG_pos(rel, p)
}

Вы можете использовать их следующим образом:

DCG_pos(1:5, 5)
#> [1] 7.41883
IDCG_pos(1:5, 5)
#> [1] 24.84537
nDGC_pos(1:5, 5)
#> [1] 0.2986

Создано в 2020-03-10 пакетом представ. (v0.3.0)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...