Big Ben
Big Ben's Log
Big Ben
전체 방문자
오늘
어제
  • 전체 글 (80)
    • 파이썬 (23)
      • 파이썬 기초 (5)
      • 클래스 (6)
      • 자료구조 (4)
      • Tensorflow (3)
      • PyTorch (2)
      • konlpy (1)
      • anaconda (1)
    • 머신러닝 (3)
      • 선형회귀 (1)
      • Tree 기반 (1)
    • 딥러닝 (6)
      • NLP (2)
      • VISION (2)
      • TABULAR (0)
      • 딥러닝 서버 구축 (2)
    • 그래프 이론 (1)
      • 그래프마이닝 (1)
      • GNN (0)
    • 강화학습 (3)
      • 강화학습 기본 (3)
    • 인공지능 (5)
    • 추천시스템 (2)
      • 추천시스템 기초 (2)
    • Competitions (1)
    • 빅데이터 (8)
      • 하둡 (3)
      • 스파크 (4)
      • 클라우드 (1)
    • SQL (7)
      • MariaDB (2)
    • 논문 리뷰 (2)
    • 대학원 (0)
      • 데이터 사이언스 (0)
      • 경제학 (0)
    • 선형대수학 (7)
      • 선형대수 ICE BREAKING (1)
      • 벡터 (5)
      • 고윳값 (1)
    • 개인프로젝트 (0)
      • 포트폴리오 대시보드 + AI기반 주식 자동매매 (0)
    • 재테크 (1)
    • 자동차 (0)
    • 알고리즘 (11)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • 선형대수학
  • 딥러닝
  • mysql
  • 프로그래머스
  • 객체
  • 알고리즘
  • 빅데이터
  • PYTHON
  • 파이썬기초
  • 선형대수
  • class
  • 하둡
  • TensorFlow
  • sql
  • pytorch
  • 머신러닝
  • 객체지향
  • 프로그래밍
  • 파이썬
  • 데이터
  • 인공지능
  • 백준
  • 코딩테스트
  • 자료구조
  • 데이터베이스
  • 데이터사이언스
  • Baekjoon
  • MariaDB
  • 코테
  • AI

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Big Ben

Big Ben's Log

[python] 유클리드 거리 (Euclidean Distance) - 기초
추천시스템/추천시스템 기초

[python] 유클리드 거리 (Euclidean Distance) - 기초

2022. 12. 21. 18:00
반응형

유클리드 거리는 크기로만 비교한다는 명확한 단점이 있어서 사실 추천시스템에서 유용한 방법은 아니라고 알려져있다.

 

하지만 선형대수 관점에서 유클리드 거리가 단순히 크기만 뜻하는 것이 아니라, 현실 세계에서 어떻게 접목되고 활용되는지 알 수 있는 것만으로도 큰 도움이 되리라 생각한다.

 

또한 시도해보는 것 자체만으로 다른 개념을 이해할 때 큰 도움이 되리라 생각한다.

 

엑셀 테이블에 고객의 데이터가 저장되어 있다고 가정해보자.

 

이를 테면 아래와 같은 테이블처럼 고객 데이터가 있을 때, 이 데이터를 euclidean distance 개념에 입각해서 어떻게 활용할 수 있을까?

 

고객명 키 몸무게 나이 성별
박미영 160 50 23 여성
아이윳 155 48 27 여성
이순신 175 71 31 남성
강감찬 176 75 28 남성

 

단순하다. 

범주형 변수는 숫자형 변수로 바꿔주고, 

 

하나의 행을 벡터로 보고 각 벡터별로 거리를 구하면 된다.

 

비슷한 유형의 데이터는 거리가 가까울 것이며, 

 

그렇지 않은 유형의 데이터는 거리가 멀 것이다.

 

여기서는 단순한 예제이기에 성별별로 거리가 멀고 가까움을 알 수 있다.

 

위 이미지에 입각해서 데이터간의 거리를 생각해보자

# 유클리드 거리를 이용한 유사도 측정

import numpy as np
import pandas as pd


def euclidean_dist(x, y):
    return np.sqrt(np.sum((x - y) ** 2))


# (height, weight, age, sex(man=0, woman=1))
woman1 = pd.Series([160, 50, 23, 1], name='woman1')
woman2 = pd.Series([155, 48, 27, 1], name='woman2')
man1 = pd.Series([175, 72, 31, 0], name='man1')
man2 = pd.Series([176, 75, 28, 0], name='man2')

lst = [woman1, woman2, man1, man2]
# print(li)


def recommend_by_dist(li):
    for i in range(0, len(lst)-1):
        for j in range(i+1, len(lst)):
            x, y = lst[i], lst[j]
            print('distance between {} and {}: {}'.format(x.name, y.name, euclidean_dist(x, y)))

recommend_by_dist(lst)

 

# 출력 결과물: 
distance between woman1 and woman2: 6.708203932499369
distance between woman1 and man1: 27.820855486487112
distance between woman1 and man2: 30.116440692751194
distance between woman2 and man1: 31.51190251317746
distance between woman2 and man2: 34.23448553724738
distance between man1 and man2: 4.358898943540674

 

같은 성별끼리는 거리가 가깝고, 다른 성별끼리는 거리가 멀게 나온 것을 확인할 수 있다.

 

유클리드 거리에 기반한 유사도는 방향이나 패턴을 전혀 고려하지 않았다는 점에서 한계가 명확하며,

 

자카드나 코사인 유사도의 활용성이 더 좋다는 것을 알아두자

반응형
저작자표시 (새창열림)

'추천시스템 > 추천시스템 기초' 카테고리의 다른 글

[python] 코사인 유사도를 이용한 추천시스템 - 기초  (0) 2022.12.22
    '추천시스템/추천시스템 기초' 카테고리의 다른 글
    • [python] 코사인 유사도를 이용한 추천시스템 - 기초
    Big Ben
    Big Ben
    Data Scientist

    티스토리툴바