반응형
    
    
    
  아래와 같이 5개의 점이 있다고 합시다.
P1=c(1,2,3)
P2=c(3,5,2)
P3=c(5,5,4)
P4=c(1,4,7)
P5=c(2,2,4)
이들 중 어느 두 점이 가장 가까운 거리에 있는지 알고 싶은 상황입니다. 일반적으로 알고 있는 유클리드 거리가 아닌 코사인 거리를 행렬 형태로 출력해보겠습니다. 코사인 각도는 원점과 각 점을 잇는 벡터들 사이 각도의 코사인 값입니다.
먼저 위 점들을 하나의 행렬로 묶어줍니다.
mat1=matrix(c(P1,P2,P3,P4,P5),byrow=TRUE,nrow=5)
> mat1
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    3    5    2
[3,]    5    5    4
[4,]    1    4    7
[5,]    2    2    4
코사인 거리를 계산할 때는 dist 함수에서 method 를 cosine 으로 설정해주면 됩니다. 이때 사용하는 dist 함수는 base 패키지의 함수가 아니라, proxy 패키지의 dist 함수입니다.
library(proxy)
> dist(mat1,method='cosine')
           1          2          3          4
2 0.17624553                                 
3 0.11176521 0.04153232                      
4 0.01307246 0.26118117 0.19696970           
5 0.01801949 0.20528059 0.09546597 0.04521408
P2와 P3사이의 코사인거리가 가장 가깝습니다.
반응형
    
    
    
  'R 주제 > 통게분석(임시)' 카테고리의 다른 글
| [R강의] 999. 평균절대편차, 중앙값절대편차 구하는 법 (0) | 2022.04.30 | 
|---|---|
| [R강의] 140. For 문을 While 문으로 바꾸는 방법 (0) | 2022.04.28 | 
| R의 lapply 함수(리스트에 원하는 함수를 원하는 방향으로 적용) (0) | 2021.03.18 | 
| R의 apply 함수(함수를 배열에 원하는 방향으로 적용) (0) | 2021.03.18 | 
| R에서 날짜 데이터의 연산하기 (0) | 2021.03.18 | 
댓글