특징 응집(Feature Agglomeration)이란? AI에서 비슷한 입력 열을 묶어 차원을 줄이는 방법
TL;DR
특징 응집은 여러 표본에서 비슷하게 나타나는 입력 열을 계층적으로 묶고, 묶음마다 값을 합쳐 더 적은 열로 표현하는 방법입니다. 고객이나 이미지의 행을 묶는 군집화와 달리 입력 특징을 묶습니다. 기본 평균 집계에서는 각 행의 같은 묶음 값을 평균냅니다. 열별 소속·집계·되펼치기를 나눠 보고 스케일·연결 구조·평가 자료 누수와 정보 손실을 확인합니다.[1][2][6]
핵심 3줄 요약
- 핵심 1
행이 아니라 열을 묶습니다. 표본 수는 유지하고 비슷한 입력 특징들을 더 적은 묶음으로 합칩니다. - 핵심 2
병합과 집계는 다른 단계입니다. 열의 소속을 먼저 학습한 뒤 새 표본에도 같은 소속으로 값을 모읍니다. - 핵심 3
원래 폭으로 펼쳐도 완전 복원은 아닙니다. 평균으로 사라진 열 사이의 차이는 같은 값을 다시 배정해도 돌아오지 않습니다.
이 글에서 다룰 내용
- 특징 응집의 한 문장 정의
- 네 입력 열을 두 열로 줄이는 쉬운 예시
- 열의 병합·행별 집계·새 자료 변환의 순서
- 묶음 수·연결 구조·집계 함수·소속 라벨
- 계층적 군집화·특징 선택·PCA와의 차이
- 이미지 입력과 작은 배열의 점검 순서
- 척도·정보 손실·누수·계산 비용의 주의점
특징 응집을 한 문장으로 정의하면 무엇인가요?
특징 응집은 각 입력 열의 표본별 값들을 비교해 유사한 열을 응집형 계층 구조로 묶고, 각 묶음의 값을 집계해 입력 차원을 줄이는 비지도 변환입니다.
영문명은 Feature Agglomeration이며 여기서는 scikit-learn의
FeatureAgglomeration
을 기준으로 설명합니다. 사용자 가이드는 비슷하게 나타나는 특징들을 계층적 군집화로 묶는 방법이라고 소개합니다. 정답 y를 사용하지 않고 입력 X에서 묶음 구조를 학습합니다.[1][2]
표의 한 행이 이미지 한 장이고 각 열이 고정된 픽셀 위치라면, 여러 이미지에서 비슷한 값을 보이는 위치들을 묶습니다. 한 장 안에서 사물의 종류를 찾아 이름 붙이는 작업은 아닙니다. 출력 열은 원래 열 일부를 그대로 남긴 목록과도 다릅니다.
한 줄 정리: 무엇을 묶는지는 입력 열, 무엇을 내보내는지는 각 행의 묶음별 집계값입니다. 묶음 번호를 표본의 정답 라벨로 읽지 않습니다.
쉬운 예시로 이해해 볼까요?
감자나라ai님이 같은 단위의 네 센서 입력을 세 번 기록했다고 가정해 보겠습니다. 설명용 세 행은
[0,2,10,12]
,
[1,3,9,11]
,
[2,4,8,10]
입니다. 여기서는 첫 두 열과 뒤 두 열을 각각 묶어 평균 집계만 확인합니다.
첫 행은
[1,11]
, 둘째는
[2,10]
, 셋째는
[3,9]
가 됩니다. 네 열이 두 열로 줄었지만 기록은 여전히 세 번입니다. 대표 열을 하나씩 골라 0과 10을 남기는 것과 평균 1과 11을 만드는 것은 다릅니다.
새 행
[4,6,6,8]
에도 같은 열 소속을 적용하면
[5,7]
입니다. 새 표본 한 개에서 열을 다시 묶는 과정이 아닙니다. 학습 때 정한 소속과 입력 순서를 유지해 행별로 값을 모읍니다.[1][6]
첫 집계값을 원래 네 열에 되펼치면
[1,1,11,11]
입니다. 처음의
[0,2,10,12]
와는 다릅니다.
[0,2]
와
[1,1]
은 모두 평균이 1이라 집계값만 보고 어느 입력이었는지 구별할 수 없습니다.[6]
이 평균·되펼치기와 뒤의 집계 함수 비교는 Python 표준 라이브러리로 검산했습니다. 묶음 소속을 직접 정한 교육용 계산이며 scikit-learn으로 군집을 학습하거나 실제 센서·분류 성능을 측정한 결과는 아닙니다. 묶음 번호의 순서까지 라이브러리 출력이라고 주장하지 않습니다.
쉬운 예시: 네 칸을 두 묶음의 평균으로 바꾸면 표는 작아집니다. 같은 평균을 각 칸에 다시 적는 일로 원래 칸 사이의 차이가 복구되지는 않습니다.
왜 AI에서 특징 응집이 중요한가요?
많은 입력을 묶음 단위로 표현합니다
비슷한 입력이 많은 자료에서 뒤 모델이 받을 열 수를 줄이는 후보입니다. 공식 숫자 이미지 예제는 픽셀 위치의 연결 구조를 사용해 특징을 묶고 축소값을 원래 이미지 모양으로 되펼칩니다. 이는 변환을 보여 주는 예제이며 글자 인식 정확도를 자동으로 높인다는 보장은 아닙니다.[3]
어떤 원래 열이 합쳐졌는지 추적합니다
각 특징의 소속을 보관하면 출력 하나에 어떤 입력이 들어갔는지 확인하기 쉽습니다. 묶음 안의 값 차이가 큰지, 필요한 작은 신호가 평균에 묻히는지도 원본과 비교합니다. 묶음에 사람이 이름을 붙이더라도 알고리즘이 그 이름의 의미나 원인을 발견했다고 말하지 않습니다.
특징 응집은 어떤 순서로 작동하나요?
1. 각 열을 표본별 값의 벡터로 봅니다
입력은
(n_samples,n_features)
모양입니다. 열 하나를 모든 훈련 행에서 읽은 값의 벡터로 비교합니다. 확인한 공식 구현의 fit은 내부 군집 계산에 전치한 입력을 전달합니다. 사용자가 원래 표를 미리 뒤집어 넣으면 행과 열의 역할이 달라지므로 일반적인 변환 입력과 혼용하지 않습니다.[1]
2. 연결 기준으로 열의 묶음을 합칩니다
처음에는 특징마다 별도 묶음입니다. 가까운 묶음 쌍을 연결 기준에 따라 반복 병합합니다. 기본 Ward는 병합에 따른 묶음 내부 제곱 오차의 증가를 작게 하는 방향입니다. 연결 행렬을 지정했다면 특징 사이의 이웃 구조도 계산에 반영합니다.[1]
3. 정한 소속으로 행별 값을 모읍니다
학습이 끝나면 각 열의 소속을 고정하고 한 행 안에서 묶음별 집계를 수행합니다. 기본은 산술평균입니다. 새 자료의 transform은 저장된 소속을 사용하므로 표본 수가 달라도 원래 입력 열의 이름·개수·순서·의미는 맞춰야 합니다.[1][6]
실전 팁: 원본 열 목록·소속 라벨·스케일링·연결 구조·집계 함수와 뒤 모델을 함께 저장하세요. 축소된 열 수만 남기면 새 입력에서 같은 변환을 재현하기 어렵습니다.
주요 설정과 결과는 어떻게 읽나요?
묶음 수와 거리 임계값은 서로 다른 종료 조건입니다
기본
n_clusters=2
는 입력 특징을 두 묶음으로 만들겠다는 설정입니다. 고객 두 그룹을 찾거나 출력 행을 두 개로 줄인다는 뜻이 아닙니다. 거리를 기준으로 자르려면
distance_threshold
를 정하며 이때
n_clusters=None
과
compute_full_tree=True
가 필요합니다.[1]
거리·연결 기준·이웃 구조를 구별합니다
linkage="ward"
와
metric="euclidean"
이 기본 조합입니다. Ward에 코사인 거리를 그대로 결합하지 않습니다.
connectivity
는 특징끼리의 이웃 구조이고 표본끼리의 연결표가 아닙니다. 네 입력 열이라면 기본적인 연결 행렬의 폭도 네 특징에 대응해야 합니다.[1]
숫자 이미지 예제는 격자 이웃을 만드는
grid_to_graph
를 사용합니다. 기본
connectivity=None
은 이런 공간 구조를 자동으로 알지 못합니다. 연결 구조를 추가하는 일은 단순한 계산 속도 변경이 아니라 어떤 특징이 묶일지에 영향을 주는 설계입니다.[1][3]
집계 함수는 묶음의 숫자를 정합니다
pooling_func
의 기본은
np.mean
입니다. 이 함수는 묶음 안의 열들을
axis=1
방향으로 줄일 수 있어야 합니다. 앞의 첫 행에서 평균 대신 최댓값으로 모으면
[2,12]
가 됩니다. 같은 소속이라도 집계 규칙에 따라 새 입력의 뜻이 달라집니다.[1][6]
소속 라벨과 역변환의 뜻을 확인합니다
labels_
의 길이는 원래 특징 수입니다. 원본 네 열을 묶었다면 라벨도 네 개이고 표본 세 행의 라벨이 아닙니다.
n_clusters_
는 실제 묶음 수입니다. 소속 숫자 자체에 크기 순위나 정답 클래스의 의미는 없습니다.[1]
inverse_transform
은 축소값을 같은 묶음의 원래 열 위치마다 다시 배정합니다. 입력 폭을 되찾는 기능이지 사라진 차이를 추정하는 복원 모델이 아닙니다. 문서의 역변환 설명에 표본과 특징을 혼용한 표현이 있어도, 길이와 공식 구현의 라벨 인덱싱을 기준으로 확인합니다.[1][6]
특징 응집과 헷갈리는 용어는 무엇이 다른가요?
계층적 클러스터링은 묶는 대상부터 확인합니다
기존 계층적 클러스터링 글은 주로 문서 같은 사례의 병합과 덴드로그램을 설명하며 특징 응집을 활용처로 짧게 언급합니다. 이 글은 입력 열별 소속, 행별 집계, 새 입력 변환과 역변환 손실을 다룹니다. 같은 병합 원리를 쓰더라도 출력의 대상과 읽는 질문이 다릅니다.
특징 선택과 PCA는 새 입력을 만드는 방식이 다릅니다
특징 선택은 원래 열 일부를 남깁니다. 특징 응집은 묶음의 값을 합쳐 새 열을 만듭니다. 공식 비교 예제도 단변량 선택과 Ward 응집을 별도 전략으로 두고 베이지안 릿지에 연결합니다. 정답과의 단변량 관계로 고르는 방식과 입력끼리 묶는 방식을 구분합니다.[4]
PCA는 원래 특징을 조합한 새 축을 찾습니다. 특징 응집의 평균 출력은 정해진 묶음 안의 값만 모읍니다. 특징 응집의 열끼리가 PCA 성분처럼 서로 직교하거나 분산 설명 순서로 정렬된다고 가정하지 않습니다.[2]
이미지 분할과 표본 평균도 같은 작업은 아닙니다
한 이미지에서 영역을 나누는 결과와 여러 이미지의 고정된 픽셀 위치를 공통으로 묶는 변환은 구분합니다. 특징 응집의 집계는 한 행 안의 묶음 열을 모으며 서로 다른 이미지 행들을 한 장으로 평균내지 않습니다. 각 출력 행은 여전히 원래 이미지 한 장에 대응합니다.[3][6]
비교 정리: 사례 군집화는 행의 소속, 특징 응집은 열의 소속과 집계값, 특징 선택은 원래 열의 부분집합, PCA는 새로운 축입니다. 입력을 줄였다는 공통점만으로 같은 결과라고 보지 않습니다.
실전에서는 어디에 쓰이나요?
위치가 고정된 이미지 표현을 비교합니다
같은 크기와 정렬의 이미지에서 픽셀을 입력 열로 펼쳐 묶음별 표현을 비교하는 데 검토합니다. 공식 예제의 축소값·되펼친 이미지·소속 지도를 함께 보면 어느 영역이 합쳐졌는지 살필 수 있습니다. 정렬이 어긋난 이미지에서 같은 열이 같은 대상을 뜻한다고 가정하지 않습니다.[3]
비슷한 수치 채널의 기준 모델을 만듭니다
단위와 시점이 맞는 측정 채널이 많을 때 전체 입력·일부 선택·묶음 집계를 같은 예측 모델로 비교하는 실험을 설계할 수 있습니다. 이는 활용 제안이며 실제 장비의 비용 절감이나 정확도 향상을 측정한 결과는 아닙니다. 묶음이 안정적인지와 드문 사건의 오류도 따로 확인합니다.
특징 응집을 적용할 때 어떤 순서로 확인하나요?
1. 열의 의미와 평가 분할을 먼저 고정합니다
원본 이름·단위·기록 시점·결측 처리와 이미지라면 픽셀 순서를 적습니다. 훈련·검증·테스트를 먼저 나눕니다. 정답을 보지 않는 변환도 훈련 입력의 분포에서 구조를 배우므로 테스트 입력까지 합쳐 묶음을 정하지 않습니다.[5]
2. 작은 배열에서 집계와 되펼치기를 대조합니다
앞 예시처럼 소속이 고정된 배열에서 평균, 새 행 변환과 역변환의 예상값을 비교합니다. 행 수는 같고 출력 폭은 묶음 수인지 확인합니다. 원본 열 목록과 소속을 함께 출력하고 역변환이 원본과 다르다면 단순 오류인지 예정된 집계 손실인지 구분합니다.
3. 전처리와 뒤 모델 전체를 함께 검증합니다
스케일링·응집 변환·예측 모델을 하나의 파이프라인으로 두고 전체를 교차 검증합니다. 각 훈련 폴드에서 전처리와 열 소속을 새로 학습해야 합니다. 묶음 수를 고른 뒤 최종 테스트를 확인하고 무축소 기준 모델의 오류·시간·메모리와 비교합니다.[4][5]
사용할 때 무엇을 주의해야 하나요?
첫째, 비슷한 움직임을 높은 상관과 무조건 같게 보지 않습니다. 기본 유클리드 비교에는 열의 크기와 평균 수준도 관여합니다. 사용자 가이드는 특징의 척도나 통계적 성질이 크게 다르면 관련 열의 연결을 놓칠 수 있어 표준화를 검토하라고 안내합니다. 표준화 역시 훈련 자료에서만 맞춥니다.[2][5]
둘째, 평균으로 사라지는 차이를 확인합니다. 두 채널의 반대 변화가 평균에서 상쇄될 수 있고 작은 이상 신호가 묻힐 수 있습니다. 묶음별 원본 차이와 중요한 사건을 나눠 살피고 출력 열을 줄인 사실만으로 중요한 정보를 보존했다고 판정하지 않습니다.
셋째, 새 자료마다 소속을 다시 맞추지 않습니다. 같은 모델에 들어가는 출력 열의 뜻이 바뀔 수 있습니다. 새 시기의 입력 분포가 달라졌다면 저장된 변환의 오류를 확인하고 재학습·버전 변경으로 다룹니다. 원본 열 누락을 임의의 다른 열로 대체하지 않습니다.
넷째, 축소 후 비용만 보고 전체가 저렴하다고 단정하지 않습니다. 특징 사이의 병합 구조를 만드는 비용이 별도로 듭니다. 많은 열에서는 작은 규모로 먼저 학습 시간과 메모리를 측정합니다. 거리 기록과 전체 트리 같은 추가 계산도 목적이 있을 때 선택합니다.[1]
주의: 묶음은 입력의 숫자 관계에서 얻은 표현입니다. 원인 관계·안전한 자동 결정·개인정보 비식별화나 무손실 복원을 보증하지 않습니다. 원본과 평가 결과를 별도로 남깁니다.
자주 묻는 질문
Q1. 고객이나 이미지가 두 그룹으로 분류되나요?
이 글의 변환은 입력 특징을 묶습니다. 출력 행 수는 원래 표본 수이고 열 수가 묶음 수로 줄어듭니다. 각 표본의 정답 클래스나 고객 집단 라벨을 직접 반환하는 분류기가 아닙니다.[1]
Q2. 정답 라벨이 없어도 소속을 학습하나요?
fit은 정답 y를 무시하고 입력에서 열의 구조를 배웁니다. 그러나 좋은 묶음이 예측 목표에도 유용한지는 별도 검증이 필요합니다. 라벨을 안 쓴다는 이유로 테스트 입력까지 학습에 넣지 않습니다.[1][5]
Q3. 소속 라벨은 표본 수만큼 생기나요?
아닙니다. 각 원래 특징에 하나씩 대응합니다. 네 열이라면 소속도 네 개입니다. 집계된 결과의 행 수와 라벨 배열의 길이를 같은 기준으로 비교하지 않습니다.[1]
Q4. 평균 대신 최댓값을 써도 같은 결과인가요?
같은 소속이라도 집계값과 의미가 달라집니다. 집계 함수는 묶음의 열들을 행별로 줄이는 계약을 만족해야 합니다. 앞 예시의 평균과 최댓값을 비교한 수치는 직접 정한 소속의 계산입니다.[1][6]
Q5. 역변환을 하면 원래 숫자가 모두 돌아오나요?
묶음 값을 각 원래 위치에 다시 놓습니다. 평균 전에 있던 열 사이의 차이는 일반적으로 사라집니다. 입력 모양의 회복과 원래 정보의 완전 복구를 나눠 읽습니다.[6]
Q6. 묶음을 줄일수록 예측이 좋아지나요?
표현이 간단해져도 필요한 차이를 잃을 수 있습니다. 무축소·특징 선택·특징 응집을 같은 분할과 모델에서 비교합니다. 평균 점수뿐 아니라 드문 사건의 오류와 전체 학습 비용을 함께 봅니다.
출처
- [1] scikit-learn, FeatureAgglomeration API
- [2] scikit-learn, Unsupervised dimensionality reduction
- [3] scikit-learn, Feature agglomeration
- [4] scikit-learn, Feature agglomeration vs. univariate selection
- [5] scikit-learn, Data leakage and pipelines
- [6] scikit-learn, FeatureAgglomeration implementation 1.9.1
마무리
특징 응집은 원래 입력 열을 계층적으로 묶고 각 행의 묶음별 집계값을 만들어 차원을 줄입니다. 열 소속을 학습하는 단계와 값을 모으는 단계, 원래 위치로 되펼치는 단계를 구별하면 사례 군집화·특징 선택·PCA와의 차이가 분명해집니다.
처음에는 네 열을 두 묶음으로 평균내는 작은 배열부터 확인해 보세요. 실제 자료에서는 단위와 열 순서를 고정하고 훈련 자료에서만 변환을 맞춥니다. 출력 폭의 감소보다 중요한 신호의 손실과 새 자료의 오류, 전체 비용을 기준으로 채택 여부를 정합니다.
