Во-первых, для каждой даты в вашем входном наборе назначьте промежуток времени между датой и сегодняшним днем.
Например: следующая установленная дата {today, tomorrow, yesterday, a week from today}
становится {0, 1, 1, 7}
.Формально: val[i] = abs(today - date[i])
.
Во-вторых, инвертируйте значения таким образом, чтобы их относительные веса были обращены.Самый простой способ сделать это: val[i] = 1/val[i]
.
Другие предложения:
val[i] = 1/val[i]^2
val[i] = 1/sqrt(val[i])
val[i] = 1/log(val[i])
Самая сложная и важная часть - решить, как инвертировать значения.Подумайте, какой должна быть природа гирь?(Вы хотите заметных различий между двумя отдаленными датами, или, может быть, две отдаленные даты должны иметь довольно равные веса? Хотите, чтобы даты, которые очень близки к сегодняшнему дню, имели чрезвычайно больший вес или разумно больший вес?).
Обратите внимание, что вы должны придумать процедуру инвертирования, где вы не можете делить на ноль.В приведенном выше примере деление на val[i]
приводит к делению на ноль.Один метод, позволяющий избежать деления на ноль, называется сглаживанием .Самый простой способ «сгладить» ваши данные - это использовать сглаживание add-one, где вы просто добавляете единицу к каждому значению (таким образом, сегодня становится 1, завтра становится 2, следующая неделя становится 8 и т. Д.).
Теперь самое простое - нормализовать значения так, чтобы они суммировались до одного.
sum = val[1] + val[2] + ... + val[n]
weight[i] = val[i]/sum for each i