희소 주성분 분석(Sparse PCA)이란? AI에서 적은 변수로 설명되는 성분을 찾는 방법
TL;DR
희소 주성분 분석은 데이터를 재구성할 성분을 찾으면서 성분의 일부 계수를 0으로 만들어 각 성분에 참여하는 원본 변수를 줄이는 방법입니다. 여러 변수가 섞인 축을 더 읽기 쉽게 만들려는 목적이 있습니다. 이 글의 scikit-learn SparsePCA는 성분에 L1 벌점을 적용하며 일반 PCA의 직교성이나 설명 분산 순서를 그대로 보장하지 않습니다. 성분의 희소성, 재구성 오차와 후속 모델의 성능을 따로 확인하고 새 입력의 점수는 저장된 성분으로 계산합니다.
핵심 3줄 요약
- 핵심 1
성분의 계수를 희소하게 만듭니다. 각 성분에 적은 원본 변수만 참여하도록 L1 벌점을 사용합니다. - 핵심 2
PCA의 직교 축과는 다릅니다. 성분끼리 겹칠 수 있어 새 입력의 점수에 최소제곱·릿지 계산을 씁니다. - 핵심 3
간결한 성분도 검증이 필요합니다. 변수 기여와 재구성 오차, 실제 예측 성능을 함께 비교합니다.
이 글에서 다룰 내용
- 희소 주성분 분석의 한 문장 정의
- 세 숫자를 두 성분으로 나타내는 쉬운 예시
- 성분 계수·표본 점수·재구성의 작동 순서
- alpha·ridge_alpha·성분 수와 반복 설정의 뜻
- PCA·특징 선택·NMF·희소 입력과의 차이
- 미니배치가 표본 대신 특징 축을 다루는 이유
- 해석 안정성·평가 누수·근사 복원의 주의점
희소 주성분 분석을 한 문장으로 정의하면 무엇인가요?
희소 주성분 분석은 원본 데이터를 성분 점수와 성분 행렬의 곱으로 근사하면서 성분 행렬의 많은 계수를 0으로 만들어 적은 변수로 표현되는 성분을 찾는 방법입니다.
영문명은 Sparse Principal Component Analysis이며 Sparse PCA, 희소 PCA라고도 부릅니다. 정의가 여러 가지이므로 구현을 확인합니다. 여기서는 scikit-learn의 SparsePCA와 MiniBatchSparsePCA가 푸는 재구성·L1 벌점 문제를 설명합니다.
입력의 각 행은 한 표본이고 각 열은 원본 수치 특징입니다. 성분 행렬의 한 행은 원본 특징을 섞는 계수 목록입니다. 그 목록에 0이 많은 것이 희소성입니다. 입력 자료에 0이 많거나 출력 점수에 0이 많다는 조건과는 구별합니다.
한 줄 정리: 원본 변수를 조합한 새 성분을 만들되, 각 성분의 설명에 참여하는 변수 수를 줄이는 방법입니다.
쉬운 예시로 이해해 볼까요?
감자나라ai님이 세 개의 수치 특징을 두 성분으로 표현한다고 가정해 보겠습니다. 계산을 확인하기 쉽게 성분을
(1, 0, 0)
과
(0.6, 0.8, 0)
으로 직접 정했습니다. 두 성분은 길이가 1이지만 서로 직교하지 않습니다. 실제 데이터에서 SparsePCA를 학습해 얻은 성분은 아닙니다.
- 훈련 평균을 이미 뺀 한 입력이
(1, 2, 3)이라고 하겠습니다. 성분의 여섯 계수 중 세 개가 0이므로 계수의 50%가 0입니다. - 릿지 벌점을 잠시 0으로 두고 최소제곱 점수를 구하면
(-0.5, 2.5)입니다. 이 점수로 두 성분을 섞으면(1, 2, 0)이 됩니다. - 단순히 입력과 각 성분의 내적만 구하면
(1, 2.2)가 나옵니다. 성분이 겹치므로 이 내적을 위의 최소제곱 점수와 같다고 볼 수 없습니다.
NumPy로 행렬 곱과 선형방정식을 실제 계산해 확인했습니다. 성분의 계수는 희소하지만 두 성분 점수는 모두 0이 아닙니다. 셋째 특징은 두 성분 모두 계수가 0이라 복원값에서 사라집니다. 성분이 간단해졌다는 사실과 원본 정보가 모두 남았다는 판단은 별개입니다.
같은 고정 성분에
ridge_alpha=0.01
을 적용한 계산에서는 점수가 약
(-0.470, 2.457)
입니다. 점수의 크기를 제한해 계산을 안정시키는 벌점이 결과에 영향을 줍니다. 이 비교는 변환 원리를 설명하는 고정 행렬 계산이며 추정기 학습 결과나 실제 업무 성능으로 소개하지 않습니다.
쉬운 예시: 성분의 0 계수, 새 입력의 점수, 복원된 값은 서로 다른 결과입니다. 어느 행렬이 희소한지 먼저 확인하세요.
왜 AI에서 희소 주성분 분석이 중요한가요?
각 성분에 참여하는 변수를 읽기 쉽습니다
일반 PCA의 성분은 많은 원본 변수가 함께 섞여 어떤 측정값이 축을 설명하는지 읽기 어려울 수 있습니다. 희소 성분은 일부 계수를 0으로 만들어 남은 변수의 기여를 살펴보게 합니다. 센서 이름이나 픽셀 위치 같은 원본 특징과 계수의 대응을 함께 기록합니다.
재구성 품질과 설명의 간결함을 비교합니다
많은 0을 얻는 것만 목표로 삼으면 유용한 변동도 버릴 수 있습니다. L1 벌점은 재구성 오차와 계수의 간결함을 절충합니다. 같은 성분 수의 PCA, 희소 성분 모델과 원본 특징을 쓰는 기준 모델을 동일한 자료에서 비교해야 이 절충이 목적에 맞는지 알 수 있습니다.
부분적인 패턴을 탐색하는 후보입니다
공식 가이드는 얼굴 픽셀에서 일부 영역에 계수가 모이는 예를 설명합니다. 다만 기본 모델에는 이웃 픽셀을 같은 묶음으로 고르는 공간 제약이 없습니다. 데이터 구조 때문에 국소 패턴이 나타날 수 있지만 모든 성분이 눈·코처럼 사람이 붙인 부위와 일치한다고 보장하지 않습니다.
핵심 인사이트: 희소성은 해석할 후보를 줄이는 장치입니다. 사람이 붙인 의미와 독립 자료의 품질까지 확인해야 해석 근거가 됩니다.
희소 주성분 분석은 어떤 순서로 작동하나요?
1. 훈련 자료의 중심을 맞춥니다
훈련·검증·테스트를 먼저 나누고 원본 열의 의미와 순서를 고정합니다. 확인한 SparsePCA 구현은 훈련 열별 평균을 저장하고 입력에서 뺍니다. 표준편차에 따른 스케일링을 자동 수행하지는 않습니다. 단위가 다른 특징의 척도를 맞출 필요가 있다면 그 통계도 훈련 자료에서 구합니다.
2. 재구성과 성분의 L1 벌점을 함께 줄입니다
중심화한 입력을 표본별 점수 행렬과 성분 행렬의 곱으로 근사합니다. 원본과 근사값의 제곱 오차에 성분 계수 절댓값 합의 벌점을 더해 계산합니다. 이 벌점의 세기는 alpha가 정합니다. 데이터와 두 행렬을 번갈아 다루는 최적화이며 PCA 고유벡터에서 작은 계수를 잘라내는 후처리와 같지 않습니다.
확인한 구현은 입력을 전치해 딕셔너리 학습 계산을 이용하고 최종 성분 행을 정규화해 저장합니다. 성분끼리 직교하도록 강제하지는 않습니다. 반복 계산이 종료됐다고 전역에서 가장 좋은 해를 찾았다는 뜻은 아니므로 초기화·설정과 반복 결과를 함께 남깁니다.
3. 새 입력의 점수를 구하고 필요하면 복원합니다
새 자료에서는 저장한 훈련 평균을 빼고 성분을 고정한 최소제곱 문제를 풉니다. transform은 ridge_alpha로 릿지 벌점을 적용합니다. 겹치는 성분이 있을 때 점수 계산을 안정시키는 역할이며 학습 성분을 희소하게 만드는 alpha와 용도가 다릅니다.
점수 행렬에
components_
를 곱하고
mean_
을 더하면 inverse_transform의 근사 복원이 됩니다. 선택적인 앞단 스케일링을 썼다면 그 스케일러의 역변환도 별도로 적용합니다. 축소나 규제로 버린 정보를 원본 그대로 되살리는 기능은 아닙니다.
주요 설정과 결과는 어떻게 읽나요?
성분 수와 희소성의 세기를 따로 고릅니다
n_components
는 만들 성분의 수입니다. 기본값
None
에서는 원본 특징 수를 사용하므로 기본 설정만 호출했다고 차원이 줄지는 않습니다. 출력 열을 줄이려면 원본보다 적은 성분 수를 정하고 품질을 비교합니다. 많은 성분을 요청하는 것과 유효한 정보가 늘어나는 것도 구별합니다.
alpha
는 성분에 적용하는 L1 벌점이며 큰 값은 더 희소한 성분을 유도합니다. 특정 값이 모든 자료에서 같은 0 비율을 만드는 규칙은 아닙니다. 특징의 단위와 표본 구조가 바뀌면 효과도 달라집니다. 성분 수와 alpha 후보를 검증 자료에서 함께 비교합니다.
성분 행렬과 표본별 좌표를 나눠 읽습니다
components_
는 성분 수 × 원본 특징 수 모양이고 transform의 결과는 표본 수 × 성분 수입니다. 전자는 각 성분의 계수 목록, 후자는 각 사례의 새 좌표입니다. 원본 열 이름과 성분의 비영 계수 위치를 대조하며 새 좌표도 희소하거나 서로 상관없다고 가정하지 않습니다.
이 구현은 PCA의
explained_variance_ratio_
를 그대로 제공하지 않습니다. 비직교 성분의 기여가 겹치므로 성분별 분산을 단순 합쳐 PCA의 누적 설명 분산처럼 읽지 않습니다. 재구성 오차, 계수의 0 비율과 후속 작업 지표를 각각 기록하는 편이 분명합니다.
학습 반복과 변환의 규제를 분리합니다
ridge_alpha
는 transform에서 점수를 계산하는 릿지 규제이며 기본값은 0.01입니다. 학습 성분의 0 개수를 정하는 alpha를 대신하지 않습니다. 둘을 동시에 바꾸면 성분의 변화와 점수 계산의 변화를 구별하기 어려우므로 비교 조건을 기록합니다.
max_iter
와
tol
은 학습 반복의 한도와 종료 기준입니다.
method="lars"
와
method="cd"
는 최적화에 사용하는 라쏘 풀이 방식입니다.
error_
의 반복 기록을 테스트 재구성 오차로 부르지 않고 계산 경고와 별도 평가를 함께 확인합니다.
희소 주성분 분석과 헷갈리는 용어는 무엇이 다른가요?
일반 PCA·특징 선택과의 차이
주성분 분석(PCA)는 분산이 큰 순서의 직교 축을 찾습니다. 이번 글은 성분의 L1 희소성과 재구성 절충, 겹치는 성분의 점수 계산을 다룹니다. 특징 선택은 원본 열 일부를 그대로 남기지만 희소 PCA는 남은 원본 변수들을 조합해 새 성분을 만듭니다.
NMF·딕셔너리 학습과의 차이
비음수 행렬 분해(NMF)는 음이 아닌 입력과 두 행렬의 비음수 제약을 다룹니다. SparsePCA 성분과 점수에는 음수가 나올 수 있습니다. 일반적인 희소 코딩은 표본별 코드를 희소하게 만들기도 하지만 여기서는 성분 행렬에 L1 벌점을 둡니다. 어느 행렬에 제약을 거는지 확인해야 이름이 비슷한 모델을 혼동하지 않습니다.
희소 입력·커널 PCA와의 차이
희소 행렬은 0이 많은 자료를 저장하는 구조입니다. SparsePCA라는 이름은 희소 입력을 자동으로 메모리 효율적으로 처리한다는 보장이 아닙니다. 선택한 API의 입력 지원을 따로 봅니다. 커널 PCA는 커널로 비선형 특징을 찾는 방법이며 원본 변수의 성분 계수를 희소하게 만드는 이 글의 목적과 다릅니다.
비교 정리: PCA는 직교한 분산 축, 희소 PCA는 적은 변수로 표현되는 성분, 특징 선택은 원본 열의 일부, NMF는 비음수 분해를 다룹니다.
실전에서는 어디에 쓰이나요?
많은 측정값의 기여를 탐색합니다
센서나 행동 측정처럼 여러 수치 열이 있는 자료에서 성분에 참여하는 변수를 살피는 후보입니다. 사람이 이해하기 쉬운 변수 묶음이 나왔는지 도메인 검토를 거칩니다. 라벨을 쓰지 않는 비지도 변환이므로 성분의 큰 계수가 정답 예측에 가장 중요한 변수라는 뜻은 아닙니다.
이미지의 성분을 시각적으로 비교합니다
공식 얼굴 분해 예제는 MiniBatchSparsePCA를 사용해 픽셀 성분을 이미지로 표시합니다. 예제의 alpha와 배치 크기는 그 실험 조건이지 모든 이미지의 기본 정답이 아닙니다. 국소 패턴이 보이는지와 실제 인식·복원 품질이 좋은지는 따로 평가합니다. 성분 그림만으로 인식 정확도를 보고하지 않습니다.
미니배치의 처리 축을 확인합니다
MiniBatchSparsePCA의 batch_size는 한 번에 다루는 특징 수입니다. 원본 표본을 작은 묶음으로 계속 추가하는 IncrementalPCA와 그대로 같지 않습니다. 공식 가이드는 이 방식이 특징 방향으로 동작하기 때문에 partial_fit을 제공하지 않는다고 설명합니다. 끝없이 들어오는 새 표본을 온라인 학습한다고 소개하지 않습니다.
희소 주성분 분석을 적용할 때 어떤 순서로 확인하나요?
1. 목적과 기준 결과를 고정합니다
해석할 변수 묶음이 필요한지, 입력 차원을 줄이려는지, 재구성을 원하는지 먼저 정합니다. 원본을 쓰는 모델과 같은 성분 수의 PCA를 기준으로 남깁니다. 사람·장비·시점이 반복되는 자료는 같은 대상이나 미래 정보가 검증 쪽과 섞이지 않게 분할합니다.
2. 전처리와 성분을 훈련 안에서 학습합니다
결측 처리와 필요한 스케일링, SparsePCA, 후속 모델을 검증 절차 안에서 함께 학습합니다. 교차 검증에서는 각 훈련 폴드마다 평균·척도·성분을 다시 맞춥니다. 이미 전체 자료에서 계산한 성분 점수를 나중에 나누면 비지도 변환이어도 평가 누수가 생깁니다.
3. 희소성·품질·안정성을 함께 기록합니다
성분별 비영 계수 개수와 0 비율, 보류 자료의 재구성 오차와 후속 모델 성능을 남깁니다. 분할이나 시드를 바꿔도 같은 변수 묶음이 나타나는지 확인합니다. 성분의 순서와 부호가 달라질 수 있어 같은 번호끼리 비교하기 전에 대응하는 성분을 정렬합니다.
4. 운영에 사용할 변환 전체를 저장합니다
열 이름과 순서, 훈련 평균, 스케일러, 성분 행렬, 두 규제 설정과 라이브러리 버전을 보관합니다. 검증과 새 입력에서는 다시 fit하지 않고 저장한 transform을 사용합니다. 성분을 재학습하면 후속 모델이 보는 좌표도 바뀌므로 두 단계를 함께 검증합니다.
실전 팁: 같은 성분 수에서 alpha 후보별 계수 그림과 보류 자료의 오차를 나란히 확인하세요. 읽기 쉬운 성분이 실제 작업에도 도움이 되는지 구별하기 쉽습니다.
사용할 때 무엇을 주의해야 하나요?
첫째, 간단한 성분을 인과관계로 단정하지 않습니다. 남은 변수는 이 데이터에서 재구성에 참여한 변수입니다. 원인이나 반드시 수집해야 할 항목으로 바로 해석하지 않습니다. 강하게 상관된 변수는 서로 대체돼 분할에 따라 계수가 달라질 수 있습니다.
둘째, PCA의 직교성과 분산 순서를 옮기지 않습니다. 성분끼리 겹칠 수 있고 점수도 상관될 수 있습니다. 첫 성분이 항상 가장 큰 분산을 담거나 뒤 성분이 독립이라는 해석을 적용하지 않습니다. 필요한 상관은 실제 변환 결과에서 계산합니다.
셋째, 0이 많다고 메모리와 속도가 자동 개선되지는 않습니다. components_는 0이 많아도 배열로 저장됩니다. 표본 점수는 조밀할 수 있고 학습에는 반복 계산이 필요합니다. 입력·성분·점수와 후속 모델을 포함한 총비용을 측정합니다.
넷째, 학습 오차와 독립 평가를 분리합니다. 작은 alpha가 훈련 재구성을 잘 맞춰도 새 자료의 안정성이나 예측 품질이 좋아진다고 단정하지 않습니다. 계산 한도에 도달한 결과, 모두 0인 성분과 불안정한 변수 기여도 함께 확인합니다.
주의: 희소한 계수, 읽기 쉬운 이름, 작은 재구성 오차와 좋은 예측 성능은 각각 확인할 항목입니다. 하나의 결과로 나머지까지 보장하지 않습니다.
자주 묻는 질문
Q1. 희소 PCA는 0이 많은 입력에만 쓰나요?
아닙니다. 여기서 희소성은 학습한 성분의 계수가 많이 0이라는 의미입니다. 입력 저장 형식과는 구별하며 선택한 API가 희소 행렬을 지원하는지도 별도로 확인합니다.
Q2. 각 성분의 계수가 희소하면 점수도 희소한가요?
반드시 그렇지는 않습니다. components_는 원본 변수의 기여이고 transform 결과는 표본의 새 좌표입니다. 이 구현은 고정 성분에 최소제곱·릿지 계산으로 점수를 구하므로 많은 점수가 0이 아닐 수 있습니다.
Q3. alpha와 ridge_alpha는 같은 규제인가요?
역할이 다릅니다. alpha는 성분 학습의 L1 벌점이고 ridge_alpha는 새 입력의 점수를 계산하는 릿지 벌점입니다. 해석할 성분을 바꾸는 설정과 점수 계산을 안정시키는 설정으로 나눠 비교합니다.
Q4. 성분 수를 정하지 않으면 자동으로 차원이 줄어드나요?
이 구현의 기본 n_components=None은 원본 특징 수를 사용합니다. 출력 차원 감소가 목표라면 더 적은 성분 수를 직접 정합니다. 성분 개수와 각 성분에 참여하는 변수 개수는 다른 설정과 결과입니다.
Q5. 미니배치 모델로 새 표본을 partial_fit할 수 있나요?
MiniBatchSparsePCA는 특징 축의 작은 묶음을 사용하는 방식입니다. 공식 가이드는 partial_fit을 구현하지 않는다고 명시합니다. 새 표본을 조금씩 받는 증분 학습 API라고 가정하지 않습니다.
Q6. inverse_transform이면 원본을 완전히 복원하나요?
성분 점수와 성분 행렬을 곱한 뒤 훈련 평균을 더해 근사 복원합니다. 축소와 규제로 잃은 정보는 남지 않을 수 있습니다. 복원값을 원본과 직접 비교하며 선택적인 앞단 스케일링의 역변환도 함께 확인합니다.
출처
마무리
희소 주성분 분석은 재구성에 사용할 성분의 계수에 0을 늘려 적은 원본 변수로 설명되는 성분을 찾는 방법입니다. 일반 PCA와 이름은 비슷하지만 직교성·설명 분산 순서·새 입력의 점수 계산까지 같다고 보면 안 됩니다.
작은 자료에서 성분 행렬과 점수, 복원값을 나눠 확인해 보세요. 이후 성분 수와 두 규제를 비교하고 보류 자료의 품질과 변수 기여의 안정성을 살핍니다. 운영에서는 같은 열 순서와 저장된 전처리·성분을 사용해야 실험에서 읽은 의미를 유지할 수 있습니다.
