본문 바로가기
Python/Pandas

데이터 프레임의 행렬곱: AI의 기본

by 모두의 케빈 2022. 11. 22.

안녕하세요. 모두의 케빈입니다.

오늘은 데이터 프레임으로 행렬곱을 실습해보도록 하겠습니다.

 

■ 벡터의 곱과 행렬의 곱

 

두 벡터의 내적을 Dot Product이라고 합니다. 2차원 평면벡터에서 두 벡터 a(a1, a2)와 b(b1, b2)의 내적(방향 표시는 타이핑 이슈로 생략)은 각 성분끼리 곱하고 더하여 정의합니다. (a1*b1 + a2*b2)

이와 유사한 연산으로 선형 대수학에서는 행렬의 곱셈이라는 개념이 있습니다. 행렬의 곱셈은 두 행렬의 크기가 맞는 경우에만 가능합니다. 여기서 크기란, 앞 행렬의 수와 뒤 행렬의 열의 수가 일치하는 것을 의미합니다. 상세한 개념 설명은 나무 위키에서 참고해주세요.

신경망 모델에서 행렬은 벡터의 집합으로 모델링 되고 파라미터의 거의 모든 연산은 행렬의 연산으로 귀결됩니다. 그중에서도 행렬의 곱셈은 가장 기초가 되기 때문에, 반드시 되짚어 볼 필요성이 있습니다.

오늘은 나무 위키에 나온 두 행렬 A,B의 곱 연산을 파이썬으로 구현해보겠습니다.

 

■ 파이썬 코드

 

위 나무위키 링크에 나온 두 행렬 A, B를 데이터 프레임 형태로 만들고 dot() 메소드를 사용하면 됩니다. 이때, 행렬 곱이 가능한 이유는 A의 열의 수(3)와 B의 행의 수(3)가 일치하기 때문입니다.

import pandas as pd

A = pd.DataFrame([[80,90,60],[75,80,90],[90,95,65],[99,70,70]]) # 4 by 3
B = pd.DataFrame([[3,1], [3,8], [4,1]]) # 3 by 2

AB = A.dot(B)
AB

<그림 1> AB 행렬 곱 연산 과정

 

데이터 프레임을 numpy array로 바꾼 뒤, 행렬 곱을 진행할 수 있습니다. 결과 값은 동일하지만, numpy에 익숙하지 않으신 분이라면 아래 코드도 실행해서 익숙해지시는 것을 추천드립니다. 신경망 모델은 대부분 numpy 기반이니까요.

A_numpy = A.values # values를 사용하면 데이터 프레임의 값만 numpy ndarray 형태로 반환
B_numpy = B.values

AB_numpy = A_numpy.dot(B_numpy)
AB_numpy

 

 

궁금하신 점 있으시다면, 댓글 남겨주세요. :)

 

댓글