패턴 인식에서 **-최근접 이웃 알고리즘**(또는 줄여서 **-NN**)은 분류나 회귀에 사용되는 비모수 방식이다.
두 경우 모두 입력이 특징 공간 내 k개의 가장 가까운 훈련 데이터로 구성되어 있다. 출력은 -NN이 분류로 사용되었는지 또는 회귀로 사용되었는지에 따라 다르다.


분류와 회귀 모두 더 가까운 이웃일수록 더 먼 이웃보다 평균에 더 많이 기여하도록 이웃의 기여에 가중치를 주는 것이 유용할 수 있다. 예를 들어, 가장 흔한 가중치 스키마는 ''d''가 이웃까지의 거리일 때 각각의 이웃에게 1/''d''의 가중치를 주는 것이다.

이웃은 항목(-NN 분류의 경우)이나 객체 특성 값(-NN 회귀의 경우)이 알려진 객체의 집합으로부터 구해진다. 이것은 명시적인 훈련 과정이 필요하지는 않지만, 알고리즘을 위한 훈련 집합이라고 생각될 수 있다.

## 알고리즘
훈련 데이터는 각각이 항목 분류명을 갖는 다차원 특징 공간에서의 벡터이다. 알고리즘의 훈련 단계는 오직 훈련 표본의 특징 벡터와 항목 분류명을 저장하는 것이다.

분류 단계에서 는 사용자 정의 상수이고 분류명이 붙지 않은 벡터(질의 또는 검증점)는 개의 훈련 표본 사이에서 가장 빈번한 분류명을 할당함으로써 분류된다.

연속 변수에서 가장 흔하게 사용되는 거리 척도는 유클리드 거리이다. 문자 분류와 같은 이산 변수의 경우 **중첩 거리**(또는 해밍 거리)와 같은 다른 척도가 사용될 수 있다. 예를 들어 유전자 표현 미세 배열 데이터의 경우, -NN은 피어슨과 스피어만 같은 상관 계수를 사용해 왔다. 종종 거리 척도가 큰 여백 최근접 이웃이나 이웃 성분 분석과 같은 특별한 알고리즘으로 학습된다면 -NN의 분류의 정확성을 상당히 향상시킬 수 있다.

“과반수 의결”에 따른 분류의 단점은 항목 분포가 편향될 때 나타난다. 다시 말해서, 더 빈번한 항목의 데이터가 새로운 데이터의 예측을 지배하는 경향이 있다. 왜냐하면, 더 빈번한 항목의 데이터가 다수를 이루어서 k개의 최근접 이웃의 대부분이 되는 경향이 있기 때문이다.개의 최근접 이웃 각각의 거리를 고려하여 분류에 가중치를 주는 것이다. 각각 개의 최근접 점의 항목(회귀 문제의 경우 값)에 그 점에서 검증점까지의 거리에 반비례하는 가중치를 곱한다. 편향을 해결하는 또 다른 방법은 데이터 표현을 추상화하는 것이다. 예를 들어 자기 조직화 지도(SOM)에서 각 노드는 원래의 훈련 데이터 밀도와 상관없이 유사점의 군집 대표(중심)이다. -NN은 SOM에도 적용될 수 있다.

## 매개변수 선택
최선의 값을 선택하는 것은 데이터에 의존적이다. 일반적으로 값이 커질수록 분류에서 잡음의 영향이 줄어들지만 항목 간 경계가 불분명해진다. 좋은 는 다양한 발견적 기법으로 선택될 수 있다(초월매개변수 최적화 참고). 어떤 항목이 가장 가까운 훈련 표본의 항목으로 예측되는 특별한 경우를 최근접 이웃 알고리즘이라고 부른다.

이진(2개 항목) 분류 문제에서는 동률의 투표를 피하기 위해 홀수인 를 선택하는 것이 바람직하다. 이런 환경에서 최적의 를 경험적으로 선택하는 유명한 한 가지 방법은 부트스트랩 방식이다.-NN 계산이 가능하도록 할 수 있다. 많은 최근접 이웃 탐색 알고리즘들은 일반적으로 실제로 수행되는 거리 계산 횟수를 줄이는 방법을 찾는 방식으로 제안되어 왔다.

## 거리 척도 학습
(지도) 거리 척도 학습을 활용하면 종종 k-최근접 이웃 분류의 성능을 상당히 개선할 수 있다. 유명한 알고리즘으로는 이웃 성분 분석과 큰 여백 근접 이웃이 있다. 지도 거리 척도 학습 알고리즘은 새로운 거리 또는 유사 거리를 학습하기 위해 분류명 정보를 사용한다.

## 특징 추출
알고리즘의 입력 데이터가 처리하기에 매우 크고 심각하게 불필요한 중복이 있다고 의심이 된다면(예를 들면 동일한 측정값이 피트와 미터 단위로 존재하는 경우), 입력 데이터를 특징들의 축소된 표현 집합(또는 특징 벡터)으로 변환할 수 있다. 입력 데이터를 특징들의 집합으로 변환하는 과정을 특징 추출이라고 한다. 만약 추출된 특징들이 세심하게 선택되었다면, 특징 집합이 전체 입력 데이터를 사용하지 않고 축소된 표현값만을 사용해 원하는 작업을 수행하도록 입력 데이터에서 적절하게 관련 있는 정보를 추출했음을 기대할 수 있다. 특징 추출은 특징 공간으로 변환된 데이터에 -NN 알고리즘을 적용하기 전에 미가공 데이터에 수행된다.

