2013-08-04 2 views
3

다음은 벡터 사이의 유클리드 거리 및 변환 된 데이터 세트 (벡터) 스 니펫을 계산하는 코드입니다. 벡터 사이벡터 간의 유클리드 거리를 유사성 점수로 변환하는 방법

import itertools 
import numpy as np 

vect=[[2, 1, 1, 1, 1, 3, 4, 2, 5, 1], 
[1, 5, 2, 1, 1, 1, 1, 1, 1, 2], 
[2, 1, 1, 1, 2, 1, 1, 1, 1, 1]] 

for u1, u2 in itertools.combinations(vect, 2): 
    x = np.array(u1) 
    y = np.array(u2) 
    space = np.linalg.norm(y - x) 
    print space 

유클리드 거리이다 :

7.0 
5.56776436283 
4.472135955 

내 목표 벡터와 각 출력 비교 유사성 점수 사이의 유사도를 계산하는 것이다. 일반적인 유사성 점수는 0과 1 사이에 있으며, 0은 유사하지 않으며 1은 정확히 유사합니다. 여기서 유클리드 거리를 유사성 점수로 변환 할 수있는 방법은 무엇입니까? 누군가이 공식을 제안했습니다 : 1/1 + d (P1, P2) 즉 Euclidean distance의 역행렬 = 유사성 점수. 제안 사항이 있습니까? 덕분에

+0

제안이 작동하지 않습니까? – sihrc

+0

그것은 나에게 의미가 있지만 아직 시도하지 않았습니다. 저 밖에 더 좋은 아이디어가 있기를 바랄뿐입니다. – Tiger1

+2

정말 유사성을 정의하는 방법에 달려 있습니다. '(-1, -1)'이'(5, 2)'와 ((1000, 0)'이 (1007, 0)'보다 더 유사해야합니까? 그렇다면 거리 정보가 충분하지 않습니다. 또한이 정보를 사용하려는 대상과 규모 요구 사항에 따라 다릅니다. – user2357112

답변

1

거기에 많은 유사성 대책이 있습니다. user2357112에서 말한 것처럼 으로 가장 적합합니다. 나는 여기에 나열된 커널의 일부에서 살펴 본다 제안 : 내 응용 프로그램에서 좋은 기본 선택 될 수있는 카이 제곱 커널을 발견

http://crsouza.blogspot.co.uk/2010/03/kernel-functions-for-machine-learning.html

- 벡터가 히스토그램 특히합니다.

당신이 이미 알고있는 데이터의 하위 집합이 있다면 서로 비슷한 것으로하고 싶습니다. 다른 커널을 시험해보고 결과 샘플을 비교하여 유사성 매트릭스를 그릴 것을 제안합니다 (100 개의 테스트 샘플이있는 경우). matplotlib.pyplot의 imshow 메소드를 사용하여 단순 히 히트 맵으로 그릴 수있는 100x100 유사 매트릭스를 얻을 수 있습니다.

관련 문제