Python 假设我有两个向量。我可以使用什么算法来比较它们?

Python 假设我有两个向量。我可以使用什么算法来比较它们?,python,list,text,vector,Python,List,Text,Vector,公司1有这样的载体: ['books','video','photography','food','toothpaste','burgers'] ... ... ['video','processor','photography','LCD','power supply', 'books'] ... ... 公司2有这样的载体: ['books','video','photography','food','toothpaste','burgers'] ... ... ['video','p

公司1有这样的载体:

['books','video','photography','food','toothpaste','burgers'] ... ...
['video','processor','photography','LCD','power supply', 'books'] ... ...
公司2有这样的载体:

['books','video','photography','food','toothpaste','burgers'] ... ...
['video','processor','photography','LCD','power supply', 'books'] ... ...
假设这是一个频率分布(我可以将其设置为一个元组,但输入太多)。
正如你所看到的…这些向量有重叠的部分。“视频”和“摄影”在两个向量之间似乎“相似”,因为它们处于相似的位置。而且……“书籍”显然是第一公司的优势。 订购和定位很重要,因为这是一个频率分布

你可以用什么算法来处理这个问题?使用这些向量,您可以使用哪些算法为这些公司提供有价值的数据


我不熟悉文本挖掘和信息检索。有人能给我介绍一下与这个问题相关的主题吗?

看一下

看一下

你可以使用这个算法。必须首先对这2个向量进行排序(使用sort调用),然后传入4个迭代器,然后您将得到一个包含插入其中的公共元素的集合。还有其他一些类似的做法

您可以使用该算法。必须首先对这2个向量进行排序(使用sort调用),然后传入4个迭代器,然后您将得到一个包含插入其中的公共元素的集合。还有其他一些类似的做法

我建议你读一本书,书名是。
这是一本非常好的书,介绍了如何从像这样的简单数据中检索信息。包含了一些代码示例(在Python中:)

编辑: 回答gbjbaanb:这是Python

a = ['books','video','photography','food','toothpaste','burgers']
b = ['video','processor','photography','LCD','power supply', 'books']
a = set(a)
b = set(b)

a.intersection(b)
    set(['photography', 'books', 'video'])

b.intersection(a)
    set(['photography', 'books', 'video'])

b.difference(a)
    set(['LCD', 'power supply', 'processor'])

a.difference(b)
    set(['food', 'toothpaste', 'burgers'])

我建议你读一本书,书名是。
这是一本非常好的书,介绍了如何从像这样的简单数据中检索信息。包含了一些代码示例(在Python中:)

编辑: 回答gbjbaanb:这是Python

a = ['books','video','photography','food','toothpaste','burgers']
b = ['video','processor','photography','LCD','power supply', 'books']
a = set(a)
b = set(b)

a.intersection(b)
    set(['photography', 'books', 'video'])

b.intersection(a)
    set(['photography', 'books', 'video'])

b.difference(a)
    set(['LCD', 'power supply', 'processor'])

a.difference(b)
    set(['food', 'toothpaste', 'burgers'])

正如mbg所提到的,汉明距离是一个良好的开端。它基本上是为每个可能的项分配一个位掩码,无论它是否包含在companys值中

牙膏对A公司来说是1,但对B公司来说是0。然后计算不同公司之间的比特数。Jaccard系数与此相关

海明距离实际上无法捕捉“视频”和“摄影”等事物之间的相似性。显然,销售一种牙膏的公司销售另一种牙膏的可能性也高于销售牙膏的公司


为此,您可以使用LSI(它也用于降维)或阶乘代码(例如,神经网络的东西,如受限玻尔兹曼机器、自动编码器或可预测性最小化)来获得更紧凑的表示,然后可以使用欧几里德距离进行比较。

如mbg所述,汉明距离是一个良好的开端。它基本上是为每个可能的项分配一个位掩码,无论它是否包含在companys值中

牙膏对A公司来说是1,但对B公司来说是0。然后计算不同公司之间的比特数。Jaccard系数与此相关

海明距离实际上无法捕捉“视频”和“摄影”等事物之间的相似性。显然,销售一种牙膏的公司销售另一种牙膏的可能性也高于销售牙膏的公司


为此,您可以使用LSI(它也用于降维)或阶乘代码(例如,神经网络的东西,如受限玻尔兹曼机器、自动编码器或可预测性最小化)来获得更紧凑的表示,然后可以使用欧几里德距离进行比较。

是位置非常重要,正如您所强调的,关键度量将基于不同向量中相同项之间的位置差(例如,您可以求差的绝对值之和或其平方)。需要解决的一个大问题是——在一个向量中存在(假设它是第N个向量),而在另一个向量中完全不存在的一个项目的重量是多少。这是一个相对较小的问题——比如说,好像丢失的东西实际上就在实际的东西之后出现——还是一个非常非常大的问题?如果不进一步了解实际应用领域,这是不可能的。您可以尝试各种方法来处理此问题,并查看他们在您关心的示例案例中给出的结果

例如,假设“缺少的项目与存在的项目大致相同,紧跟在实际项目之后”。然后,您可以将每个输入向量预处理为一个dict映射项以定位(如果您必须比较多对输入向量,则关键的优化!):

然后,比较两个这样的格言:

def comparedicts(d1, d2):
  allitems = set(d1) | set(d2)      
  distances = [d1.get(x, len(d1)) - d2.get(x, len(d2)) for x in allitems]
  return sum(d * d for d in distances)

(或者,用abs(d)代替上一句中的平方)。要使丢失的项目更重(使DICT,即向量,被认为更远),可以在其他类似结构的程序中使用两倍的长度,而不仅仅是长度,或一些大常量,如100。

是位置非常重要,正如您所强调的,然后,关键度量将基于不同向量中相同项之间的位置差(例如,您可以将差异的绝对值或其平方相加)。需要解决的一个大问题是——在一个向量中存在(假设它是第N个向量),而在另一个向量中完全不存在的一个项目的重量是多少。这是一个相对较小的问题——比如说,好像丢失的东西实际上就在实际的东西之后出现——还是一个非常非常大的问题?如果不进一步了解实际应用领域,这是不可能的。您可以尝试各种方法来处理此问题,并查看他们在您关心的示例案例中给出的结果

例如,假设“缺少的项目与存在的项目大致相同,紧跟在实际项目之后”。然后,可以将每个输入向量预处理为dict映射