k- 최근 접 이웃 분류기에 적합해야하는 이유는 무엇입니까?


11

내가 이해했듯이 k-NN은 게으른 학습자 알고리즘이며 훈련 단계가 필요하지 않습니다. 그렇다면 왜 .fit()sklearn과 함께 사용해야합니까? 그리고 그것을 사용할 때 어떤 일이 발생합니까?

답변:


9

개념적 수준에서

분류기를 피팅한다는 것은 데이터 세트를 입력으로 취한 다음 가능한 분류기의 공간에서 선택된 분류기를 출력하는 것을 의미합니다. 대부분의 경우 분류기는 일련의 매개 변수로 식별됩니다. 즉, 다른 가능한 분류기와 구별됩니다. 파라미터는 일반적으로 최적화 문제 또는 다른 수치 절차를 해결하여 선택합니다. 그러나 knn의 경우 분류기는 훈련 데이터 자체에 의해 식별됩니다. 따라서 추상 수준에서 knn 분류기를 맞추려면 단순히 훈련 세트를 저장하면됩니다.

구현 수준에서

새로운 데이터 포인트에서 knn 분류기를 평가하려면 훈련 세트에서 가장 가까운 이웃을 검색해야합니다. 이는 훈련 세트가 클 때 비용이 많이 드는 작업 일 수 있습니다. RUser가 언급했듯이, 검색 속도를 높이기위한 다양한 트릭이 있으며, 일반적으로 훈련 세트를 기반으로 다양한 데이터 구조를 작성하여 작동합니다. 일반적으로 새로운 점을 분류하는 데 필요한 일부 계산 작업은 실제로 점에서 공통적입니다. 따라서이 작업은 새로운 인스턴스마다 반복되는 것이 아니라 미리 수행 한 다음 재사용 할 수 있습니다. 이러한 트릭을 사용하는 knn 구현은 훈련 단계 에서이 작업을 수행합니다. 예를 들어, scikit-learn은 fit()함수 호출 중에 kd-tree 또는 ball tree를 생성 할 수 있습니다 .

와 거리 측정법 선택케이

이웃 및 거리 메트릭은 knn 분류기의 하이퍼 파라미터이다. 일반적으로 문제에 맞게 선택하여 성능을 향상시킬 수 있습니다. 그러나 최적의 설정은 일반적으로 미리 알려져 있지 않으므로 교육 절차 중에 해당 설정을 검색해야합니다. 이 검색은 최적화 문제를 해결하는 데 도움이되며 다른 방법의 하이퍼 파라미터 튜닝과 유사합니다.케이


11

게으른 방식으로 구현할 수 있으며 언어를 발견 할 때 적절한 운동을합니다. (예를 들어 내 블로그 게시물 중 하나 참조 ). 그러나 예측을 위해 데이터를 색인화 할 수도 있습니다 (훨씬 빠름).

피처 공간의 차원이 1 인 경우이 피처에 따라 점을 정렬하면 인접 항목을 훨씬 빨리 찾을 수 있습니다 (예 : 이분법 검색 사용). 더 큰 차원에서는 정렬에 대한 일반적인 일반화가 없지만 quadtrees를 사용하여 점을 색인 할 수 있습니다 .

소스를 살펴보면 scikit learn에서 다양한 메소드가 구현되었음을 알 수 있습니다. 그리고 가장 가까운 이웃 쿼리를 계속 개선하는 연구있습니다 .


5

다른 응답자가 만든 점은 확실히 유효하고 흥미 롭지 만 엄격하게 소프트웨어 엔지니어링 관점에서 한 가지 더 지적하고 싶습니다.

API와 일관성을 유지하려면

sklearn의 Estimator는 무엇보다도 fit하나 또는 두 개의 배열과 같은 방법 (감독 / 비 감독 추정기인지에 따라 다름)과 여러 구현 별 세부 정보 ( Source )를 가져야합니다 .

따라서 knn의 fit방법이 절대로 아무 것도 수행하지 않더라도 knn은 추정자이자 sklearn의 개발자이며 기여하는 코드는 추정자가 fit메소드 를 가지기를 기대하기 때문에 여전히 존재합니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.