如何为匹配的数据框列赋予权重?
How to give weights to matching dataframe columns?
我有一个包含多列和多行的数据框。我想要求用户输入行号并输出 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 是由行号和匹配分数组成的元组列表。但是我无法为基于位置的匹配权重的第二个要求构建正确的算法。
谁能帮我找到正确的算法?
你已经有了匹配计数,很好。
Then I want to calculate the weights based on the position of the matches. The left-most match should get the highest score and the right-most match should get the lowest score.
我们希望对两件不同的事情进行分类。
一般来说,它们可以是任何可比较的东西,比如字符串或实数,
我们必须对 2 元组进行排序。
但这里碰巧我们有整数计数,可以提升为 FP 分数。定义一个非常小的数 epsilon 和一个最大索引 K:
eps = .001
k = 10
并用它把你的两个值塞进一个 FP 数中:
match_count + eps * (k - index)
这样的分数会很好排序,然后你就把前三名提取出来,
例如,它可能给出 [2.007, 2.005, 2.001]
的“双重匹配”分数
我有一个包含多列和多行的数据框。我想要求用户输入行号并输出 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 是由行号和匹配分数组成的元组列表。但是我无法为基于位置的匹配权重的第二个要求构建正确的算法。
谁能帮我找到正确的算法?
你已经有了匹配计数,很好。
Then I want to calculate the weights based on the position of the matches. The left-most match should get the highest score and the right-most match should get the lowest score.
我们希望对两件不同的事情进行分类。 一般来说,它们可以是任何可比较的东西,比如字符串或实数, 我们必须对 2 元组进行排序。
但这里碰巧我们有整数计数,可以提升为 FP 分数。定义一个非常小的数 epsilon 和一个最大索引 K:
eps = .001
k = 10
并用它把你的两个值塞进一个 FP 数中:
match_count + eps * (k - index)
这样的分数会很好排序,然后你就把前三名提取出来, 例如,它可能给出 [2.007, 2.005, 2.001]
的“双重匹配”分数