라벨 전파(Label Propagation)란? AI에서 일부 정답을 이웃 관계로 퍼뜨려 분류하는 방법
TL;DR
라벨 전파는 일부 사례의 정답 정보를 라벨 없는 사례까지 유사도 그래프를 따라 퍼뜨리는 반지도 분류 방법입니다. 미라벨 데이터도 연결 구조를 만드는 데 사용합니다. KNN의 한 번의 이웃 투표나 라벨 없는 군집화와 구분하며, 그래프의 가까움이 같은 정답을 뜻하는지 먼저 확인합니다. 처음 붙인 라벨의 오류와 잘못된 연결도 함께 퍼질 수 있어 별도 평가와 사람 검토가 필요합니다.
핵심 3줄 요약
- 핵심 1
일부 정답이 출발점입니다. 라벨이 있는 사례와 없는 사례를 함께 연결하고 알려진 클래스의 정보를 전파합니다. - 핵심 2
미라벨 사례도 관계를 만듭니다. 정답은 모르더라도 특징의 가까움을 이용해 정보가 흐를 경로를 구성합니다. - 핵심 3
연결과 라벨을 검증합니다. 그래프가 잘못되면 오류도 퍼집니다. 자동으로 얻은 라벨은 확인된 정답과 구분합니다.
이 글에서 다룰 내용
- 라벨 전파의 한 문장 정의
- 두 묶음과 일부 정답으로 이해하는 쉬운 예시
- 유사도 그래프·분포 갱신·라벨 고정의 순서
- RBF·KNN 연결과 반복 종료 설정
- LabelSpreading·KNN·군집화·능동 학습과의 차이
- 미라벨 자료의 사용처와 검증 체크리스트
- 잘못된 연결·라벨 오류·평가 범위의 주의점
라벨 전파를 한 문장으로 정의하면 무엇인가요?
라벨 전파(Label Propagation)는 라벨이 있는 데이터와 없는 데이터를 유사도 그래프로 연결하고, 알려진 클래스의 정보를 반복 전달해 미라벨 사례의 클래스를 추정하는 반지도학습 방법입니다.
각 사례를 그래프의 점으로 두고 비슷한 사례 사이에 가중 연결을 만듭니다. 정답이 없는 사례도 점과 연결을 구성하므로, 라벨이 붙은 자료만 사용하는 분류와 학습에 활용하는 정보가 다릅니다. 미라벨 자료가 정답을 직접 제공하는 것은 아닙니다.
Zhu와 Ghahramani의 2002년 원 논문은 가까운 점의 라벨이 비슷하다는 가정 아래 미라벨 데이터의 밀집 영역을 따라 정보를 전달합니다. 이 글은 일부 정답을 시작점으로 쓰는 반지도 분류를 설명하며, scikit-learn의
LabelPropagation
을 구체적인 구현으로 살펴봅니다.
한 줄 정리: 라벨 없는 자료는 빈칸만 남은 자료가 아닙니다. 사례 사이의 연결을 알려 주는 입력으로 함께 사용합니다.
쉬운 예시로 이해해 볼까요?
감자나라ai님이 수치 특징으로 두 유형의 기록을 나눈다고 가정해 보겠습니다. 특징값이 가까운 기록끼리 같은 유형이라는 조건이 맞는 교육용 자료입니다. 실제 고객이나 제품 데이터가 아니며, 아래 결과로 업무 정확도를 주장하지 않습니다.
- 첫 묶음의 특징값은
[0.0, 0.1, 0.2]이고 첫 기록에만 클래스 0이 붙어 있습니다. - 둘째 묶음은
[10.0, 10.1, 10.2]이고 첫 기록에만 클래스 1이 붙어 있습니다. - 라벨 배열은
[0, -1, -1, 1, -1, -1]입니다. 정수-1은 이 구현에서 아직 라벨을 모른다는 표시입니다.
각 묶음 안에서 이웃을 연결하도록
kernel="knn"
과
n_neighbors=3
을 지정했습니다. scikit-learn 1.9.1로 실행한
transduction_
결과는
[0, 0, 0, 1, 1, 1]
이었습니다. 알려진 두 라벨은 고정되고 나머지 기록에 클래스 정보가 전달됐습니다.
이 결과는 학습에 함께 넣은 여섯 기록의 라벨을 채운 것입니다. 미리 분리한 새 자료의 성능 평가와는 다릅니다. 두 묶음 사이에 잘못된 연결을 많이 만들거나 출발 라벨을 틀리게 붙이면 같은 전달 과정이 오분류를 늘릴 수도 있습니다.
쉬운 예시: 일부 기록에만 이름표를 붙인 뒤 비슷한 기록 사이의 연결을 따라 이름표 정보를 전한다고 생각하세요. 연결 자체가 업무상 같은 유형인지 확인하는 일이 먼저입니다.
왜 AI에서 라벨 전파가 중요한가요?
라벨 없는 자료의 구조를 활용합니다
정답을 붙이는 비용은 크지만 입력 자료가 많이 쌓인 분류 문제에서 후보로 검토합니다. 미라벨 사례들이 이어지는 모양을 이용하면 소수의 출발 라벨에서 정보를 넓힐 단서가 생깁니다. 데이터가 많다는 사실만으로 이 가정이 맞거나 성능이 좋아지는 것은 아닙니다.
라벨 부족과 특징 표현을 함께 점검합니다
기존 라벨만으로 구분하기 어려운 모양이 미라벨 자료의 연결에서 드러나는지 확인합니다. 특징값이 같은 클래스의 관계를 잘 보존해야 합니다. 문서의 업무 주제 대신 길이나 작성 형식이 가까움을 결정한다면 연결을 따라 전한 라벨도 목적과 어긋납니다.
핵심 인사이트: 라벨 전파의 재료는 적은 정답과 많은 자료만이 아닙니다. 정답의 의미와 맞는 유사도 관계가 함께 필요합니다.
라벨 전파는 어떤 순서로 작동하나요?
1. 알려진 라벨과 미라벨 사례를 함께 준비합니다
입력 특징의 한 행과 라벨 배열의 한 항목을 같은 기록으로 맞춥니다. 클래스가 확인된 사례에는 정답을 넣고 모르는 사례에는
-1
을 넣습니다. 이 값은 새로운 정상 클래스 이름이 아니므로 실제 정답 코드와 겹치지 않게 관리합니다.
2. 유사도 그래프를 구성합니다
모든 입력 사례의 특징으로 정보 전달 관계를 만듭니다. RBF 방식은 가까운 사례 쌍에 큰 가중치를 주고, KNN 방식은 정한 이웃과 연결합니다. 라벨이 없는 점들도 중간 경로가 되므로 알려진 정답과 직접 인접하지 않은 점에 정보가 전달될 수 있습니다.
3. 클래스 분포를 갱신하고 출발 라벨을 고정합니다
이웃에서 받은 정보를 가중치에 따라 모아 각 점의 클래스 분포를 갱신합니다. 기본 LabelPropagation은 알려진 라벨의 분포를 매 반복 원래 상태로 되돌리는 하드 고정을 사용합니다. 원 논문의 전파·행 정규화·라벨 고정 절차도 이 출발점 유지의 역할을 설명합니다.
분포의 변화가 종료 기준보다 작아지거나 반복 한도에 도달하면 계산을 끝냅니다.
label_distributions_
는 학습 사례별 클래스 분포이고
transduction_
는 학습 때 부여한 클래스입니다. 출력 열을 읽을 때는
classes_
의 순서를 함께 확인합니다.
그래프와 반복 설정은 무엇을 뜻하나요?
kernel·gamma·n_neighbors는 연결을 정합니다
확인한 API의 기본 커널은
kernel="rbf"
입니다.
gamma
가 커지면 같은 양의 거리에서도 유사도가 더 빠르게 작아집니다. 이 값은 라벨의 수나 반복 횟수가 아닙니다. 특징의 단위가 바뀌면 같은 gamma의 효과도 달라집니다.
kernel="knn"
에서는
n_neighbors
가 연결할 이웃 수를 정합니다. 이 설정은 KNN 분류기의 투표 수를 그대로 옮긴 설명과 구분합니다. 작은 이웃 수는 그래프를 끊을 수 있고 큰 값은 다른 클래스 사이를 연결할 수 있어 실제 연결을 살펴봅니다.
max_iter·tol은 계산 종료를 정합니다
LabelPropagation
의 반복 한도는 기본 1000, 허용 변화 기준은 기본 0.001입니다.
LabelSpreading
의 기본 반복 한도는 30으로 다릅니다. 현재 설치 버전의 값을 확인하고 반복 경고와 실제
n_iter_
도 기록합니다.
한도에 도달했다는 사실을 충분히 안정된 결과나 좋은 정확도의 증거로 읽지 않습니다. 반복 수를 늘리더라도 잘못된 그래프나 라벨 오류가 해결되지는 않습니다. 종료 상태와 정답을 비교한 품질 지표는 별도로 남깁니다.
transduction_과 predict는 평가 대상이 다릅니다
transduction_
는 학습에 함께 넣었던 사례의 추정 라벨입니다. 이 scikit-learn 구현은 새 입력에
predict
와
predict_proba
를 적용하는 기능도 제공합니다. 그래프에 참여했던 입력의 라벨 복원과 이후 유입되는 입력의 예측을 같은 실험으로 합치지 않습니다.
라벨 전파와 헷갈리는 용어는 무엇이 다른가요?
LabelSpreading과의 차이
LabelSpreading은 정규화한 그래프 관계와 소프트 고정을 사용하는 변형입니다. 처음 알려진 라벨의 정보를 유지하면서 이웃의 영향도 허용합니다. 기본 LabelPropagation처럼 매 반복 출발 라벨을 완전히 되돌리는 방식과 다릅니다.
LabelSpreading의
alpha
는 초기 정보보다 이웃 정보를 얼마나 받아들일지 정하는 값이며 허용 범위는 0과 1 사이입니다. 기본값은 0.2입니다.
LabelPropagation
생성자에는 alpha 옵션이 없으므로 이름이 비슷하다는 이유로 같은 인자를 넣지 않습니다.
KNN 분류와의 차이
기존 K-최근접 이웃(KNN) 글은 새 입력 가까이에 있는 라벨된 학습 사례의 정답을 모아 예측합니다. 라벨 전파는 미라벨 사례까지 그래프에 참여시켜 정보를 반복 전달합니다. 같은 이웃 개념을 쓰더라도 학습 자료의 역할과 예측 절차가 다릅니다.
스펙트럴 클러스터링과의 차이
스펙트럴 클러스터링은 그래프에서 새 좌표를 얻고 라벨 없이 군집을 나눕니다. 라벨 전파는 이미 확인된 클래스가 출발점입니다. 그래프를 쓴다는 공통점만으로 군집 번호와 정답 클래스 추정값을 같게 읽지 않습니다.
능동 학습·자기 학습과의 차이
능동 학습은 사람에게 정답을 물을 사례를 고릅니다. 라벨 전파는 연결 구조로 미라벨 사례의 클래스를 추정합니다. 자기 학습은 분류기의 예측 중 일부를 라벨로 채택해 다시 학습하는 접근입니다. 그래프에서 분포를 전달하는 방식과 구분하며 필요하면 사람 검토와 함께 사용합니다.
비교 정리: KNN은 이웃의 정답 결합, 군집화는 라벨 없는 그룹 탐색, 능동 학습은 다음 질문 선택, 라벨 전파는 일부 정답의 그래프 전달입니다.
실전에서는 어디에 쓰이나요?
정답이 부족한 분류의 검토 후보를 만듭니다
이미지나 문서에서 적은 확인 라벨과 미라벨 특징을 함께 분석하는 후보입니다. 문서라면 텍스트를 비교 가능한 수치 특징으로 먼저 표현해야 합니다. 예측 라벨은 확인 라벨과 다른 필드에 저장하고 사람이 수정한 결과를 추적합니다. 라벨링 비용을 얼마나 줄였는지는 실제 검토 시간과 별도 품질 평가로 판단합니다.
곡선형 자료의 연결 가정을 시험합니다
공식 원형 자료 예제는 200개 점 중 두 점에만 라벨을 알려 줍니다. 제목은 Label Propagation이지만 현재 본문 코드가 실제로 만드는 모델은
LabelSpreading(kernel="knn", alpha=0.8)
입니다. 예제 이름만 보고 기본 LabelPropagation의 옵션이나 결과라고 설명하면 안 됩니다.
같은 설정을 실행해 숨겨 둔 원형 자료의 라벨이 복원되는 것을 확인했습니다. 이는 인위적으로 만든 두 원의 입력을 모두 그래프에 넣은 시연입니다. 실제 자료에서도 클래스마다 라벨 하나면 충분하다거나 새로운 입력을 완벽히 맞힌다는 결론으로 넓히지 않습니다.
라벨 전파를 적용할 때 어떤 순서로 확인하나요?
1. 정답 기준과 평가 범위를 고정합니다
예측할 클래스와 라벨 기준을 먼저 정합니다. 학습 자료의 미라벨을 채울 것인지 이후 새 입력을 예측할 것인지도 나눕니다. 일부 정답을 숨겨 평가한다면 그 정답은 모델에 전달하지 않고 따로 보관합니다. 사람·장비·문서의 중복도 확인합니다.
2. 특징과 출발 라벨을 점검합니다
같은 클래스의 사례가 실제로 가까운지 표본을 읽고 알려진 라벨의 오류를 검수합니다. 각 클래스와 주요 집단의 출발 라벨이 부족한지도 확인합니다. 스케일링과 특징 추출에 사용한 자료 범위를 기록하고 향후 입력 평가에서는 보류 자료를 미리 섞지 않습니다.
3. 연결 설정과 계산 비용을 비교합니다
이웃 수나 gamma를 바꿔 연결 상태와 결과의 안정성을 비교합니다. RBF는 조밀한 사례 쌍 행렬을 만들기 때문에 데이터가 커지면 메모리와 반복 계산 비용이 커집니다. KNN의 희소 연결도 그래프 생성 비용을 없애지는 않으므로 작은 규모에서 측정합니다.
4. 예측 라벨과 사람 확인을 분리합니다
확인된 정답과 예측 라벨을 같은 값처럼 덮어쓰지 않습니다. 알려진 라벨만 쓰는 기준 분류기와 비교하고, 숨겨 둔 정답이나 보류 자료에서 클래스별 오류를 확인합니다. 분포 점수가 높더라도 민감한 분류나 자동 제재로 바로 연결하지 않습니다.
실전 팁: 입력 범위, 라벨 출처, 특징 변환, 그래프 설정, 종료 상태, 평가 대상과 검토 결과를 함께 남기세요.
사용할 때 무엇을 주의해야 하나요?
첫째, 잘못된 연결도 라벨을 전달합니다. 서로 다른 정답이 가까운 특징을 갖는다면 그래프의 매끄러운 결과가 오히려 오류를 키울 수 있습니다. 미라벨 자료를 더 넣었을 때 기존 결과가 왜 바뀌는지 비교하고 경계 사례를 검토합니다.
둘째, 하드 고정은 라벨 오류를 교정하지 않습니다. LabelPropagation은 알려진 라벨을 계속 유지합니다. 잘못된 출발점의 영향이 주변으로 번질 수 있습니다. LabelSpreading으로 바꿨다는 이유만으로 모든 오류가 자동 수정된다고 믿지도 않습니다.
셋째, 출발 라벨이 없는 집단을 확인합니다. 연결이 끊긴 영역에 알려진 라벨이 없으면 전달할 정보가 부족합니다. 배열에 클래스가 출력됐다는 사실만으로 그 영역의 정답이 밝혀진 것은 아닙니다. 드문 클래스가 출발 자료에 전혀 없는지도 살펴봅니다.
넷째, 예측 분포는 검증된 정답률이 아닙니다. label_distributions_와 predict_proba는 모델의 분포·확률 추정치입니다. 그래프가 강하게 한쪽을 지지해도 실제로 맞는다는 보장은 없습니다. 확률이 업무 결정에 쓰이면 별도 자료에서 신뢰성을 검토합니다.
주의: 미라벨 입력을 그래프에 넣는 것은 이 방법의 일부입니다. 이를 숨기고 보지 않은 자료의 성능이라고 보고하면 평가 범위를 잘못 설명하게 됩니다.
자주 묻는 질문
Q1. 라벨이 하나도 없어도 쓸 수 있나요?
여기서 설명한 반지도 분류는 알려진 클래스 라벨이 출발점입니다. 라벨 없이 구조를 나누려는 목적은 군집화와 구분합니다. 정답이 없는 전체 자료에 클래스를 자동 발견해 이름까지 붙여 주는 방법으로 생각하지 않습니다.
Q2. 미라벨 데이터에는 무엇을 넣나요?
scikit-learn의 라벨 배열 y에서 모르는 사례는 정수 -1로 표시합니다. 입력 X에는 그 사례의 특징을 그대로 둡니다. -1을 새로운 클래스 코드로 함께 사용하거나 특징값 자체를 -1로 바꾸는 절차와 혼동하지 않습니다.
Q3. 알려진 라벨도 나중에 바뀌나요?
기본 LabelPropagation은 알려진 라벨의 분포를 원래 상태로 고정합니다. LabelSpreading은 소프트 고정을 사용해 이웃 정보를 반영합니다. 두 생성자의 인자와 실제 결과를 따로 확인해야 합니다.
Q4. KNN 커널이면 그냥 KNN 분류인가요?
아닙니다. 이웃 연결을 만드는 데 KNN을 사용한다는 뜻입니다. 미라벨 사례도 그래프에 참여하고 클래스 정보가 반복 전달됩니다. 라벨된 이웃의 투표를 한 번 모으는 분류와 절차가 다릅니다.
Q5. 학습 뒤 새 입력에도 사용할 수 있나요?
이 scikit-learn 구현은 predict와 predict_proba를 제공합니다. 다만 학습 그래프에 포함됐던 자료의 transduction_ 결과와 새로운 입력의 예측은 서로 다른 평가 대상이므로 별도로 검증합니다.
Q6. 미라벨 자료가 많으면 항상 좋아지나요?
그렇지 않습니다. 정답과 맞지 않는 연결, 다른 분포의 자료, 중복과 잘못된 출발 라벨이 있으면 결과가 나빠질 수 있습니다. 같은 평가 조건에서 기준 분류기와 비교하고 추가 자료의 효과를 확인합니다.
출처
마무리
라벨 전파는 일부 정답과 미라벨 사례를 그래프로 연결해 클래스 정보를 퍼뜨리는 반지도 분류 방법입니다. KNN의 이웃 투표, 라벨 없는 군집화, 사람에게 다음 정답을 묻는 능동 학습과는 목적과 절차가 다릅니다.
처음 적용한다면 모델 옵션보다 출발 라벨의 품질과 연결의 의미부터 확인하세요. 그다음 그래프 설정과 종료 상태를 기록하고 추정 라벨을 별도 정답으로 검증합니다. 학습 자료의 빈 라벨을 채운 결과와 새 입력의 성능을 구분해야 이 방법이 현재 분류 문제에 도움이 되는지 판단할 수 있습니다.
