比较Python中的排名列表

时间:2016-11-25 08:35:16

标签: python correlation ranking

我有50个产品。对于每种产品,我想使用相似性度量来识别以下四种相关产品。

  • 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. 如果我想考虑列表中元素的位置(基于权重),我可以使用哪些其他方法?

2 个答案:

答案 0 :(得分:1)

从您描述问题的方式来看,听起来好像您也可以为列表中的每个项目分配一个任意分数 - 例如同一项目的3分与同等级别的培训'列表,相同项目的1分,但排名不同,或类似的东西。

我不清楚'无关的'项目 - 是其他45项全部平等且不相关'到目标项目,如果是这样,你选择哪一个很重要?如果不相关的话,你可能需要从分数中拿分。项目出现在其中一个相关的'位置?标准的非参数相关度量可能无法捕捉到这种微妙之处。

如果您出于某种原因使用标准的,基于统计的衡量标准非常重要,那么您最好不要在Cross Validated上询问。

答案 1 :(得分:0)

如果您希望了解每个产品的排名如何比较

即使样本数量较少,您也可以使用相关系数方法 - 但是,您不会为每个产品获得非常确定的结果。事实上,可能没有任何方法可以采取

(注意 - 在已经排名的两个向量上使用Spearman将得到与Pearson相同的结果)

如果您希望了解您的排名如何与域名专家进行比较'排名更普遍:

由于您的50个列表不是彼此独立的,因此在此处使用聚合关联会有问题。一种更好的方法是根据你和领域专家为产品计算的实际相似性得分构建两个对称的50x50矩阵 - 这样 j i :th行是产品 i 和产品 j 之间的相似性,然后在两者之间使用Mantel测试。

此外,这个问题更多的是关于统计数据而不是编程 - 将来会发布像Crossneated这样的问题,比如@nekomatic说。