Mathematics for AI #10
행렬로 결괏값 구하기
*출제자의 한 마디*
저번 시간에는 데이터의 유사도를 측정하는 방법에 대하여 간단히 살펴보았습니다. 인공지능이 데이터를 바탕으로 수행하는 주요 업무인 ‘판단’과 ‘예측’을 어떻게 수행하는지에 대하여 간단하게 살펴보았습니다. 이를 잘 수행하기 위해서는 주어진 데이터의 특징을 파악하여 유사한 데이터끼리 묶어주는 ‘분류’ 작업이 반드시 필요한데요. 이를 위해 먼저 데이터를 좌표와 벡터로 나타낸 후, 두 데이터 사이의 거리를 계산해서 유사도를 측정하는 법을 배웠습니다. 이를 통해 두 데이터의 거리가 가까우면 유사하다고 판단하고, 거리가 멀면 관계없다고 판단할 수 있었습니다.
이번 시간에는 행렬을 이용하여 결괏값을 구하는 방법에 대하여 간단히 살펴봅시다.
--------------
행렬로 결괏값 구하기
행렬은 어떤 수를 행과 열에 맞춰 나열한 것입니다. 이때 행 또는 열 1개로만 이뤄진 행렬을 ‘벡터’라고 부릅니다. 즉, 행렬은 벡터로 구성된 셈입니다. 1월호에서는 데이터를 좌표와 벡터로 나타내는 법을 배웠죠. 이번에는 수많은 데이터 중 우리가 원하는 결괏값을 얻는 법을 배우겠습니다.
결괏값은 미지수 ,
, …,
으로 표현할 수 있습니다. 이 값을 구하기 위해 미지수에 관한 방정식을 세웁니다. 예를 들어 100원짜리 동전
개와 500원짜리 동전
개가 합쳐서 35개이고, 총액은 8300원이라고 가정해봅시다. 이때 100원짜리 동전과 500원짜리 동전의 개수를 각각 구하려면 다음과 같이 연립방정식을 세웁니다.
미지수가 2개인 연립방정식은 어느 한 방정식을 다른 방정식에 대입하거나, 두 방정식을 변끼리 더하거나 빼서 미지수가 1개인 일차방정식으로 만들어 해를 구합니다. ➊번 식을 에 대해 정리하면
=35-
입니다. 이것을 ➋번 식의
에 대입하면
의 값은 23,
의 값은 12라는 것을 알 수 있죠.
하지만 미지수가 너무 많으면 계산이 어렵습니다. 이때 행렬을 사용합니다. 많은 미지수의
값을 구하기 위해 세운 방정식을 선형연립방정식이라고 하죠. 이 방정식을 행렬로 표현해 컴퓨터가 이해할 수 있도록 나타낸 후, 코딩을 이용해 결괏값을 구할 수 있습니다. 예를 들어 미지수 ,
,
에 대한 다음과 같은 선형연립방정식이 있습니다.
여기서 계수와 미지수, 상수항을 행렬로 각각 로 나타냅니다. 미지수와 상수항이 열이 1개인 벡터로 표현된 것, 보이시나요? 이제 이 선형연립방정식을 다음과 같이 간단하게 나타낼 수 있습니다.
Ax = b
데이터가 아주 많은 경우에도 같은 방식으로 표현할 수 있습니다. 미지수가 n개고 상수항이 m개라면 다음과 같이 행렬로 나타낼 수 있죠. (m≥n, i는 1 이상 m 이하의 자연수, j는 1 이상 n 이하의 자연수)
--------------
문제
다음 연립방정식의 해를 구해보세요.
풀이에 필요한 SageMath 코딩 명령어
①
a1 = vector([1, 2, 3])
a2 = vector([2, 5, 3])
a3 = vector([1, 0, 8])
방정식의 계수들을 벡터의 형태로 입력한다.
②
A = matrix([a1, a2, a3])
계수 벡터로 계수행렬 A를 만든다.
③
b = vector([1, 3, -1])
상수항을 벡터의 형태로 입력한다.
④
print(A.solve_right(b))
결과를 출력한다.
-끝-