니스트롬 근사(Nyström)란? AI에서 일부 훈련 표본으로 커널 특징을 만드는 방법
TL;DR
니스트롬 근사는 일부 훈련 표본을 기준점으로 골라 커널의 특징 표현을 근사하는 방법입니다. 모든 표본 쌍을 다루는 부담을 줄일 후보이며 만든 특징은 선형 분류기 등에 연결합니다. 기준점과의 커널 값에 보정 행렬을 곱하므로 단순한 유사도 목록과 다릅니다. 근사 오차·변환 비용·후속 예측을 따로 확인하고 새 입력에도 같은 기준을 유지합니다.
핵심 3줄 요약
- 핵심 1
훈련 행 일부를 기준으로 삼습니다. 원본 열을 고르거나 표본을 삭제하는 특징 선택과 다릅니다. - 핵심 2
내적이 커널 값을 닮도록 만듭니다. 부분 커널에서 구한 보정을 거치며 오차가 남습니다. - 핵심 3
표현과 예측을 함께 검증합니다. 기준점 수·커널·시드와 전체 파이프라인의 비용을 비교합니다.
이 글에서 다룰 내용
- 니스트롬 근사의 한 문장 정의
- 세 숫자와 기준점 하나로 이해하는 근사 내적
- 기준점 선택·부분 커널·보정의 작동 순서
- 기준점 수·gamma·저장 속성의 의미
- 커널 PCA·랜덤 투영·무작위 푸리에 특징과의 차이
- 새 입력 변환과 평가 체크리스트
- 근사 오차·데이터 누수·기준점 보관의 주의점
니스트롬 근사를 한 문장으로 정의하면 무엇인가요?
니스트롬 근사는 훈련 데이터에서 고른 기준점과의 커널 관계를 보정해 표본 사이의 커널 값을 내적으로 근사하는 명시적 특징을 만드는 방법입니다.
영문명은 Nyström method이며 scikit-learn의 클래스 이름은
Nystroem
입니다. 니스트롬 방법이나 뉘스트롬 근사라는 표기도 같은 개념을 가리킵니다. 이 글은 공식 가이드와 1.9.1 구현의 일반 수치 입력 경로를 기준으로 설명합니다.
커널은 두 표본을 어떤 특징 공간에 옮겼을 때의 내적을 계산하는 함수입니다. 니스트롬 근사는 전체 쌍의 관계를 그대로 저장하는 대신 작은 기준 집합으로 그 관계를 근사합니다. 변환 자체는 정답 라벨 없이 입력을 사용하고 분류·회귀의 정답 학습은 뒤 모델이 맡습니다.
한 줄 정리: 일부 표본으로 만든 공통 기준에 모든 입력을 옮겨 커널의 관계를 작은 특징 벡터로 다룹니다.
쉬운 예시로 이해해 볼까요?
감자나라ai님이 한 가지 수치 특징을 가진 세 표본
[0,1,2]
를 변환한다고 가정해 보겠습니다. 설명을 단순하게 하려고 기준점은 0 하나로 고정하고 RBF의
gamma=ln(2)
를 사용합니다. 라이브러리가 이 기준점을 뽑았다는 뜻은 아닙니다.
RBF는 두 값의 제곱 차이에 gamma를 곱한 값의 음수를 지수 함수에 넣습니다. 기준점 자신과의 커널은 1이므로 이 예시의 보정 계수도 1입니다. 각 표본에서 기준점까지의 커널 값이 출력 특징 하나가 됩니다.
- 입력 0의 출력은
[1]입니다. 기준점과 같은 위치입니다. - 입력 1의 출력은
[0.5]입니다. 제곱 차이가 1입니다. - 입력 2의 출력은
[0.0625]입니다. 제곱 차이가 4입니다.
출력 벡터끼리 내적하면 입력 1과 2의 근사 커널은
0.5 * 0.0625 = 0.03125
입니다. 같은 두 입력의 정확한 RBF 커널은 0.5입니다. 기준점 하나만으로 두 점의 관계를 잘 표현하지 못한 사례입니다.
위 숫자는 NumPy로 직접 계산해 확인한 설명용 결과입니다. scikit-learn 추정기 실행이나 실제 고객 데이터의 분류 실험은 아닙니다. 입력 1의 자기 내적도 0.25로 원래 RBF의 자기 커널 1과 다릅니다. 이 특징의 보정은 모든 출력의 길이를 1로 맞추는 정규화가 아닙니다.
쉬운 예시: 적은 기준점은 계산을 줄이는 대신 관계를 놓칠 수 있습니다. 특징을 만들었다는 사실과 커널을 잘 근사했다는 판단을 나눕니다.
왜 AI에서 니스트롬 근사가 중요한가요?
커널 관계를 선형 모델의 입력으로 옮깁니다
원본에서는 직선으로 설명하기 어려운 관계도 RBF 같은 비선형 특징으로 바꾼 뒤 선형 모델에 전달할 수 있습니다. 변환 뒤 모델이 선형이라는 말은 새 특징에 대한 설명입니다. 원래 입력과 예측 사이까지 선형이라는 뜻은 아닙니다.
표본 수에 따른 계산 부담을 비교합니다
표본 수 N에 대한 전체 커널은 N × N입니다. 기준점을 M개 사용하면 입력과 기준점의 커널은 N × M이고 기준점 내부 커널은 M × M입니다. M을 충분히 작게 고르면 절감 후보가 되지만 보정 행렬을 곱하는 시간과 뒤 모델까지 합쳐 실제 이득을 확인합니다.
핵심 인사이트: 목표는 무조건 원본 열을 줄이는 것이 아니라 커널을 활용하는 비용과 근사 품질을 절충하는 일입니다.
니스트롬 근사는 어떤 순서로 작동하나요?
1. 훈련 표본에서 기준점을 고릅니다
확인한 Nystroem 구현은 훈련 행을 균일하게 비복원 추출합니다. 이 기준점을 랜드마크라고도 부릅니다. 중복 추출하지 않는다는 말은 같은 행 인덱스를 다시 뽑지 않는다는 뜻이며 값이 똑같은 서로 다른 행까지 제외한다는 뜻은 아닙니다.
2. 기준점끼리의 커널로 보정을 구합니다
기준점 M개 사이의 커널 행렬을 만들고 분해합니다. 양의 준정부호 커널에서 핵심 보정은 이 행렬의 역제곱근에 해당합니다. 단순한 제곱근을 곱하거나 원소마다 제곱근을 취하는 연산과 다릅니다. 1.9.1 구현은 특이값 분해 후 작은 특이값에 하한을 둡니다.
3. 모든 입력을 같은 기준의 특징으로 바꿉니다
각 입력과 저장한 기준점 사이의 커널을 계산하고 보정 행렬을 곱합니다. N개 행은 N개 행으로 남고 열 수가 기준점 수에 맞춰 바뀝니다. 검증·테스트·새 입력에는 다시 기준점을 뽑지 않고 학습된 변환기의
transform
을 사용합니다.
실전 팁: 기준점만 같아도 커널·전처리·보정이 바뀌면 좌표가 달라집니다. 변환기 전체를 뒤 모델과 함께 보관합니다.
주요 설정과 결과는 어떻게 읽나요?
n_components는 기준점 수와 출력 열 수입니다
n_components
의 기본값은 100입니다. 일반 입력에서는 선택하는 훈련 행 수이면서 출력 특징 수입니다. 원본 특징 수보다 클 수도 있어 한 열 입력에서 여러 출력 열이 생깁니다. PCA의 설명 분산 순서나 클래스 수를 지정하는 값이 아닙니다.
1.9.1 구현에서 요청한 개수가 훈련 표본 수를 넘으면 경고를 내고 실제 기준점 수를 표본 수로 제한합니다. 원래 입력이 세 행인데 100을 요청했다고 서로 다른 기준점 100개를 만들지는 않습니다. 실제
components_
와 출력 모양을 확인합니다.
kernel과 gamma는 관계를 정합니다
기본 커널은
kernel="rbf"
입니다. RBF에서는 gamma가 커질수록 같은 비영 거리의 커널 값이 더 작아집니다.
gamma=None
은 해당 커널의 기본 처리를 따르며 확인한 RBF 함수는 원본 특징 수의 역수를 사용합니다. SVC의 다른 기본 설정을 그대로 옮겨 읽지 않습니다.
random_state는 표본 선택의 재현성을 돕습니다
정수
random_state
는 같은 조건에서 기준점 선택을 재현하는 데 사용합니다. 좋은 점만 고르는 설정이나 정확도 보장은 아닙니다. 한 시드의 점수만 보고 결론 내리지 말고 여러 추출에서 근사 오차와 후속 성능의 변동을 살핍니다.
저장 속성은 기준점과 보정의 역할이 다릅니다
components_
는 기준점 수 × 원본 특징 수 모양의 실제 훈련 행입니다.
component_indices_
는 그 행의 훈련 입력 내 위치입니다.
normalization_
는 기준점 수 × 기준점 수 보정 행렬이며 API의 짧은 속성 설명보다 공식 가이드와 분해·나눗셈 구현을 함께 확인해야 역제곱근 역할을 정확히 읽을 수 있습니다.
니스트롬 근사와 헷갈리는 용어는 무엇이 다른가요?
커널 PCA는 커널 공간의 주요 방향을 찾습니다
커널 주성분 분석(Kernel PCA)은 커널 행렬을 중심화하고 분산이 큰 방향의 좌표를 찾습니다. 니스트롬 근사는 기준점으로 커널 표현을 근사합니다. 출력 열을 PCA의 큰 고유값 순서나 원본 설명 분산 비율로 읽지 않습니다.
랜덤 투영과 무작위 푸리에 특징은 기준이 다릅니다
랜덤 투영은 원본 특징에 무작위 선형 행렬을 곱해 거리를 대략 유지하려는 방법입니다. 니스트롬은 실제 훈련 행과 커널을 사용합니다. RBF의 무작위 푸리에 특징을 만드는
RBFSampler
도 커널 근사지만 훈련 행을 기준점으로 고르는 방식은 아닙니다.
서포트 벡터와 특징 선택도 구별합니다
SVM의 서포트 벡터는 정답 경계 학습에 기여한 표본입니다. 여기서 균일 추출한 기준점과 같은 선정 규칙이 아닙니다. 특징 선택은 원본 열 일부를 남기며 니스트롬은 고른 행을 기준으로 모든 행의 새 특징을 만듭니다.
비교 정리: 주성분 찾기, 무작위 선형 투영, 커널 특징 근사, 정답 경계 학습은 서로 다른 작업입니다. 이름에 성분이나 표본이 등장해도 출력의 의미를 구별합니다.
실전에서는 어디에 쓰이나요?
비선형 분류의 비용을 비교합니다
공식 숫자 이미지 예제는 원본 특징의 선형 SVM, 정확한 RBF SVM, 니스트롬 특징을 쓰는 선형 SVM을 비교합니다. 기준점 수를 바꾸면서 정확도와 시간을 함께 측정합니다. 예제 자체도 작은 데이터에서는 정확한 SVM이 충분히 빠르다고 경고하므로 근사가 언제나 빠르다는 결론으로 옮기지 않습니다.
재사용할 수 있는 특징 변환을 준비합니다
고정한 기준점으로 새 묶음을 변환해 선형 모델에 전달하는 흐름을 검토합니다. 같은 공간을 쓰려면 입력 단위와 열 순서, 기준점, 커널 설정을 고정합니다. 변환기까지 온라인으로 갱신된다고 가정하지 말고 기준을 바꾸면 기존 특징과 뒤 모델의 재학습 범위를 확인합니다.
니스트롬 근사를 적용할 때 어떤 순서로 확인하나요?
1. 기준 모델과 평가 경계를 먼저 정합니다
훈련·검증·최종 테스트를 나누고 원본을 쓰는 선형 모델의 결과를 남깁니다. 여건이 되면 같은 커널의 정확한 모델도 비교합니다. 숫자 이미지 예제의 전처리 코드를 그대로 평가에 옮기지 말고 스케일링과 기준점 선택을 각 교차 검증 훈련 폴드 안에서 학습합니다.
2. 작은 배열에서 모양과 근사 내적을 대조합니다
입력 행 수가 유지되는지, 출력 열 수가 실제 기준점 수와 맞는지 확인합니다. 일부 표본 쌍에서 정확한 커널과 출력 벡터의 내적을 나란히 비교합니다. 평균 오차만 보지 말고 기준점에서 먼 사례와 드문 패턴을 따로 봅니다. 위 세 숫자 계산처럼 실패도 남깁니다.
3. 전처리와 뒤 모델 전체를 평가합니다
스케일러·니스트롬·분류기를 한 파이프라인으로 묶고 그 전체에 교차 검증을 적용합니다. 기준점 수·gamma·뒤 모델의 규제를 검증 자료에서 함께 고릅니다. 마지막 테스트는 선택에 쓰지 않으며 변환 시간, 예측 지연과 최대 메모리도 같은 환경에서 측정합니다.
사용할 때 무엇을 주의해야 하나요?
기준점 수 증가를 정확도 보장으로 읽지 않습니다. 표현 용량과 비용은 늘지만 모든 데이터의 검증 점수가 단조롭게 좋아지는 것은 아닙니다. 드문 집단의 사례가 적게 뽑히면 전체 평균으로는 잘 보이지 않는 오차가 남을 수 있습니다.
부분 행렬도 실제 저장량을 확인합니다. 설명용으로 float64 표본 1,000개와 기준점 100개를 계산하면 전체 커널 하나는 8,000,000바이트, 출력 특징은 800,000바이트, 보정 행렬은 80,000바이트입니다. 배열 원소의 산술 비교이며 기준점·중간 배열·뒤 모델과 실행 중 최대 메모리는 포함하지 않았습니다.
작은 특이값 처리는 손실 복원이 아닙니다. 확인한 구현은 특이값 하한
1e-12
을 사용해 수치 계산을 다룹니다. 같은 값의 중복 행이나 잘못 만든 커널이 유용한 표현으로 바뀐다는 보장은 없습니다. 이 글의 역제곱근 설명은 양의 준정부호 커널을 전제로 합니다.
기준점에는 실제 데이터가 남습니다. 변환기의
components_
는 추상적인 계수만이 아니라 선택한 훈련 행을 저장합니다. 모델 파일의 접근·배포·삭제 범위를 원본 데이터의 민감도에 맞춰 정합니다. 특징으로 바꿨다는 이유로 비식별화나 암호화가 끝났다고 판단하지 않습니다.
주의: 정답 라벨을 사용하지 않는 변환도 입력 데이터를 사용합니다. 전체 자료에서 기준점을 먼저 고르고 평가를 나중에 나누면 독립 평가가 아닙니다.
자주 묻는 질문
Q1. 니스트롬 근사는 표본 수를 줄이나요?
기준점으로 고르는 행 수는 줄지만 모든 입력을 변환한 결과의 행 수는 그대로입니다. 기준점 M개와 변환할 표본 N개를 구별하세요. 원본 데이터를 M행만 남기는 재표본화와는 다릅니다.
Q2. 정답 라벨 없이 fit할 수 있나요?
확인한 구현은 입력에서 기준점을 뽑고 부분 커널을 분해합니다. 변환에는 정답 라벨이 필요하지 않습니다. 뒤에 분류기를 붙이면 그 단계에는 정답이 필요하며 평가 분할도 유지합니다.
Q3. n_components는 원본 열보다 작아야 하나요?
아닙니다. 기준점 수와 출력 특징 수를 정하는 값이며 원본 열 수보다 클 수 있습니다. 이 근사가 줄이려는 기준은 주로 전체 표본 쌍의 커널 계산 부담입니다. 실제 출력 모양을 확인합니다.
Q4. normalization_는 출력 길이를 1로 맞추나요?
아닙니다. 기준점 내부 커널에서 구한 보정 행렬입니다. 예시에서도 입력 1의 출력 길이는 0.5입니다. 별도 L2 정규화를 덧붙이면 내적과 커널 근사의 관계가 바뀌므로 원래 변환과 구분해 검증합니다.
Q5. 기준점은 서포트 벡터나 군집 중심인가요?
이 글의 구현은 훈련 행의 균일 비복원 추출입니다. 마진 학습으로 서포트 벡터를 찾거나 K-means로 평균 중심을 구하지 않습니다. 다른 선정법을 사용했다면 기본 Nystroem과 구분해서 설명합니다.
Q6. 새 입력마다 다시 fit하면 더 정확한가요?
기준점을 바꾸면 특징 좌표도 달라집니다. 기존 분류기와 함께 쓰려면 학습한 변환기의 transform을 사용합니다. 새 기준이 필요하면 전처리와 뒤 모델까지 묶어 재학습하고 별도 평가를 거칩니다.
출처
마무리
니스트롬 근사는 일부 훈련 행을 기준으로 커널 특징을 근사합니다. 기준점 내부 커널의 보정과 입력·기준점 사이의 커널 계산을 구별하면 단순한 유사도 목록이나 커널 PCA와의 차이가 분명해집니다. 같은 좌표를 사용하려면 새 입력에도 학습 기준을 유지합니다.
처음에는 작은 숫자로 출력 모양과 내적 오차부터 확인하세요. 이후 기준점 수·커널·시드를 바꾸며 정확한 커널과의 차이, 실제 업무 품질, 전체 비용을 비교합니다. 근사 특징 생성, 예측 성능, 개인정보 보호는 각각 따로 판단합니다.
