이번 문서의 목표: 이 파일을 다 읽으면 벡터·행렬의 기본 연산(내적, 곱셈)을 직접 계산하고, 선형결합·선형독립의 의미를 설명하며, 노름과 코사인 유사도로 두 데이터가 얼마나 비슷한지 계산할 수 있다.
왜 머신러닝에 선형대수가 필요한가
02편에서 데이터를 특징 행렬 와 타깃 벡터 로 표현한다고 배웠다. 이 표현이 의미를 가지려면 벡터·행렬에 대한 연산 규칙을 알아야 한다. 예를 들어 08편의 선형회귀 예측값은 “특징 벡터와 가중치 벡터의 내적”으로 계산되고, 12편의 K-최근접이웃은 “두 데이터 사이의 거리”로 이웃을 정하며, 17편의 PCA는 “분산을 최대화하는 방향(벡터)“을 찾는다. 이 모든 개념의 바탕에는 벡터·행렬 연산, 선형결합·선형독립, 거리·노름이라는 몇 가지 기초 선형대수 도구가 있다. 이 편에서는 증명이 아니라 “이 기호가 뭘 하는 연산인지, 실제 숫자로 어떻게 계산하는지”에 집중한다.
벡터와 행렬: 숫자를 순서 있게 묶은 것
쉽게 말하면: 벡터는 숫자를 한 줄로 세운 것, 행렬은 숫자를 여러 줄 여러 칸으로 늘어놓은 표다.
벡터(vector)는 숫자를 순서대로 나열한 것으로, 02편에서 본 특징 벡터 처럼 하나의 샘플이 가진 여러 특징값을 담는 데 쓰인다. 벡터의 원소 개수를 차원(dimension)이라 하며, 는 2차원 벡터다.
행렬(matrix)은 벡터를 여러 개 쌓아 만든 표로, 02편의 특징 행렬 가 그 예다. 개의 행과 개의 열을 가진 행렬을 ” 행렬”이라 부른다.
이 행렬은 3행 2열이므로 행렬이다. 표기할 때 는 번째 행, 번째 열의 원소를 가리킨다. 예를 들어 다(2번째 행, 1번째 열).
내적: 두 벡터를 하나의 숫자로 요약하기
쉽게 말하면: 내적은 두 벡터의 같은 위치에 있는 값끼리 곱한 뒤 모두 더해서, 두 벡터가 “같은 방향을 얼마나 공유하는지”를 숫자 하나로 나타낸 것이다.
내적(dot product, 스칼라곱)은 차원이 같은 두 벡터 과 에 대해 다음과 같이 정의된다.
- : 두 벡터의 번째 원소
- : 시그마, 를 1부터 까지 바꿔가며 뒤의 항을 모두 더하라는 기호
- 결과값은 벡터가 아니라 숫자 하나(스칼라, scalar)다
예를 들어 가중치 벡터 (면적에 곱할 가중치 2, 방 개수에 곱할 가중치 5라고 하자)와 특징 벡터 의 내적을 계산해 보자.
결과 해석: 08편에서 배울 선형회귀의 예측값은 정확히 이 내적 형태(가중치와 특징의 내적, 여기에 절편을 더한 값)로 계산된다. 즉 내적은 “각 특징에 중요도(가중치)를 매겨 곱한 뒤 다 더해 하나의 예측 점수로 요약하는 연산”이라고 이해하면 된다.
외적(cross product)은 3차원 벡터 두 개에 대해 정의되며, 두 벡터 모두에 수직인 새로운 벡터를 만들어 낸다(컴퓨터그래픽스의 법선 벡터 계산 등에 쓰인다). 이 과목이 다루는 회귀·분류·군집 알고리즘의 수식에는 외적이 직접 등장하지 않으므로, “내적은 두 벡터를 숫자 하나로 요약하고, 외적은 두 벡터로부터 새로운 벡터를 만들어낸다”는 개념적 차이만 구분해 두면 충분하다.
행렬 곱셈: 여러 개의 내적을 한 번에
쉽게 말하면: 행렬 곱셈은 앞 행렬의 각 행과 뒤 행렬의 각 열 사이의 내적을 모두 계산해 표로 정리한 것이다.
행렬 와 행렬 를 곱하면 행렬 가 나온다. 이때 곱셈이 성립하려면 앞 행렬의 열 개수와 뒤 행렬의 행 개수가 같아야 한다. 결과 행렬의 행 열 원소 는 의 번째 행과 의 번째 열의 내적이다.
특징 행렬 (3개 샘플, 2개 특징)와 가중치 벡터 를 열벡터( 행렬)로 놓고 곱해보자.
는 , 는 이므로 곱셈이 가능하고, 결과는 행렬(벡터)이다.
결과 해석: 의 각 행은 앞서 계산한 내적과 정확히 같은 방식으로, 각 샘플(행)에 가중치 벡터를 적용한 예측 점수다. 즉 행렬 곱셈 한 번으로 3개 샘플 전체의 예측값을 동시에 계산한 것이며, 이는 08편에서 여러 샘플의 선형회귀 예측을 한꺼번에 로 표현하는 방식 그대로다.
선형결합과 선형독립
쉽게 말하면: 선형결합은 벡터들을 각각 몇 배씩 늘리거나 줄여서 더하는 것이고, 선형독립은 그 벡터들 중 어느 하나도 나머지의 조합으로는 만들어낼 수 없는 상태를 말한다.
선형결합(linear combination)은 벡터 에 각각 숫자(계수) 를 곱한 뒤 더한 결과다.
예를 들어 , 이라면, 가 되어, 계수 를 골라 원하는 벡터 를 만든 것이다.
선형독립(linearly independent)은 벡터 집합 중 어느 벡터도 나머지 벡터들의 선형결합으로 표현할 수 없는 상태를 말한다. 반대로 어떤 벡터를 나머지의 선형결합으로 만들 수 있으면 선형종속(linearly dependent)이라 한다.
예를 들어 , 는 이므로 선형종속이다. 반면 , 은 어떤 숫자 를 곱해도 가 이 될 수 없으므로(첫 원소를 3으로 맞추려면 인데, 그러면 두 번째 원소는 이 되어 과 다르다) 선형독립이다.
왜 머신러닝에서 중요한가: 두 특징이 선형종속에 가까우면(예: “섭씨 온도”와 “화씨 온도”처럼 한 특징이 다른 특징의 거의 상수배라면), 이 두 특징은 사실상 같은 정보를 중복해서 담고 있는 것이다. 이런 상태를 다중공선성(multicollinearity)이라 하며, 08~09편의 회귀 계수 해석을 불안정하게 만드는 대표적인 원인이다. 16편의 차원 저주와 17편의 PCA는 바로 이렇게 중복되거나 거의 종속적인 특징들을 정리해 더 적은 수의, 서로 독립에 가까운 새로운 축으로 데이터를 표현하는 방법이다.
노름: 벡터의 크기를 재는 자
쉽게 말하면: 노름은 벡터의 “길이”를 재는 방법인데, 재는 방식(자)에 따라 값이 달라질 수 있다.
노름(norm)은 벡터의 크기(길이)를 숫자로 나타내는 함수다. 머신러닝에서 가장 많이 쓰이는 두 가지는 다음과 같다.
L1 노름(맨해튼 노름)은 각 원소의 절댓값을 모두 더한 값이다.
L2 노름(유클리드 노름)은 각 원소를 제곱해 더한 뒤 제곱근을 씌운 값으로, 우리가 일상적으로 아는 “직선 거리”에 해당한다.
- : 노름 기호. 아래 첨자 1, 2는 L1 노름인지 L2 노름인지를 나타낸다.
- : 의 절댓값(부호를 떼고 크기만 취한 값)
벡터 의 두 노름을 계산해 보자.
결과 해석: 같은 벡터인데도 L1 노름은 7, L2 노름은 5로 값이 다르다. L1 노름은 “각 방향으로 이동한 거리를 그냥 합산”(마치 바둑판 모양 도로에서 이동한 거리)한 것이고, L2 노름은 “출발점에서 도착점까지의 직선 최단 거리(빗변)“다. 09편에서 라쏘(Lasso) 회귀는 L1 노름을, 릿지(Ridge) 회귀는 L2 노름을 정규화 항으로 사용하는데, 두 노름의 이 기하학적 차이가 라쏘는 일부 계수를 정확히 0으로 만들고(변수 선택 효과) 릿지는 계수를 0에 가깝게만 줄이는(0이 되지는 않는) 차이로 이어진다.
거리와 코사인 유사도: 두 데이터가 얼마나 비슷한가
쉽게 말하면: 유클리드 거리는 두 점 사이의 직선 거리이고, 코사인 유사도는 두 벡터가 얼마나 같은 방향을 가리키는지를 재는 척도다.
두 벡터 , 사이의 유클리드 거리(Euclidean distance)는 두 벡터의 차 의 L2 노름으로 정의된다.
집 1(면적 60, 방 2개)과 집 2(면적 85, 방 3개)를 벡터 , 으로 놓고 거리를 계산해 보자.
이 거리값은 12편의 K-최근접이웃(K-NN)에서 “어떤 샘플이 어떤 샘플과 가까운 이웃인가”를 판정하는 데 그대로 쓰인다.
코사인 유사도(cosine similarity)는 두 벡터 사이의 각도를 이용해 방향이 얼마나 비슷한지를 나타내는 척도로, 다음과 같이 정의한다.
- : 세타, 두 벡터 사이의 각도
- : 두 벡터의 내적(앞에서 정의)
- : 각 벡터의 L2 노름(길이)
값의 범위는 부터 까지이며, 이면 완전히 같은 방향, 이면 서로 직각(관련 없음), 이면 정반대 방향을 뜻한다. 문서 벡터 과 의 코사인 유사도를 계산해 보자(두 벡터는 방향은 같지만 길이가 다르다).
결과 해석: 코사인 유사도가 정확히 1로 나왔다. 이는 두 벡터의 길이(하나는 다른 하나의 2배)가 달라도 방향이 완전히 같기 때문이다. 이런 성질 때문에 코사인 유사도는 “문서의 길이 차이는 무시하고 단어 사용 패턴(방향)만 비교하고 싶을 때”처럼, 유클리드 거리와는 다른 관점의 유사도가 필요할 때 쓰인다. 유클리드 거리는 크기(길이) 차이에 민감하지만, 코사인 유사도는 크기와 무관하게 방향만 본다는 차이를 기억해 두자.
자주 틀리는 점
- 행렬 곱셈에서 “앞 행렬의 열 개수 = 뒤 행렬의 행 개수” 조건을 확인하지 않고 아무 순서로나 곱하려 한다.
- L1 노름과 L2 노름을 혼동한다. 절댓값의 합이면 L1, 제곱해서 더한 뒤 제곱근이면 L2로 구분한다.
- 유클리드 거리와 코사인 유사도를 같은 개념으로 착각한다. 거리는 값이 작을수록 가깝다(비슷하다)는 뜻이지만, 코사인 유사도는 값이 클수록(1에 가까울수록) 비슷하다는 뜻으로 방향이 반대다.
- 선형종속을 “두 벡터가 완전히 똑같다”는 뜻으로 오해한다. 정확히는 한쪽이 다른 쪽(들)의 선형결합으로 표현될 수 있다는 뜻으로, 배수 관계()도 선형종속에 포함된다.
핵심 정리
- 벡터는 숫자를 순서대로 나열한 것, 행렬은 벡터를 여러 개 쌓은 표이며, 특징 행렬·타깃 벡터는 이 표현을 데이터에 적용한 것이다.
- 내적 은 두 벡터를 숫자 하나로 요약하고, 행렬 곱셈은 여러 내적을 한 번에 계산한다.
- 선형결합은 벡터들의 가중합, 선형독립은 어느 벡터도 나머지의 선형결합으로 표현할 수 없는 상태다.
- L1 노름(절댓값의 합)과 L2 노름(제곱합의 제곱근)은 벡터 크기를 재는 서로 다른 방식이며, 유클리드 거리는 두 벡터 차의 L2 노름, 코사인 유사도는 두 벡터 사이 각도의 코사인 값이다.
마무리 복습
참고 자료
- Dimensionality Reduction 강의 노트 (PCA, LDA) — 벡터·행렬 연산이 PCA·LDA의 분산 최대화 계산에 쓰이는 방식 참고
- scikit-learn User Guide — 거리·유사도 지표가 K-NN, 군집 알고리즘에서 쓰이는 방식 참고