유사도 계산을 위해 Jaccard 계수를 계산하기 위해선,

두 행렬간의 합집합 수와 교집합 수가 필요함.


Jaccard's coefficient = 교집합 수 / 합집합 수



PHP에서 이를 배열로 구현했을 경우 가장 빠른 방법이라 생각되는 로직.

포인트는 교집합수로 합집합수를 계산해 내는 것.




<?PHP

// 아래 배열 2개를 비교한다고 가정함.

// 속도 향상을 위해 값이 아닌 키를 사용. 값은 전부 0 으로 동일.

$arr1 = array('key1'=>0, 'key2'=>0, 'key3'=>0);

$arr2 = array('key2'=>0, 'key3'=>0, 'key4'=>0, 'key5'=>0);


// 교집합 (= 2 = key2, key3)

$intersect count(array_intersect_key($arr1, $arr2));

// 합집합 (= 5 = key1, key2, key3, key4, key5)

$cnt1 = count($arr1);

$cnt2 = count($arr2);

$union = $cnt1 + $cnt2 - $intersect;


// Jaccard's coefficient (= 0.4 = 2/5)

$jaccardC = $intersect / $union;







Posted by bloodguy
,