2016-11-25 62 views
2

我有50件产品。对于每种产品,我想使用相似性度量标识以下四种相关产品。在Python中比较排名列表

  • 1相关的最
  • 2部分相关
  • 1不相关

我想比较我的模型产生的排名列表(预测)由指定的排名列表领域专家(地面实况)

通过阅读,我发现我可以使用基于等级相关的方法,比如Kendall Tau/Spearmen来比较排名列表。但是,我不确定这些方法是否合适,因为我的样本数量很少。(4)。如果我错了,请纠正我。

另一种方法是使用Jaccard相似度(设定交叉点)来量化两个排序列表之间的相似度。然后,我可以绘制来自setbased_list (见下文)的直方图。

for index, row in evaluate.iterrows(): 
    d= row['Id'] 
    y_pred = [3,2,1,0] 
    y_true = [row['A'],row['B'],row['C'],row['D']] 
    sim = jaccard_similarity_score(y_true, y_pred) 
    setbased_list.append(sim) 
  1. 是我的方法上面正确的问题呢?

  2. 如果我想考虑列表中元素的位置(基于权重),我可以使用哪些其他方法?

+0

为什么你确定一个产品是不相关的? – Rojan

+0

这就像'控制'数据,以确保用户相应的排名.. – kitchenprinzessin

回答

1

从你所描述的问题的方式,它听起来好像你可能也只是分配一个任意的得分名单上的每一个项目 - 例如与“训练”列表中的相同等级的同一项目的3分,同一项目的1分但不同的等级或类似的项目。

虽然我并不清楚“不相关”项目的作用,但是其他45项与目标项目同等“不相关”,如果是这样,那么选择哪一项就很重要?如果'不相关'的项目出现在其中一个'相关'的位置,你可能需要从分数中拿分吗?这种微妙可能不会被标准的非参数相关性度量所捕获。

如果因为某些原因使用基于统计的标准测量很重要,那么您最好在Cross Validated上询问。

+0

感谢nekomatic,我会将问题发布到交叉验证。 – kitchenprinzessin

0

如果你的愿望就是能​​找出你的排名在各个产品的情况下,如何比较:

可以使用,即使样本的数量低的相关系数的方法 - 但是,你不会得到很每个产品的特定结果。事实上,有可能没有任何方法可以采取

(注 - 在两个已经排载体使用斯皮尔曼将给出相同的结果皮尔逊)

如果你的愿望是找出如何您的排名与更广泛的域名专家排名相抵:

由于您的50个列表并非彼此独立,因此您在此处使用聚合关联会有问题。更好的方法是根据您和领域专家为产品计算出的实际相似性分数构建两个对称50x50矩阵,以便产品之间的相似度为产品之间的相似度i和产品j,然后使用两者之间的Mantel测试。

另外,这个问题更多的是关于统计而不是编程 - 在未来,像交叉验证这样的问题,像@nekomatic说的那样。