我有一個包含多列和多行的資料框。我想要求用戶輸入一個行號并輸出 3 個最相似的行。我想使用的排名策略是:
1- 每個屬性匹配的權重為 1
2-根據屬性的位置對匹配進行加權。
假設用戶輸入了行號“30”。行號“12”和“5”都有 5 個匹配元素,這是其中匹配分數最高的。行號“23”有 4 個匹配元素,這是第二高的匹配分數。
row-30 =[ 2 13 7 1 7 10 1 8 7 1]
row-12 =[11 5 4 1 7 13 1 8 7 4]
row-5 =[ 2 13 7 1 12 5 6 8 15 8]
row-23 =[ 2 10 5 1 3 10 9 10 7 6]
然后我想根據匹配的位置計算權重。最左邊的匹配應該得到最高分,最右邊的匹配應該得到最低分。
結果,排名應該是5-12-23。
我可以使用以下代碼塊根據第一個要求獲得正確的排名:
sorted(total_matchs, key=lambda x:x[1],reverse=True)[:3]
其中total_matchs是由行號和匹配分陣列成的元組串列。但是我無法為第二個要求構建正確的演算法,即基于位置的匹配權重。
有人可以幫助我正確的演算法嗎?
uj5u.com熱心網友回復:
你已經有了匹配數,很好。
然后我想根據匹配的位置計算權重。最左邊的匹配應該得到最高分,最右邊的匹配應該得到最低分。
我們希望對兩個不同的事物進行排序。一般來說,它們可以是任何可比較的東西,比如字串或實數,我們必須對 2 元組進行排序。
但在這里碰巧我們有整數計數,可以提升為 FP 分數。定義一個非常小的數字 epsilon 和一個最大索引 K:
eps = .001
k = 10
并用它把你的兩個值塞進一個 FP 號碼:
match_count eps * (k - index)
這樣的分數會很好地排序,然后您只需提取前三名,例如,這可能會給出 [2.007, 2.005, 2.001] 的“雙重匹配”分數
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/486565.html
