K-최근접이웃이란? 데이터를 분류하는 ML 알고리즘
게시 됨: 2021-07-19알고리즘은 기계 학습 세계를 주도합니다.
그들은 종종 예측 능력에 대해 칭찬을 받고 즉각적인 결과를 생성하기 위해 엄청난 양의 데이터를 소비하는 열심히 일하는 사람으로 일컬어집니다.
그 중에는 종종 게으른 것으로 분류되는 알고리즘이 있습니다. 그러나 데이터 포인트를 분류하는 데 있어서는 상당한 성능을 발휘합니다. k-최근접이웃 알고리즘이라고 하며 종종 가장 중요한 알고리즘 중 하나로 인용됩니다. 기계 학습 알고리즘.
k-최근접이웃 알고리즘이란?
k-최근접이웃(KNN) 알고리즘 은 가장 가까운 데이터 포인트가 속한 그룹을 기반으로 데이터 포인트가 한 그룹 또는 다른 그룹의 구성원이 될 가능성을 추정하기 위한 데이터 분류 방법입니다.
k-최근접 이웃 알고리즘은 지도 머신 러닝 분류 및 회귀 문제를 해결하는 데 사용되는 알고리즘입니다. 그러나 주로 분류 문제에 사용됩니다.
KNN은 지연 학습 및 비모수 알고리즘입니다.
학습 데이터를 제공할 때 학습을 수행하지 않기 때문에 게으른 학습 알고리즘 또는 게으른 학습자라고 합니다. 대신 훈련 시간 동안 데이터를 저장하고 계산을 수행하지 않습니다. 데이터 세트에서 쿼리가 수행될 때까지 모델을 빌드하지 않습니다. 이것은 KNN을 다음과 같이 이상적입니다. 데이터 수집.
알고 계셨나요? KNN의 "K"는 투표 프로세스에 포함할 최근접 이웃의 수를 결정하는 매개변수입니다.
기본 데이터 분포에 대해 가정하지 않기 때문에 비모수적 방법으로 간주됩니다. 간단히 말해서, KNN은 주변의 데이터 포인트를 보고 데이터 포인트가 속한 그룹을 결정하려고 합니다.
A와 B라는 두 그룹이 있다고 가정합니다.
데이터 포인트가 그룹 A에 있는지 그룹 B에 있는지 확인하기 위해 알고리즘은 근처에 있는 데이터 포인트의 상태를 확인합니다. 대부분의 데이터 요소가 그룹 A에 있는 경우 문제의 데이터 요소가 그룹 A에 있을 가능성이 매우 높으며 그 반대의 경우도 마찬가지입니다.
간단히 말해서, KNN은 가장 가까운 이웃 이라고도 하는 가장 가까운 주석이 달린 데이터 포인트를 살펴봄으로써 데이터 포인트를 분류하는 것을 포함합니다.
K-NN 분류를 K-평균 클러스터링과 혼동하지 마십시오. KNN은 가장 가까운 데이터 포인트를 기반으로 새로운 데이터 포인트를 분류하는 지도 분류 알고리즘입니다. 반면에 K-means 클러스터링은 감독되지 않은 데이터를 K개의 클러스터로 그룹화하는 클러스터링 알고리즘.
KNN은 어떻게 작동합니까?
위에서 언급했듯이 KNN 알고리즘은 주로 분류기로 사용됩니다. KNN이 보이지 않는 입력 데이터 포인트를 분류하기 위해 어떻게 작동하는지 살펴보겠습니다.
인공 신경망을 사용한 분류와 달리 k-최근접 이웃 분류는 이해하기 쉽고 구현하기 쉽습니다. 데이터 포인트가 잘 정의되거나 비선형인 상황에 이상적입니다.
본질적으로 KNN은 보이지 않는 관찰의 클래스를 결정하기 위해 투표 메커니즘을 수행합니다. 이는 다수결을 받은 클래스가 해당 데이터 포인트의 클래스가 됨을 의미합니다.
K 값이 1과 같으면 가장 가까운 이웃만 사용하여 데이터 포인트의 클래스를 결정합니다. K 값이 10과 같으면 10개의 가장 가까운 이웃을 사용하는 식입니다.
팁: 기계 학습 소프트웨어를 사용하여 작업을 자동화하고 데이터 기반 의사 결정을 내리십시오.
이를 관점에서 보기 위해 분류되지 않은 데이터 요소 X를 고려합니다. 산점도에는 알려진 범주 A와 B가 있는 여러 데이터 요소가 있습니다.
데이터 점 X가 그룹 A 근처에 있다고 가정합니다.
아시다시피, 우리는 가장 가까운 주석 포인트를 보고 데이터 포인트를 분류합니다. K 값이 1과 같으면 가장 가까운 이웃을 하나만 사용하여 데이터 포인트 그룹을 결정합니다.
이 경우 데이터 포인트 X는 가장 가까운 이웃이 동일한 그룹에 있으므로 그룹 A에 속합니다. 그룹 A에 10개 이상의 데이터 포인트가 있고 K 값이 10인 경우 데이터 포인트 X는 모든 가장 가까운 이웃이 동일한 그룹에 있으므로 여전히 그룹 A에 속합니다.
분류되지 않은 또 다른 데이터 포인트 Y가 그룹 A와 그룹 B 사이에 있다고 가정합니다. K가 10과 같으면 가장 많은 표를 얻은 그룹을 선택합니다. 즉, Y를 가장 많은 수의 이웃이 있는 그룹으로 분류합니다. 예를 들어 Y에 그룹 B에 7개의 이웃이 있고 그룹 A에 3개의 이웃이 있는 경우 그룹 B에 속합니다.
분류기가 가장 많은 투표 수를 가진 범주를 할당한다는 사실은 존재하는 범주의 수에 관계없이 참입니다.
데이터 포인트가 이웃인지 여부를 결정하기 위해 거리 메트릭이 어떻게 계산되는지 궁금할 수 있습니다.
데이터 포인트와 가장 가까운 이웃 간의 거리 측정값을 계산하는 방법에는 유클리드 거리 , 맨해튼 거리 , 해밍 거리 , 민코프스키 거리 의 네 가지가 있습니다. 세 가지 중 유클리드 거리는 가장 일반적으로 사용되는 거리 함수 또는 미터법입니다.
K-최근접이웃 알고리즘 의사코드
Python 및 R과 같은 프로그래밍 언어는 KNN 알고리즘을 구현하는 데 사용됩니다. 다음은 KNN의 의사 코드입니다.
- 데이터 로드
- K 값 선택
- 데이터의 각 데이터 포인트에 대해:
- 모든 훈련 데이터 샘플에 대한 유클리드 거리 찾기
- 거리를 정렬된 목록에 저장하고 정렬
- 정렬된 목록에서 상위 K개 항목 선택
- 선택한 포인트에 있는 대부분의 클래스를 기반으로 테스트 포인트에 레이블 지정
- 끝
KNN 분류의 정확성을 검증하기 위해, 혼동 행렬 사용. 우도비 테스트와 같은 다른 통계적 방법도 검증에 사용됩니다.
KNN 회귀의 경우 대부분의 단계가 동일합니다. 가장 높은 표를 가진 클래스를 할당하는 대신 이웃 값의 평균을 계산하여 알 수 없는 데이터 포인트에 할당합니다.
KNN 알고리즘을 사용하는 이유는 무엇입니까?
분류는 데이터 과학 및 기계 학습에서 중요한 문제입니다. KNN은 패턴 분류 및 회귀 모델에 사용되는 가장 오래되었지만 정확한 알고리즘 중 하나입니다.
다음은 k-최근접 이웃 알고리즘을 사용할 수 있는 몇 가지 영역입니다.

