SMOTE
이 문서에서는 Azure Machine Learning 디자이너의 SMOTE 구성 요소를 사용하여 기계 학습에 사용되는 데이터 세트에서 불충분한 사례 수를 늘리는 방법을 설명합니다. 기존 사례를 단순히 복제하는 것보다 SMOTE를 사용하는 것이 드문 사례의 수를 늘리는 더 좋은 방법입니다.
SMOTE 구성 요소를 불균형한 데이터 세트 에 연결합니다. 데이터 세트가 불균형해지는 이유는 여러 가지가 있습니다. 예를 들어 대상으로 하는 범주가 채우기에서 드물거나 데이터를 수집하기가 어렵기 때문일 수 있습니다. 일반적으로 분석하려는 클래스가 과소 표현되는 경우 SMOTE를 사용합니다.
구성 요소는 원래 샘플을 포함하는 데이터 세트를 반환합니다. 또한 지정한 백분율에 따라 여러 가상 소수 샘플도 반환합니다.
한눈에 보는 SMOTE
SMOTE(Virtual Minority Oversampling Technique)는 데이터 세트의 사례 수를 균형 잡힌 방식으로 늘리기 위한 통계 기술입니다. 구성 요소는 입력으로 제공하는 기존 소수 사례에서 새 인스턴스를 생성하는 방식으로 작동합니다. 이 SMOTE 구현은 대부분의 사례 수를 변경하지 않습니다.
새 인스턴스는 기존 소수 사례의 복사본일 뿐입니다. 대신 알고리즘은 각 대상 클래스 및 가장 가까운 인접 항목에 대한 기능 공간의 샘플을 가져옵니다. 그런 다음, 알고리즘이 대상 사례의 기능을 인접 한 항목의 기능과 결합하는 새 예제를 생성합니다. 이 방법을 사용하면 각 클래스에서 사용할 수 있는 기능이 늘어나고 샘플이 더 일반화됩니다.
SMOTE는 전체 데이터 세트를 입력으로 사용하지만 소수 사례의 비율만 증가합니다. 예를 들어 사례의 1%만 대상 값 A(소수 클래스)를 가지며, 사례의 99%는 값 B를 갖는 불균형 데이터 세트가 있다고 가정하겠습니다. 소수 사례의 백분율을 이전 백분율의 두 배로 늘리려면 구성 요소의 속성에서 SMOTE 백분율에 200을 입력합니다.
예제
작은 데이터 세트와 함께 SMOTE를 사용하여 작동 방식을 확인하는 것이 좋습니다. 다음 예제에서는 Azure Machine Learning 디자이너에서 사용할 수 있는 헌혈 데이터 세트를 사용합니다.
파이프라인에 데이터 세트를 추가하고 데이터 세트의 출력에서 시각화를 선택하면 데이터 세트의 748개 행 또는 사례 중 570개 사례(76%)가 클래스 0이고 178개 사례(24%)가 클래스 1임을 확인할 수 있습니다. 이 결과는 심각하게 불균형하지만 클래스 1은 헌혈한 사람을 나타내므로 이러한 행에는 모델링할 기능 공간이 포함됩니다.
사례 수를 늘리려면 다음과 같이 100의 배수를 사용하여 SMOTE 백분율 값을 설정할 수 있습니다.
클래스 0 | 클래스 1 | total | |
---|---|---|---|
원본 데이터 세트 (SMOTE 백분율 = 0에 해당) |
570 76% |
178 24% |
748 |
SMOTE 백분율 = 100 | 570 62% |
356 38% |
926 |
SMOTE 백분율 = 200 | 570 52% |
534 48% |
1,104 |
SMOTE 백분율 = 300 | 570 44% |
712 56% |
1,282 |
Warning
SMOTE를 사용하여 사례 수를 늘리면 보다 정확한 모델을 생성할 수 없습니다. 사례 추가가 모델에 미치는 영향을 확인하려면 다양한 백분율, 다양한 기능 집합 및 여러 인접 항목으로 파이프라인을 사용해 보세요.
SMOTE를 구성하는 방법
파이프라인에 SMOTE 구성 요소를 추가합니다. 조작 범주의 데이터 변환 구성 요소에서 구성 요소를 찾을 수 있습니다.
강화하려는 데이터 세트를 연결합니다. 특정 열만 사용하거나 일부를 제외하여 새 사례를 구축하기 위한 기능 공간을 지정하려면 데이터 세트에서 열 선택 구성 요소를 사용합니다. 그런 다음 SMOTE를 사용하기 전에 사용하려는 열을 격리할 수 있습니다.
그렇지 않으면 SMOTE를 통해 새 사례를 만드는 것은 입력으로 제공하는 모든 열을 기반으로 합니다. 기능 열 중 하나 이상의 열이 숫자입니다.
레이블 또는 대상 클래스를 포함하는 열이 선택되어 있는지 확인합니다. SMOTE는 이진 레이블만 허용합니다.
SMOTE 구성 요소는 레이블 열에서 소수 클래스를 자동으로 식별한 다음, 해당 클래스에 대한 모든 예제를 가져옵니다. 모든 열에는 NaN 값이 있을 수 없습니다.
SMOTE 백분율 옵션에서 출력 데이터 세트에 있는 소수 사례의 대상 백분율을 나타내는 정수를 입력합니다. 예시:
0을 입력 합니다. SMOTE 구성 요소는 입력으로 제공한 것과 정확히 동일한 데이터 세트를 반환합니다. 새로운 소수 사례를 추가하지 않습니다. 이 데이터 세트에서 클래스 비율은 변경되지 않았습니다.
100을 입력 합니다. SMOTE 구성 요소는 새로운 소수 사례를 생성합니다. 원래 데이터 세트에 있던 동일한 수의 소수 사례를 추가합니다. SMOTE는 대수의 수를 늘리지 않으므로 각 클래스의 사례 비율이 변경되었습니다.
200을 입력합니다. 구성 요소는 원래 데이터 세트에 비해 소수 사례의 백분율을 두 배로 만듭니다. 이로 인해 이전보다 두 배 많은 소수 사례가 발생하지는 않습니다 . 대신 데이터 세트의 크기가 증가하여 대부분의 사례 수가 동일하게 유지됩니다. 소수 사례의 수는 원하는 백분율 값과 일치할 때까지 증가합니다.
참고 항목
SMOTE 백분율에는 100의 배수만 사용합니다.
가장 가까운 인접 항목 수 옵션을 사용하여 SMOTE 알고리즘이 새 사례를 빌드하는 데 사용하는 기능 공간의 크기를 결정합니다. 가장 가까운 인접 항목은 대상 사례와 유사한 데이터 행(사례)입니다. 두 사례 간의 거리는 모든 기능의 가중치 벡터를 결합하여 측정됩니다.
- 가장 가까운 인접 항목의 수를 늘리면 더 많은 사례에서 기능을 얻을 수 있습니다.
- 가장 가까운 인접 항목의 수를 낮게 유지하면 원래 샘플의 기능과 더 유사한 기능을 사용합니다.
동일한 데이터를 사용하는 동일한 파이프라인의 실행에서 동일한 결과를 보장하려면 임의 시드 상자에 값을 입력합니다. 그러지 않으면 파이프라인을 배포할 때 구성 요소가 프로세서 클록 값을 기준으로 임의 시드를 생성합니다. 임의 시드가 생성되면 실행에서 약간 다른 결과가 발생할 수 있습니다.
파이프라인을 제출합니다.
구성 요소의 출력은 원래 행을 포함하는 데이터 세트와 소수 사례가 포함된 많은 수의 추가된 행을 포함합니다.
기술 정보
SMOTE 구성 요소를 사용하는 모델을 게시하는 경우 예측 파이프라인에서 SMOTE를 제거한 후 웹 서비스로 게시합니다. 왜냐하면 SMOTE는 학습 중에 모델을 개선하기 위한 것이고, 채점용이 아니기 때문입니다. 게시된 예측 파이프라인이 SMOTE 구성 요소를 포함하는 경우 오류가 발생할 수 있습니다.
SMOTE를 적용하기 전에 누락된 값을 정리하거나 다른 변환을 적용하여 데이터를 수정하면 더 나은 결과를 얻는 경우가 많습니다.
일부 연구자들은 SMOTE가 텍스트 분류 또는 유전체학 데이터 세트에 사용되는 데이터와 같은 고차원 또는 스파스 데이터에 효과적인지 조사했습니다. 이 문서에서는 고차원 클래스 불균형 데이터에 대한 Blagus 및 Lusa: SMOTE와 같은 경우 SMOTE 적용의 효과 및 이론적 유효성에 대한 좋은 요약을 제공합니다.
SMOTE가 데이터 세트에서 효과적이지 않은 경우 고려할 수 있는 다른 방법은 다음과 같습니다.
- 소수 사례를 과도하게 샘플링하거나 대부분의 사례를 과소 샘플링하는 방법입니다.
- 클러스터링, 모음 만들기 또는 적응형 부스트를 사용하여 학습자를 직접적으로 도와주는 앙상블 기법
다음 단계
Azure Machine Learning에서 사용 가능한 구성 요소 집합을 참조하세요.