특징 추출과 차원 축소 전처리 과정을 포함해 -NN으로 구현된 대표적인 컴퓨터 비전 계산 파이프라인 안면 인식 예시(대부분 OpenCV로 구현됨):

## 차원 축소
고차원의 데이터(예를 들어 10차원을 넘는 경우)에 대해선 차원의 저주를 피하기 위해 보통 -NN 알고리즘을 사용하기 전에 차원 축소를 수행한다.

특징 추출과 차원 축소는 주성분 분석(PCA), 선형 판별 분석(LDA), 또는 정준 상관 분석(CCA) 기술을 전처리 과정으로 사용하면 한 과정으로 합칠 수 있다. 그 후 -NN을 사용해 축소된 차원 공간에서 군집화를 할 수 있다. 기계 학습에서 이 과정을 저차원 매장이라 부른다.

초고차원의 데이터 집합에 대해선 지역 민감 해싱, "무작위 투영", 또는 VLDB 툴박스의 다른 고차원 유사도 탐색 기법들을 사용한 빠른 **근사** -NN 탐색을 수행하는 것이 유일하게 실행 가능한 방법일 수 있다.

## 결정 경계
실제로 최근접 이웃 규칙은 잠재적으로 결정 경계를 계산한다. 결정 경계는 명시적이고 효율적으로 계산될 수 있고, 계산 복잡도가 경계 복잡도의 함수가 되도록 할 수 있다.

## 데이터 축소
**데이터 축소**는 대량의 데이터 집합을 다룰 때 가장 중요한 문제 중 하나이다. 보통 정확한 분류를 위해선 데이터 점의 일부만 필요하다. 그 데이터를 ''프로토타입''이라 하고 다음과 같은 방법으로 찾을 수 있다:

### 항목 이상치 선택
다른 항목의 데이터로 둘러싸여 있는 훈련 데이터를 **항목 이상치**라 한다. 항목 이상치가 발견되는 이유는 다음과 같다:

### 데이터 축소를 위한 CNN
**압축된 근접 이웃**은 -NN 분류를 위해 데이터 집합을 축소하려는 목적으로 설계된 알고리즘이다. 이 알고리즘은 훈련 데이터로부터 프로토타입의 집합 ''U''를 선택하고, 이를 통해 1NN이 모든 데이터 집합을 분류하는 것만큼 정확하게 ''U''와 1NN이 데이터들을 분류할 수 있다.

주어진 훈련 집합 ''X''에 CNN을 반복적으로 수행한다.

분류하기 위해 ''X'' 대신에 ''U''를 사용한다. 프로토타입이 아닌 데이터들은 "흡수된" 점이라고 한다.

경계율을 줄이기 위해서는 학습 데이터들을 탐색하는 것이 효율적이다. 학습 데이터 ''x''의 경계 비율은 아래와 같다.

경계율은 [0,1] 구간 내의 값인데, 왜냐하면 '' x' '' - ''y'' }}는 ''x'' - ''y'' }}를 절대 초과하지 않기 때문이다. 이 순서는 프로토타입의 집합인 ''U''로의 포함을 위한 우선권을 항목들의 경계에 준다. ''x''와 다른 분류명을 가지는 점은 ''x'' 외부에 있다고 한다. 경계율의 계산은 오른쪽에 도식으로 나타나 있다. 점 데이터들은 색으로 분류명이 붙여졌는데, 초기의 점은 ''x''이고 분류명은 빨간색이다. 외부의 점들은 파란색과 초록색이다. ''x''의 외부 점들 중 가장 가까운 점은 ''y''이다. ''y''에 가장 가까운 빨간 점은 ''x' ''이다. 경계율 '' x' '' - ''y'' / ''x'' - ''y'' }}은 초기의 점 ''x''의 속성이다.

아래 도식은 CNN의 과정을 보여준다. 3개의 항목이 있다. 그림 1: 초기에, 각 항목별로 60개의 점이 존재한다. 그림 2: 1NN 분류 지도를 보여주는데, 각각의 픽셀은 모든 데이터를 사용하여 1NN에 의해 분류된다. 그림 3: 5NN 분류 지도를 보여준다. 하얀 구역은 5NN 투표에서 결과가 동률이 나와 분류되지 않은 지역에 대응된다. 그림 4: 축소된 데이터 집합을 보여준다. X 표시는 NN 규칙에 의해 선택된 항목 이상치들을 나타낸다(이 인스턴스들의 모든 세 최근접 이웃들이 다른 항목에 속한다). 사각형은 프로토타입을 나타내며, 빈 원은 흡수된 점을 나타낸다. 좌하측 모서리는 항목 이상치, 프로토타입, 흡수된 점들의 개수를 나타낸다. 이 예시에서는 프로토타입의 수가 항목에 따라 15%에서 20%까지로 다양하다. 그림 5: 프로토타입에 기초한 1NN 분류 지도를 나타낸 것인데, 초기 데이터 집합에 기반한 1NN 분류 지도와 매우 비슷함을 알 수 있다. 이 그림들은 Mirkes 애플릿을 사용하여 만들었다.

## -NN 회귀
**-NN 회귀**에서, -NN 알고리즘은 연속 변수를 예측하기 위해서 사용된다. 하나의 알고리즘은 개의 최근접 이웃들의 거리의 역수를 가중치로 한 가중 평균을 사용한다. 이 알고리즘은 다음과 같이 동작한다.

## 결과의 타당성 검증
혼동 행렬 또는 일치 행렬은 -NN 분류의 정확성을 검증하기 위한 도구로 자주 사용된다. 우도비 검정 같은 더 강한 통계적 방법을 적용할 수도 있다.