직교 매칭 추구(OMP)란? AI에서 적은 특징을 차례로 골라 신호와 수치를 맞추는 방법
TL;DR
직교 매칭 추구는 아직 설명하지 못한 잔차와 잘 맞는 특징을 하나씩 고르고, 선택한 특징의 계수를 함께 다시 맞추는 희소 근사 방법입니다. 많은 후보 중 적은 수로 신호나 수치를 표현하려는 문제에서 씁니다. 계수의 개수 또는 남길 오차를 기준으로 계산을 멈춥니다. 이름의 직교는 잔차를 선택한 특징 공간과 수직으로 만드는 재적합을 가리키며, 모든 후보 특징이 서로 직교한다는 뜻은 아닙니다.
핵심 3줄 요약
- 핵심 1
잔차를 보고 하나씩 고릅니다. 현재 남은 오차와 절댓값 내적이 큰 후보를 선택하는 탐욕적 방법입니다. - 핵심 2
이미 고른 계수도 다시 맞춥니다. 새 후보를 추가할 때 선택된 특징 전체로 최소제곱 적합을 갱신합니다. - 핵심 3
적은 계수가 정답 보장은 아닙니다. 척도·상관관계·잡음과 종료 기준을 점검하고 별도 자료에서 결과를 평가합니다.
이 글에서 다룰 내용
- 직교 매칭 추구의 한 문장 정의
- 네 가지 기본 패턴으로 이해하는 쉬운 예시
- 잔차·사전 원자·직교 투영의 작동 순서
- 계수 수·오차 허용값·절편·사전 계산의 뜻
- 매칭 추구·라쏘·특징 선택·NMF와의 차이
- 신호 복원과 수치 예측의 사용처
- 입력 척도·선택 안정성·독립 평가 체크리스트
직교 매칭 추구를 한 문장으로 정의하면 무엇인가요?
직교 매칭 추구(Orthogonal Matching Pursuit, OMP)는 잔차와 잘 맞는 사전 원자를 순차적으로 선택하고 선택 집합의 계수를 최소제곱으로 재적합해, 적은 비영 계수로 목표 신호를 근사하는 알고리즘입니다.
비영 계수는 0이 아닌 계수입니다. 후보가 많아도 실제 표현에 쓰는 계수가 일부뿐이면 희소하다고 부릅니다. 사전은 여기서 낱말 뜻을 적은 문서가 아니라 후보 패턴을 열로 모은 행렬입니다. 각 열을 원자라고 하며, 회귀에서는 입력 특징에 해당합니다.
scikit-learn 사용자 가이드는 계수 개수에 제약을 둔 선형 근사로 설명합니다. 정해진 개수 안에서 오차를 줄이거나 오차 허용값에 맞는 희소 표현을 찾습니다. OMP는 탐욕적으로 후보를 고르므로 가능한 모든 특징 조합을 조사한 전역 최적해를 항상 보장하지는 않습니다.
한 줄 정리: 많은 후보의 조합을 한꺼번에 탐색하기보다, 남은 오차에 맞는 후보를 차례로 추가하고 선택한 조합을 다시 맞춥니다.
쉬운 예시로 이해해 볼까요?
감자나라ai님이 네 위치에서 측정한 신호를 기본 패턴으로 표현한다고 가정해 보겠습니다. 각 패턴은 한 위치만 1이고 나머지는 0입니다. 잡음 없는 교육용 자료이며 실제 센서나 고객 데이터의 성능을 측정한 예시는 아닙니다.
- 네 후보를 열로 모은 입력은
X = np.eye(4)입니다. 각 열의 길이는 1입니다. - 목표 신호는
y = [3, 0, -2, 0]입니다. 첫 패턴을 3배, 셋째 패턴을 -2배 쓰면 표현됩니다. -
OrthogonalMatchingPursuit(n_nonzero_coefs=2, fit_intercept=False, precompute=False)로 두 계수까지 허용합니다.
scikit-learn 1.9.1에서 실제 실행한 계수는
[3, 0, -2, 0]
이었고 같은 입력의 복원값도 목표 신호와 일치했습니다. 첫 단계에는 크기가 큰 첫 패턴을 선택하고 이후 남은 셋째 위치의 오차를 설명합니다. 음수 계수도 허용하므로 셋째 패턴의 방향을 반대로 사용할 수 있습니다.
계수 한 개만 허용하면 결과는
[3, 0, 0, 0]
이었습니다. 셋째 위치의 오차가 남아 잔차 제곱합은 4였습니다. 패턴을 적게 쓰는 목적과 복원 오차 사이의 관계를 보여 주지만, 같은 자료를 맞춘 결과가 새로운 자료의 예측 품질을 뜻하지는 않습니다.
쉬운 예시: 준비된 기본 패턴 중 지금 남은 빈칸을 가장 잘 채울 후보를 고르고, 이미 선택한 패턴의 배합도 다시 조정한다고 생각하세요.
왜 AI에서 직교 매칭 추구가 중요한가요?
적은 후보로 표현할 문제를 다룹니다
신호를 만드는 패턴의 종류가 많아도 실제로는 일부만 필요하다고 가정하는 문제에서 비교할 후보입니다. 어떤 원자를 선택했고 어떤 계수를 썼는지 확인하기 쉽습니다. 원래 신호가 정말 희소하게 표현되는지와 사전이 적절한지는 별도로 검토합니다.
선택 개수와 오차를 직접 비교합니다
같은 자료에서 허용 계수 수를 바꾸며 표현 크기와 복원 오차를 함께 기록합니다. 공식 예제는 사전으로 만든 희소 신호에 잡음을 더한 뒤 OMP와 교차 검증형 모델의 복원을 비교합니다. 예제에서 보이는 결과를 모든 신호의 복원 보증이나 자기 업무의 측정 성능으로 바꾸어 읽지 않습니다.
핵심 인사이트: OMP의 판단 기준은 적은 계수만 남았는지가 아니라, 그 표현이 목적에 필요한 신호와 예측을 얼마나 잘 보존했는지입니다.
직교 매칭 추구는 어떤 순서로 작동하나요?
1. 후보 사전과 목표를 준비합니다
입력 행렬의 열에는 후보 패턴이나 특징을, 목표에는 근사할 신호나 정답 수치를 둡니다. 행의 대응과 숫자 단위를 확인합니다. 함수형
orthogonal_mp
문서는 입력 열이 단위 노름이라고 가정하므로 후보 크기 차이가 선택을 지배하지 않는지도 살펴봅니다.
2. 현재 잔차와 가장 잘 맞는 후보를 고릅니다
잔차는 목표에서 현재 표현을 뺀 값입니다. 공식 구현은 각 후보와 잔차의 내적을 계산하고 절댓값이 가장 큰 후보를 선택합니다. 양의 방향만 찾는 것이 아니므로 음의 관계도 선택될 수 있습니다. 이 단계의 내적을 분류 확률이나 통계적 유의성으로 해석하지 않습니다.
3. 선택 집합의 계수를 함께 다시 구합니다
선택된 열들로 목표를 가장 가깝게 맞추는 최소제곱 계수를 계산합니다. 새로 추가한 계수만 정하는 것이 아니라 이전 계수도 갱신합니다. 따라서 새 후보를 고른 뒤 처음 선택한 패턴의 비중이 달라질 수 있습니다.
재적합한 잔차는 수치 오차를 제외하면 선택한 열들이 만드는 공간과 직교합니다. 후보 원자들이 서로 직교해야 한다는 요구와는 다릅니다. 서로 비슷한 열이 있어도 계산은 가능하지만 강한 선형 종속은 계산 종료나 선택 불안정성의 원인이 됩니다.
4. 종료 조건과 실제 결과를 확인합니다
허용한 계수 수에 도달하거나 잔차 제곱합이 오차 기준 이하가 되면 종료합니다. 선형 종속이나 매우 작은 내적 때문에 먼저 끝날 수도 있으므로 요청 개수와 실제 활성 특징 수를 함께 확인합니다. 종료 경고는 저장하고 잔차를 직접 대조합니다.
주요 설정과 결과는 어떻게 읽나요?
n_nonzero_coefs와 tol은 다른 기준입니다
n_nonzero_coefs
는 해에서 허용하는 비영 계수의 최대 수입니다.
tol
은 잔차 제곱합의 허용값이며, 지정하면 계수 수 설정보다 우선합니다. 예제에서 계수 수를 1로 두더라도
tol=1e-12
를 함께 주면 두 계수가 남아 오차 기준을 만족했습니다.
이 tol은 평균제곱오차나 잔차의 절댓값 한도가 아닙니다. 정답 수치의 단위나 행 수가 달라지면 같은 값의 의미도 달라집니다. 다른 추정기에 있는 같은 이름의 tol을 그대로 옮기지 말고 이 모델의 종료 기준을 확인합니다.
fit_intercept와 precompute는 표현·계산에 관여합니다
회귀 추정기의
fit_intercept=True
는 절편을 함께 계산합니다.
fit_intercept=False
는 절편을 쓰지 않으므로 데이터의 중심과 목적에 맞는지 확인합니다. 원점 기준 사전으로 신호를 복원하는 예제와 평균을 제거한 회귀를 무조건 같은 입력 처리로 보지 않습니다.
precompute="auto"
는 그람 행렬 등 사전 계산을 활용할지 정하는 설정입니다. 사전 원자를 더 만들거나 희소성을 자동 선택하는 옵션이 아닙니다. 큰 특징 수에서는 행렬 저장 부담도 확인하고 동일한 입력에서 시간과 메모리를 측정합니다.
coef_·n_iter_와 교차 검증형 모델을 구분합니다
coef_
는 최종 계수입니다. 계수 배열의 원래 특징 순서를 보관하고 실제 0이 아닌 항목을 확인합니다.
n_iter_
는 각 목표에서 활성화된 특징 수를 나타내는 속성이지, 독립 평가의 성공 횟수가 아닙니다.
OrthogonalMatchingPursuitCV
는 교차 검증 폴드의 평균제곱오차로 계수 수를 선택합니다.
max_iter
는 탐색 가능한 최대 특징 수에 관여하며, 선택 결과는
n_nonzero_coefs_
에서 확인합니다. 선택 뒤 전체 훈련 자료로 다시 맞추는 절차와 최종 테스트 평가는 구분합니다.
직교 매칭 추구와 헷갈리는 용어는 무엇이 다른가요?
일반 매칭 추구와의 차이
기본 매칭 추구도 잔차와 맞는 원자를 차례로 고릅니다. OMP는 선택된 원자 전체가 만드는 공간에 다시 투영해 계수를 함께 갱신합니다. 이 재적합이 이름의 직교와 연결됩니다. 일반 매칭 추구의 잔차 갱신과 OMP의 선택 집합 재적합을 같은 절차로 설명하지 않습니다.
라쏘·엘라스틱넷과의 차이
기존 엘라스틱넷 글은 계수의 L1·L2 벌점을 설명합니다. 라쏘는 L1 벌점으로 희소한 해를 구합니다. OMP는 현재 잔차를 보고 특징을 순차 선택하며 계수 개수 또는 복원 오차를 종료 기준으로 둡니다. 적은 계수가 남는다는 공통 결과만으로 같은 최적화 문제라고 읽지 않습니다.
특징 선택·NMF·ICA와의 차이
특징 선택은 입력 후보를 줄이는 작업 전체입니다. OMP는 그 안에서 사용할 수 있는 구체적인 전방 선택·선형 적합 알고리즘입니다. 모든 후보 조합을 교차 검증하는 래퍼 선택기와 선택 규칙이 다릅니다.
NMF는 음이 아닌 성분과 가중치를 함께 추정하는 행렬 분해이고, ICA는 섞인 관측에서 독립 성분을 추정합니다. 여기의 OMP는 주어진 사전에서 적은 원자를 골라 계수를 구합니다. 사전을 학습하는 과정 자체와 계수를 구하는 과정을 나누어 이해합니다.
비교 정리: OMP는 잔차 기반 순차 선택과 재적합, 라쏘는 L1 벌점, 특징 선택은 후보 축소 전체, NMF·ICA는 서로 다른 제약의 성분 추정입니다.
실전에서는 어디에 쓰이나요?
희소 신호의 계수와 복원을 비교합니다
공식 신호 예제처럼 준비된 사전으로 관측값을 근사하고 원래 계수를 얼마나 되찾았는지 살펴봅니다. 복원값이 가까워도 비슷한 원자끼리 역할을 대신했다면 계수 위치는 틀릴 수 있습니다. 신호 오차와 원자 선택의 일치를 따로 기록합니다.
많은 입력을 쓰는 수치 예측의 후보로 검토합니다
센서나 수치 특징이 많지만 적은 선형 조합으로 정답을 설명할 수 있다고 가정할 때 후보로 비교합니다. 실제 예측 시점에 얻는 특징만 사용하고 같은 보류 자료에서 다른 기준 모델과 대조합니다. 이 사용 맥락은 가능한 적용 예이며 해당 업무 자료를 실행한 성능 보고가 아닙니다.
직교 매칭 추구를 적용할 때 어떤 순서로 확인하나요?
1. 복원 문제와 새 입력 예측을 구분합니다
신호 한 개의 원래 계수를 되찾을지, 여러 사례에서 정답 수치를 예측할지 먼저 적습니다. 사전의 열과 행이 무엇인지 정의하고 측정값·정답·원본 ID를 맞춥니다. 목적이 다르면 평가 분할과 오차의 단위도 달라집니다.
2. 사전과 전처리를 훈련 범위에서 정합니다
데이터에서 사전·평균·척도를 학습한다면 검증 자료를 미리 섞지 않습니다. 새 입력에는 같은 열 순서와 변환을 적용합니다. OMP 모델을 쓰기 전에 표준화했다고 저수준 함수가 요구하는 열의 단위 노름까지 자동 충족된 것은 아니므로 실제 열 크기를 확인합니다.
3. 종료 기준과 선택 안정성을 비교합니다
계수 수 후보와 적절한 오차 기준을 같은 자료에서 비교합니다. 데이터 일부나 잡음을 바꾸었을 때 선택 목록이 크게 달라지는지 확인합니다. 전처리가 필요한 교차 검증에서는 각 훈련 폴드 안에서 전처리까지 다시 학습하도록 전체 절차를 평가합니다.
4. 오차·계수·경고를 함께 보관합니다
같은 신호를 맞춘 잔차와 보지 않은 사례의 예측 오차를 구분합니다. 회귀의
score
는 결정계수 R²이므로 분류 정확도처럼 표시하지 않습니다. 채택한 사전, 변환, 계수 수, 종료 상태, 검토 결과를 함께 저장합니다.
실전 팁: 사전의 의미·열 크기·허용 개수·오차 기준·실제 선택·독립 평가를 한 실험 기록으로 묶어 비교하세요.
사용할 때 무엇을 주의해야 하나요?
첫째, 탐욕적 선택을 항상 최적인 조합으로 보지 않습니다. 지금 잔차에 잘 맞는 선택이 이후까지 가장 좋은 조합이라는 보장은 없습니다. 다른 희소 모델과 같은 평가 조건에서 비교합니다.
둘째, 원자 크기와 상관관계를 확인합니다. 단위가 다른 열은 내적의 크기에 영향을 줍니다. 비슷하거나 선형 종속인 열은 선택과 계수를 흔들 수 있습니다. 단위 노름과 열 간 직교는 다른 조건입니다.
셋째, 잡음까지 맞추려고 계수를 계속 늘리지 않습니다. 작은 훈련 잔차만 목표로 삼으면 불필요한 원자를 추가할 수 있습니다. 원래 계수를 아는 합성 시험과 별도 검증을 함께 활용합니다.
넷째, 남은 계수를 실제 원인으로 단정하지 않습니다. 현재 사전과 자료에서 쓰인 항목이라는 의미입니다. 원자 선택이 안정적이어도 사람이나 업무에 대한 인과 판단은 별도 근거가 필요합니다.
주의: OMP는 희소한 표현을 구하는 방법이지, 원래 신호의 완전 복원·정확한 원인 발견·미래 예측 성공을 한꺼번에 보장하는 도구가 아닙니다.
자주 묻는 질문
Q1. 직교는 모든 특징이 수직이라는 뜻인가요?
아닙니다. 선택한 특징 공간에 목표를 다시 투영해 잔차가 그 공간과 직교하도록 만든다는 뜻입니다. 후보 열이 서로 직교하거나 통계적으로 독립일 필요는 없습니다.
Q2. 계수에 음수가 나와도 되나요?
기본 OMP에는 비음수 계수 제약이 없습니다. 음수 계수는 해당 패턴을 반대 방향으로 결합합니다. 음이 아닌 조합이 필요한 문제라면 그 제약을 별도로 지원하는 방법을 확인합니다.
Q3. 설정한 개수만큼 반드시 특징이 남나요?
n_nonzero_coefs는 최대 수이며 선형 종속 등으로 먼저 끝날 수 있습니다. tol을 지정하면 오차 기준이 우선합니다. 실제 계수와 종료 경고를 직접 확인합니다.
Q4. tol은 평균제곱오차인가요?
아닙니다. 이 구현에서는 잔차 제곱합의 허용값입니다. 평균제곱오차처럼 행 수로 나눈 값과 구분하고 정답의 단위와 자료 크기를 함께 기록합니다.
Q5. 교차 검증형 모델이면 테스트를 생략해도 되나요?
안 됩니다. 교차 검증은 훈련 범위에서 계수 수를 고르는 절차입니다. 전처리도 폴드 안에서 학습하며 최종 보류 자료는 설정을 선택한 뒤 평가합니다.
Q6. 사전도 OMP가 자동으로 학습하나요?
여기서 설명한 OMP는 주어진 후보 사전의 계수를 구합니다. 사전을 만들거나 학습하는 절차는 별도입니다. 사전 학습 안에 OMP를 사용할 수 있어도 두 작업을 같은 뜻으로 부르지 않습니다.
출처
- scikit-learn, Orthogonal Matching Pursuit 사용자 가이드
- scikit-learn, OrthogonalMatchingPursuit API
- scikit-learn, orthogonal_mp API
- scikit-learn, OrthogonalMatchingPursuitCV API
- scikit-learn, Orthogonal Matching Pursuit 신호 복원 예제
- scikit-learn, Common pitfalls and recommended practices
- scikit-learn, OMP 공식 구현
마무리
직교 매칭 추구는 잔차와 잘 맞는 원자를 순차 선택하고 선택 집합의 계수를 다시 구하는 희소 근사 방법입니다. 직교 투영의 뜻, 허용 계수 수와 잔차 제곱합, 주어진 사전과 사전 학습을 구분하면 결과를 더 정확히 읽을 수 있습니다.
처음 적용한다면 작은 신호에서 계수와 복원값을 직접 대조하세요. 이후 사전의 척도와 상관관계, 종료 경고와 선택 안정성을 기록합니다. 적은 계수와 작은 훈련 오차만으로 판단하지 않고 실제 목적의 독립 평가까지 확인해야 합니다.
