

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# K-Nearest Neighbors(k-NN) 알고리즘
<a name="k-nearest-neighbors"></a>

Amazon SageMaker AI k-Nearest Neighbors(k-NN) 알고리즘은 인덱스 기반 알고리즘입니다. 이 알고리즘은 분류 또는 회귀에 비모수적 방법을 사용합니다. 분류 문제의 경우 이 알고리즘은 샘플 지점과 가장 가까운 *k* 지점을 쿼리하여 가장 자주 사용하는 클래스 레이블을 예측 레이블로 반환합니다. 회귀 문제의 경우 이 알고리즘은 샘플 지점과 가장 가까운 *k* 지점을 쿼리해 특징 값의 평균을 예측 값으로 반환합니다.

k-NN 알고리즘을 사용한 훈련에는 샘플링, 차원 감소 및 인덱스 빌드, 이렇게 3가지 단계가 있습니다. 샘플링은 메모리에 맞도록 최초 데이터세트의 크기를 줄입니다. 차원 감소를 위해 이 알고리즘은 데이터의 특징 차원을 줄여 메모리 내에서 k-NN 모델이 차지하는 공간을 줄이고 추론 지연 시간을 단축합니다. 차원 감소 메서드로 Random Projection과 빠른 Johnson-Lindenstrauss 변환 두 가지를 제공합니다. 일반적으로, 차원의 증가에 따라 밀도가 떨어지는 데이터의 통계적 분석 문제를 일으키는 "차원의 저주"(curse of dimensionality)를 피하기 위해 고차원(d >1000) 데이터세트에 대해 차원 감소를 사용합니다. k-NN의 주요 훈련 목표는 인덱스를 생성하는 것입니다. 인덱스를 사용하면 값 또는 클래스 레이블이 아직 확인되지 않은 지점과 추론에 사용할 k nearest 지점 간에 거리를 효율적으로 조회할 수 있습니다.

**Topics**
+ [k-NN 알고리즘에 대한 입력/출력 인터페이스](#kNN-input_output)
+ [k-NN 샘플 노트북](#kNN-sample-notebooks)
+ [k-NN 알고리즘 작동 방법](kNN_how-it-works.md)
+ [k-NN 알고리즘에 대한 EC2 인스턴스 권장 사항](#kNN-instances)
+ [k-NN 하이퍼파라미터](kNN_hyperparameters.md)
+ [k-NN 모델 튜닝](kNN-tuning.md)
+ [k-NN 훈련 입력을 위한 데이터 형식](kNN-in-formats.md)
+ [k-NN 요청 및 응답 형식](kNN-inference-formats.md)

## k-NN 알고리즘에 대한 입력/출력 인터페이스
<a name="kNN-input_output"></a>

SageMaker AI k-NN은 훈련 및 테스트 데이터 채널을 지원합니다.
+ train 채널은 샘플링하거나 k-NN 인덱스로 생성하려는 데이터에 사용합니다.**
+ test 채널은 로그 파일에 점수를 내보냅니다.** 점수는 미니 배치당 행 하나로 나열되는데, `classifier`는 정확도, `regressor` 점수는 평균 제곱근 오차(mse)를 나타냅니다.

훈련 입력의 경우 k-NN은 `text/csv` 및 `application/x-recordio-protobuf` 데이터 형식을 지원합니다. 입력 유형 `text/csv`의 경우 첫 번째 `label_size` 열은 해당 행의 레이블 벡터로 해석됩니다. 파일 모드 또는 파이프 모드를 사용하여 `recordIO-wrapped-protobuf` 또는 `CSV`로 형식이 지정된 데이터에 대해 모델을 훈련할 수 있습니다.

추론 입력의 경우 k-NN은 `application/json`, `application/x-recordio-protobuf` 및 `text/csv` 데이터 형식을 지원합니다. `text/csv` 형식은 `label_size` 및 인코딩 파라미터를 수용하고, 0의 `label_size`와 UTF-8 인코딩을 가정합니다.

추론 출력의 경우 k-NN은 `application/json` 및 `application/x-recordio-protobuf` 데이터 형식을 지원합니다. 이러한 두 가지 데이터 형식 역시 verbose 출력 모드를 지원합니다. verbose 출력 모드에서 API는 가장 작은 항목에서 가장 큰 항목 순으로 정렬된 거리 벡터 및 레이블 벡터의 해당 요소와 함께 검색 결과를 제공합니다.

배치 변환의 경우 k-NN은 입력 및 출력 둘 다에 대해 `application/jsonlines` 데이터 형식을 지원합니다. 예제 입력은 다음과 같습니다.

```
content-type: application/jsonlines

{"features": [1.5, 16.0, 14.0, 23.0]}
{"data": {"features": {"values": [1.5, 16.0, 14.0, 23.0]}}
```

예제 출력은 다음과 같습니다.

```
accept: application/jsonlines

{"predicted_label": 0.0}
{"predicted_label": 2.0}
```

입력 및 출력 파일 형식에 대한 자세한 정보는 [k-NN 훈련 입력을 위한 데이터 형식](kNN-in-formats.md)(훈련의 경우), [k-NN 요청 및 응답 형식](kNN-inference-formats.md)(추론의 경우) 및 [k-NN 샘플 노트북](#kNN-sample-notebooks) 섹션을 참조하세요.

## k-NN 샘플 노트북
<a name="kNN-sample-notebooks"></a>

지질 및 삼림 서비스 데이터에서 황무지 초목 유형을 예측하기 위해 SageMaker AI K-Nearest Neighbor 알고리즘을 사용하는 샘플 노트북은 [K-Nearest Neighbor Covertype](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/k_nearest_neighbors_covtype/k_nearest_neighbors_covtype.html)을 참조하세요.

Jupyter Notebook 인스턴스를 사용하여 SageMaker AI에서 예시를 실행합니다. SageMaker AI에서 Jupyter Notebook 인스턴스를 만들어 여는 방법은 [Amazon SageMaker 노트북 인스턴스](nbi.md) 섹션을 참조하세요. 노트북 인스턴스를 만들어 열었으면 **SageMaker 예시** 탭을 선택하여 모든 SageMaker AI 예시 노트북의 목록을 확인합니다. **Introduction to Amazon algorithms(Amazon 알고리즘 소개)** 섹션에서 K-Nearest Neighbor 노트북을 찾으세요. 노트북을 열려면 **사용** 탭을 클릭하고 사본 생성을 선택합니다.

## k-NN 알고리즘에 대한 EC2 인스턴스 권장 사항
<a name="kNN-instances"></a>

CPU 인스턴스(예: ml.m5.2xlarge) 또는 GPU 인스턴스에서 훈련하는 것이 좋습니다. k-NN 알고리즘은 훈련 및 추론을 위해 P2, P3, G4dn, G5 GPU 인스턴스 패밀리를 지원합니다.

GPU 하드웨어를 사용하는 경우 GPU 간 통신에 대한 부담이 있기 때문에 CPU의 추론 요청은 일반적으로 GPU의 요청보다 평균 지연 시간이 낮습니다. 그러나 GPU는 일반적으로 큰 배치에 대해 처리량이 더 많습니다.