티스토리 뷰

KNN 알고리즘

KNN 개념

k-nearest neighbors의 줄임말인 KNN은 데이터 과학 및 기계 학습에서 분류 및 회귀 작업 모두에 널리 사용되는 알고리즘으로 입력된 데이터 포인트 간의 유사성을 기반으로 예측을 수행하는 비모수적 방법입니다. KNN에서 "k"는 예측을 할 때 고려되는 가장 가까운 이웃의 수를 나타냅니다. 새로운 라벨이 부착되지 않은 데이터 포인트가 주어지면 알고리즘은 선택된 거리 메트릭(유클리드 거리 등)에 기초하여 학습 세트에서 가장 가까운 라벨이 부착된 k개의 데이터 포인트를 찾습니다. 그런 다음 새로운 데이터 포인트의 예측 클래스 또는 값은 k개의 가장 가까운 이웃 간의 다수결(분류를 위한) 또는 평균(회귀를 위한)에 의해 결정됩니다. KNN의 주요 가정은 특징 공간에서 서로 가까운 데이터 포인트들이 유사한 특성을 갖는 경향이 있다는 것입니다. 알고리즘은 가장 가까운 이웃을 사용함으로써 이 가정을 활용하여 예측을 수행합니다. 그러나 KNN은 명시적인 훈련 과정을 포함하지 않으며 대신 전체 훈련 데이터 세트와 예측 시점의 계산 거리를 저장하는 것에 의존합니다. KNN은 비교적 이해와 구현이 간단하지만 성능은 k와 거리 메트릭의 선택에 영향을 받을 수 있습니다. 또한 기능의 크기에 민감하기 때문에 기능 스케일링이 필요한 경우가 많습니다. KNN은 단순함에도 불구하고 적절하게 사용될 때 강력한 알고리즘이 될 수 있으며 많은 실제 응용 분야에서 효과적일 수 있습니다.

 

KNN 알고리즘 적용 방법

먼저 데이터를 로드합니다. 선택한 이웃 개수로 K 초기화합니다. 그리고 데이터의 각 예제에 대해 데이터로부터 쿼리 예제와 현재 예제 사이의 거리를 계산합니다. 예제의 거리와 인덱스를 순서대로 수집한 것에 추가합니다. 거리를 기준으로 거리와 인덱스의 순서대로 가장 작은 것부터 가장 큰 것까지 정렬합니다. 정렬된 컬렉션에서 처음 K개 항목 선택합니다. 선택한 K개 항목의 레이블을 가져옵니다. 그리고 회귀 분석인 경우 K 레이블의 평균을 반환합니다. 분류인 경우 K 라벨의 모드를 반환합니다.

 

알고리즘 비교를 통한 이해

기계학습 분야에서 사용되는 분류 알고리즘은 SVM(Support Vector Machine), ANN(Artificial Neural Network), KNN(K-Nearest Neighbors) 등이 있습니다. SVM은 특징 공간에서 클래스 간 최적의 경계를 찾는 선형 분류기로 이진 분류 문제에 자주 사용되며 분리 마진이 분명한 소규모 데이터셋과 고차원 데이터셋에 잘 작동합니다. ANN은 뇌의 구조와 기능을 본떠서 만든 딥러닝 알고리즘의 한 종류입니다. 이미지 인식, 자연어 처리 및 많은 양의 비정형 데이터를 포함하는 기타 작업에 자주 사용됩니다. ANN은 일반적으로 SVM 및 KNN보다 계산 비용이 더 많이 들지만 입력과 출력 사이의 복잡한 관계를 처리할 수 있습니다. KNN은 사용 가능한 모든 사례를 저장하고 k개의 가장 가까운 이웃의 과반수 투표로 새로운 사례를 분류하는 비모수적 인스턴스 기반 방법입니다. KNN은 분류 문제에 자주 사용되고 구현이 간단하지만 거리 메트릭의 선택과 예측에 사용된 이웃의 수에 따라 성능이 영향을 받을 수 있습니다. 성능 측면에서 ANN은 복잡한 문제에서 SVM과 KNN을 능가할 수 있지만 더 많은 계산 자원을 필요로 하며 훈련이 더 어려울 수 있습니다. SVM은 ANN보다 빠르고 훈련이 용이할 수 있지만 복잡한 문제에서 잘 수행되지 않을 수 있습니다. KNN은 비교적 간단하고 빠르지만 거리 메트릭의 선택과 예측에 사용된 이웃의 수에 따라 정확도가 제한될 수 있습니다. 알고리즘의 선택은 문제의 특정 요구 사항이나 계산 시간, 데이터 크기와 같은 가용 자원에 따라 달라질 것입니다. SVM, ANN 및 KNN의 성능을 비교하기 위한 간단한 예를 생각해 보겠습니다. 과일의 이미지를 사과나 바나나로 분류하는 기계 학습 모델을 만들고 싶다고 생각해 보겠습니다. SVM을 사용하면 이미지에서 색상, 모양 등의 특징을 추출한 다음 이 특징을 사용하여 두 클래스 간의 최적 경계를 찾을 수 있습니다. 특징 공간에서 사과와 바나나의 특징이 잘 분리되어 있고 명확한 경계를 찾을 수 있기 때문에 SVM은 이 작업을 잘 수행할 수 있습니다. ANN을 사용하면 네트워크에 이미지를 공급하고 여러 은닉 계층을 통해 데이터의 패턴을 인식하는 방법을 배울 수 있습니다. ANN은 입력(이미지)과 출력(클래스) 사이의 복잡한 관계를 처리할 수 있기 때문에 이 작업을 잘 수행할 수 있습니다. KNN을 사용하면 모든 훈련 이미지와 해당 레이블을 저장할 수 있습니다. 새로운 이미지를 분류하기 위해 일부 거리 메트릭(예: 유클리드 거리)을 기반으로 훈련 세트에서 k개의 가장 가까운 이미지를 찾고 k개의 가장 가까운 이웃의 대다수 클래스를 기반으로 새로운 이미지를 분류할 수 있습니다. KNN은 구현이 간단하고 클래스 간의 비선형 경계를 처리할 수 있기 때문에 이 작업을 잘 수행할 수 있습니다. 이 예에서 ANN과 SVM의 성능은 비슷하지만 KNN의 성능은 약간 떨어지지만 좋은 결과를 얻을 수 있습니다.