유사도 계산을 위해 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;
'PHP' 카테고리의 다른 글
[PHP] 시그널 핸들러 사용하기 (signal handler, SIGTERM) (0) | 2012.09.11 |
---|---|
[PHP] 지역변수, 클래스 멤버변수에 배열대입시 시간 (local variable, class member) (0) | 2012.09.07 |
[PHP] gzdecode() 함수가 없다고 에러 나올 때 (1) | 2012.08.28 |
[PHP] 이미지 바이너리 데이터 가져와서 <img> 태그를 이용해 출력하기. (0) | 2012.08.26 |
[PHP] 흥미도 측정 (Interestingness measure) (2) | 2012.05.16 |