2016-11-25 133 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說的那樣。