如何计算多类型数据的余弦相似度?

时间:2013-03-20 11:09:05

标签: similarity cosine cosine-similarity

我在数据库中有记录(行),我想识别类似的记录。我有一个限制使用余弦相似性。如果变量(属性,列)的类型不同并且以这种形式出现:

[number] [number] [boolean] [20 words string]

如何进行矢量化以应用余弦相似度?对于字符串,我可以采用简单的tf-idf。但是对于数字和布尔值?这怎么结合起来呢?我的想法是矢量长度为1 + 1 + 1 + 20。但是,将记录的数量转换为向量中的系数并将它们与字符串的tf-idf连接起来以计算余弦相似度,在语义上是“高效的”吗?或者我可以将数字视为单词并将tf-idf应用于数字。还有其他技术吗?

1 个答案:

答案 0 :(得分:0)

向量的每个位置元素必须测量感兴趣的实体的特定属性/特征。通常,当涉及单词时,存在可以出现的每个单词的计数的向量元素。因此,您的矢量可能具有1 + 1 + 1 +(词汇量)的大小。

因为余弦相似度是根据数字计算的,所以您可能必须将非数字转换为数字。例如,您可以使用0,1表示布尔值。

您没有提及数字字段是代表测量值还是离散值(例如,键)。如果数值是测量值,那么余弦相似性非常适合(尽管如果不同属性的数量存在不同的比例,则可能会使结果产生偏差)。但是,如果数字表示键,那么对每个字段使用单个属性将得到差的结果,因为5的键不比6更接近于6但是余弦相似性不知道。在数据库字段包含键的情况下,您可能希望为每个可能的值设置一个布尔(0,1)向量元素。