- 신용 등급: KNN 알고리즘은 유사한 특성을 가진 사람과 비교하여 개인의 신용 등급을 결정하는 데 도움이 됩니다.
- 대출 승인: 신용 등급과 유사하게 k-최근접 이웃 알고리즘은 유사한 개인과 특성을 비교하여 대출 불이행 가능성이 더 높은 개인을 식별하는 데 유용합니다.
- 데이터 전처리: 데이터 세트에는 많은 결측값이 있을 수 있습니다. KNN 알고리즘은 결측값을 추정하는 결측 데이터 대치 라는 프로세스에 사용됩니다.
- 패턴 인식: 패턴 을 식별하는 KNN 알고리즘의 기능은 광범위한 응용 프로그램을 생성합니다. 예를 들어 신용 카드 사용 패턴을 감지하고 비정상적인 패턴을 찾아내는 데 도움이 됩니다. 패턴 감지는 고객 구매 행동의 패턴을 식별하는 데에도 유용합니다.
- 주가 예측: KNN 알고리즘은 알려지지 않은 개체의 가치를 예측하는 재능이 있기 때문에 과거 데이터를 기반으로 주식의 미래 가치를 예측하는 데 유용합니다.
- 추천 시스템: KNN은 유사한 특성을 가진 사용자를 찾는 데 도움이 되므로 추천 시스템에서 사용할 수 있습니다. 예를 들어 온라인 비디오 스트리밍 플랫폼에서 유사한 사용자가 시청하는 내용을 분석하여 사용자가 시청할 가능성이 더 높은 콘텐츠를 제안하는 데 사용할 수 있습니다.
- 컴퓨터 비전: KNN 알고리즘은 이미지 분류에 사용됩니다. 예를 들어 고양이와 개를 다른 클래스로 그룹화하는 것과 같이 유사한 데이터 포인트를 그룹화할 수 있으므로 여러 분야에서 유용합니다. 컴퓨터 시각 인식 응용 프로그램.
K의 최적 값을 선택하는 방법
최상의 K 값, 즉 KNN의 이웃 수를 결정하는 특정 방법은 없습니다. 즉, 앞으로 진행할 값을 결정하기 전에 몇 가지 값을 실험해야 할 수도 있습니다.
이를 수행하는 한 가지 방법은 훈련 샘플의 일부가 "알 수 없는" 것으로 간주(또는 가장)하는 것입니다. 그런 다음 k-최근접이웃 알고리즘을 사용하여 테스트 세트의 미지의 데이터를 분류하고 훈련 데이터에 이미 있는 정보와 비교하여 새로운 분류가 얼마나 좋은지 분석할 수 있습니다.
2-클래스 문제를 처리할 때 K에 대해 홀수 값을 선택하는 것이 좋습니다. 그렇지 않으면 각 클래스의 이웃 수가 동일한 시나리오가 발생할 수 있습니다. 또한 K 값은 존재하는 클래스 수의 배수가 아니어야 합니다.
K의 최적 값을 선택하는 또 다른 방법은 sqrt(N)를 계산하는 것입니다. 여기서 N은 훈련 데이터 세트의 샘플 수를 나타냅니다.
그러나 K=1 또는 K=2와 같이 값이 더 낮은 K는 노이즈가 발생할 수 있고 이상값의 영향을 받을 수 있습니다. 이러한 경우 과적합 가능성도 높습니다.
반면에 K 값이 클수록 대부분의 경우 더 부드러운 결정 경계가 생성되지만 너무 커서는 안 됩니다. 그렇지 않으면 더 적은 수의 데이터 포인트를 가진 그룹이 항상 다른 그룹에 의해 압도됩니다. 또한 K가 클수록 계산 비용이 많이 듭니다.
KNN의 장점과 단점
KNN 알고리즘을 사용하는 가장 중요한 이점 중 하나는 모델을 구축하거나 여러 매개변수를 조정할 필요가 없다는 것입니다. 열망하는 학습자가 아닌 게으른 학습 알고리즘이므로 모델을 훈련할 필요가 없습니다. 대신 모든 데이터 포인트는 예측 시 사용됩니다.
물론 계산 비용과 시간이 많이 듭니다. 그러나 필요한 계산 리소스가 있다면 회귀 및 분류 문제를 해결하기 위해 KNN을 사용할 수 있습니다. 그러나 정확한 예측을 생성할 수 있는 몇 가지 더 빠른 알고리즘이 있습니다.
다음은 k-최근접 이웃 알고리즘을 사용하는 몇 가지 이점 입니다.
- 이해하기 쉽고 구현하기 쉽습니다.
- 분류 및 회귀 문제 모두에 사용할 수 있습니다.
- 기본 데이터에 대한 가정이 없기 때문에 비선형 데이터에 이상적입니다.
- 멀티 클래스 케이스를 자연스럽게 처리할 수 있습니다.
- 충분한 대표 데이터로 잘 수행할 수 있습니다.
물론 KNN이 완벽한 기계 학습 알고리즘은 아닙니다. KNN 예측기는 처음부터 모든 것을 계산하므로 대규모 데이터 세트에는 적합하지 않을 수 있습니다.
다음은 k-최근접이웃 알고리즘을 사용할 때의 몇 가지 단점 입니다.
- 모든 훈련 데이터를 저장하기 때문에 관련 계산 비용이 높습니다.
- 높은 메모리 스토리지 필요
- K 값을 결정해야 합니다.
- N 값이 높으면 예측이 느림
- 관련 없는 기능에 민감
KNN과 차원의 저주
방대한 양의 데이터가 있는 경우 해당 데이터에서 빠르고 직접적인 정보를 추출하는 것은 상당히 어려울 수 있습니다. 이를 위해 본질적으로 데이터가 "요점에 직접 도달"하도록 하는 차원 축소 알고리즘을 사용할 수 있습니다.
"차원의 저주"라는 용어는 SF 영화에서 튀어나온 듯한 인상을 줄 수 있습니다. 그러나 이것이 의미하는 바는 데이터에 너무 많은 기능이 있다는 것입니다.
데이터에 기능이 너무 많으면 모델을 과적합하여 모델이 부정확해질 위험이 높습니다. 차원이 너무 많으면 데이터세트의 모든 데이터 샘플이 서로 등거리로 나타나므로 데이터를 그룹화하기가 더 어려워집니다.
k-최근접 이웃 알고리즘은 차원의 저주로 인해 과적합에 매우 취약합니다. 그러나 이 문제는 다음을 통해 해결할 수 있습니다. 무차별 대입 구현 KNN 알고리즘의 그러나 대규모 데이터 세트에는 실용적이지 않습니다.
기능이 너무 많으면 KNN이 잘 작동하지 않습니다. 따라서 PCA(주성분 분석) 및 기능 선택 과 같은 차원 축소 기술을 데이터 준비 단계에서 수행해야 합니다.
KNN: 마음을 사로잡은 게으른 알고리즘
알고리즘 중에서 가장 게으른 알고리즘임에도 불구하고 KNN은 인상적인 평판을 얻었으며 여러 분류 및 회귀 문제에 대한 알고리즘입니다. 물론 게으름으로 인해 대규모 데이터 세트와 관련된 경우에는 최선의 선택이 아닐 수 있습니다. 그러나 이것은 가장 오래되고 간단하며 정확한 알고리즘 중 하나입니다.
제한된 양의 데이터로 알고리즘을 훈련하고 검증하는 것은 엄청난 작업이 될 수 있습니다. 하지만 효율적으로 할 수 있는 방법이 있습니다. 이를 교차 검증이라고 하며 훈련 데이터의 일부를 테스트 데이터 세트로 예약하는 것을 포함합니다.
