我正在研究一个涉及两个变量的项目排名问题:受欢迎程度和位置。
我的目标是想出一种方法来决定我的集合中物品的受欢迎程度和距离之间的最佳权衡。也就是说,从一组具有流行度和地理位置的物品,以及我的位置(因此,距离)中,我想找到最重要的一个。
下面的解决方案在之前的问题中提到过,但没有引起太大的注意:
给定一个地方p,你可以通过使用流行度p (p)和距离D(p)来计算该地方I(p)的重要性。你应该决定或找到权重a和b的最佳值。
I(p) = a * p (p) - b * D(p)
现在,我如何最好地确定值a和b的权重?
我有一组"解决方案",我可以使用。每个解决方案都包含一个子集的项目,其受欢迎程度和距离,以及其中一个项目被认为是最相关/重要的。
您不需要两个权重。因为您不想要一个绝对重要性值(您只想告诉哪些项比其他项更重要),所以您可以减少到一个参数:
I(p) = a * P(p) + D(p),
其中P(p)
是基于项目质量(或其他)的重要项,D(p)
是基于距离的重要项。这里,你可能想要一个距离递减函数。
据我所知,查找权重是一个离线过程,只执行一次。因此,一个非常简单的抽样方法就足够了。
最简单的方法如下:对a
的一些域进行采样(例如,假设一个合理的下界和上界,然后用给定的步宽迭代这个区间)。评估解决方案的子集,找出最重要的项目。计算有多少个子集选择了正确的相关项目。最后,产生最高正确计数的a
值被认为是最佳选择。
你有任何真实的数据集吗??比如,所有地点的距离D(p)
和受欢迎程度P(p)
的真正排名??
如果你有这个,你可以先训练你的公式,那就是
I(p) = a * P(p) - b * D(p)
使用以下集合中(a,b)
的所有值对->
{(1,1),(1,2), ... , (1,10)}
{(2,1),(2,2), ... , (2,10)}
...........................
...........................
{(10,1),(10,2), ... , (10,10)}
对于所有这些100
对,您可以为所有对创建一个temporary_ranklist
&检查哪一对你的temporary_ranklist
最接近真正的raklist。
(a,b)
就是你要找的。