2013-03-20 85 views
0

我有记录(行)在数据库中,我想识别相似的记录。我有一个使用余弦相似性的约束。如果变量(属性,列)的类型而有所不同,并提出以这种形式:如何计算多类型数据的余弦相似度?

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

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

回答

0

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

由于余弦相似度计算基础上的数字,你可能需要非数字转换为数字。例如,您可以使用0,1来表示布尔值。

你不提你的数字字段是否代表测量或离散值(例如,键)。如果数值是测量值,则余弦相似性是非常合适的(尽管如果不同属性的数量有不同的比例,它可能会偏差你的结果)。但是,如果数字代表关键字,那么对每个字段使用单个属性将会导致较差的结果,因为5的关键点不会接近6而不是200关系,但是余弦相似性不知道这一点。在数据库字段包含密钥的情况下,您可能希望为每个可能的值都有一个布尔(0,1)向量元素。