【问题标题】:How to compute cosine similarity on multi-type data?如何计算多类型数据的余弦相似度?
【发布时间】:2013-03-20 11:09:05
【问题描述】:
我在数据库中有记录(行),我想识别相似的记录。我有一个使用余弦相似度的约束。如果变量(属性、列)的类型不同并以这种形式出现:
[number] [number] [boolean] [20 words string]
如何进行矢量化以应用余弦相似度?对于字符串,我可以使用简单的 tf-idf。但是对于数字和布尔值呢?这怎么能结合起来呢?我的想法是向量的长度为 1+1+1+20。但是,仅将记录的数字转换为我的向量中的系数并将它们与字符串的 tf-idf 连接以计算余弦相似度在语义上是否“有效”?或者我可以将数字视为单词并将 tf-idf 也应用于数字。还有其他技术吗?
【问题讨论】:
标签:
similarity
trigonometry
cosine-similarity
【解决方案1】:
向量的每个位置元素都必须测量感兴趣实体的特定属性/特征。通常,当涉及单词时,每个可能出现的单词的计数都有一个向量元素。因此,您的向量的大小可能为 1 + 1 + 1 +(词汇大小)。
由于余弦相似度是根据数字计算的,因此您可能必须将非数字转换为数字。例如,您可以将 0, 1 用于布尔值。
您没有提及您的数字字段是代表测量值还是离散值(例如键)。如果数值是测量值,则余弦相似度非常适合(尽管如果不同属性的数字有不同的比例,它可能会使您的结果产生偏差)。但是,如果数字表示键,那么为每个字段使用单个属性将产生较差的结果,因为键 5 与 6 的距离并不比 200 更近。但余弦相似度不知道这一点。在数据库字段包含键的情况下,您可能希望每个可能的值都有一个布尔 (0, 1) 向量元素。