如果项目的顺序很重要,并且类似于贾卡德指数之类的东西,那么如何计算相似度(系数)就没有用了。
具体来说,我对比较配料感兴趣。举个简单的苹果派配料清单为例:
然后将其与以下内容进行比较:
即使你天真地认为#2中的替代物是相似的,那么#2的集合比原来的#1更相似。有没有一种算法可以表达这一点呢?
发布于 2019-08-03 00:24:44
对一个有趣的问题的迟答:
在项目顺序重要的情况下,如何计算相似度(系数)?
这正是基于字符的近似字符串匹配度量所做的,因为字符串是一个有序的字符列表。因此,我们的想法是将列表中的每个元素作为字符串中的一个字符,并应用该算法。主要的基于特征的措施是:
我建议前者,因为它有一个更明确的解释,可能是更普遍的使用。
发布于 2019-03-05 22:51:16
不确定这是否已经存在,但是也许您可以通过一些需求构建一个新的相似性度量(让我们称之为js):
然后,您可以构建一个基本完成以下操作的方法(例如,在python中):
def js(A, B):
cummulative_score = 0
longest_list = B
shortest_list = A
if len(A) > len(B):
longest_list = A
shortest_list = B
for index, element in enumerate(longest_list):
if index < len(shortest_list):
if element == shortest_list[index]:
cummulative_score += 1
if element != shortest_list[index]:
if element in shortest_list:
cummulative_score += 0.5
return cummulative_score / len(longest_list)然后你就会得到这样的东西:
In [10]: print(l)
['Apples', 'Enriched Unbleached Flour', 'Palm Oil', 'High Fructose Corn Syrup', 'Salt', 'Eggs', 'Spices']
In [11]: print(l1)
['Apples', 'Enriched Unbleached Flour', 'vegetable oil', 'sugar', 'Salt', 'Eggs', 'Spices']
In [12]: print(l2)
['Spices', 'Eggs', 'Salt', 'High Fructose Corn Syrup', 'Palm Oil', 'Enriched Unbleached Flour', 'Apples']
In [13]: print(l3)
['Enriched Unbleached Flour', 'Palm Oil', 'High Fructose Corn Syrup', 'Salt', 'Eggs', 'Spices', 'Apples']
In [14]: print(l4)
['Apples', 'Enriched Unbleached Flour', 'Palm Oil', 'High Fructose Corn Syrup', 'Salt', 'Eggs', 'Spices', 'Ice Cream']
In [15]: js(l, l1)
Out[15]: 0.7142857142857143
In [16]: js(l, l2)
Out[16]: 0.5714285714285714
In [17]: js(l, l3)
Out[17]: 0.5
In [18]: js(l, l4)
Out[18]: 0.875
In [19]: js(l, ['Nutella'])
Out[19]: 0.0https://datascience.stackexchange.com/questions/46727
复制相似问题