12강 / 20강

랭크 — 진짜 정보는 몇 줄인가

식이 셋이라고 조건이 셋인 건 아니다

랭크 — 진짜 정보는 몇 줄인가
랭크는 서로 베끼지 않은 줄이 몇 개인가를 세는 숫자입니다.

세 사람에게 같은 질문을 했는데, 두 사람이 똑같은 대답을 했다고 합시다. 대답은 세 개지만 정보는 두 개죠. 행렬에서도 같은 일이 일어납니다.

[ 1 2 3 ] [ 2 4 6 ] ← 1행의 2배. 새 정보 없음 [ 1 0 1 ]

줄은 셋인데 진짜 정보는 둘입니다. 이 "진짜 정보의 개수"가 랭크(rank)예요.

구하는 법은 이미 배웠습니다. 소거해서 남는 피벗의 개수가 랭크입니다. 베낀 줄은 소거 과정에서 저절로 0줄이 되어 사라져요.

소거 후 남는 0 아닌 줄의 개수 = 랭크.
Python 브라우저에서 실행

🎮 랭크가 뜻하는 모양

숫자를 바꿔 가며 랭크가 3, 2, 1, 0 이 되는 경우를 만들어 보세요. 랭크에 따라 세 열이 만들어 낼 수 있는 것이 공간 → 평면 → 직선 → 점 으로 줄어듭니다.

랭크와 '만들 수 있는 범위'의 관계
불러오는 중…

랭크가 답하는 질문들

랭크 하나만 알면 연립방정식에 대해 많은 것을 말할 수 있습니다. A 가 m×n 이고 첨가행렬이 [A|b] 일 때:

조건해
rank A < rank [A|b]해가 없다 — b 가 열들로 안 만들어짐
rank A = rank [A|b] = n해가 딱 하나
rank A = rank [A|b] < n해가 무수히 — 자유변수 n − r 개

첫 줄이 핵심입니다. b 를 덧붙였더니 랭크가 올라갔다는 건, b 가 A 의 열들이 만드는 범위 바깥에 있다는 뜻이에요. 아무리 섞어도 못 만드니 해가 없는 겁니다.

b 를 붙였더니 랭크가 올라가면 = b 가 손 닿지 않는 곳에 있다.
Python 브라우저에서 실행

수치 랭크 — 컴퓨터의 고민

이론에서는 "0인가 아닌가"가 명확합니다. 그런데 컴퓨터의 실수 계산에서는 0.0000000001 같은 값이 나와요. 이게 진짜 0인데 오차가 낀 걸까요, 아니면 정말 작은 값일까요?

구분할 방법이 원리적으로 없습니다. 그래서 컴퓨터는 임계값을 정해 놓고 그보다 작으면 0으로 칩니다. 이렇게 정한 랭크를 수치 랭크라고 해요.

더 믿을 만한 방법은 20강 특잇값 분해를 쓰는 것입니다. 특잇값들이 얼마나 급격히 작아지는지를 보면 "실질적으로 몇 차원짜리 데이터인가"를 훨씬 안정적으로 판단할 수 있어요.

실수 계산에서 '0인지 아닌지'는 생각보다 어려운 질문입니다.
Python 브라우저에서 실행
🤔 확인 문제
[[1,2],[2,4],[3,6]] 의 랭크는?
🤔 확인 문제
A 가 5×3 행렬일 때 랭크가 될 수 없는 값은?
🤔 확인 문제
rank A = 2 인데 rank [A|b] = 3 이라면?