2013-03-20 6 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의 키가 200보다 6에 더 가깝기 때문에 각 필드에 단일 속성을 사용하면 결과가 좋지 않습니다. 그러나 코사인 유사도는이를 알지 못합니다. 데이터베이스 필드에 키가있는 경우 각 가능한 값에 대해 부울 (0, 1) 벡터 요소가 필요할 수 있습니다.