데이터, 그로스 마케팅 연구와 기록

[Scikit Learn] Neighbors 섹션으로 살펴본 NN알고리즘 본문

Data Analytics

[Scikit Learn] Neighbors 섹션으로 살펴본 NN알고리즘

공부하는소피 2022. 4. 16. 14:58

익숙한 k-Nearest Neighbor 최근접이웃법 외 어떠한 이웃법들이 있는지 알아보기 위해, scikit learn에서 제공하는 neighbors section 전체를 살펴보았다. 

참고: https://scikit-learn.org/stable/modules/neighbors.html#unsupervised-neighbors

1. sklearn.neighbors.KNeighborsClassifier 

우선, 아주 자주 사용하는 기능으로써 KNeighborsClassifier를 먼저 살펴보자면, KNN을 알고리즘을 활용한 Classification Prediction 과정에서 voting sysytem을 수행하여 구분을 해주는 기능이다.

 

기본적으로 지도학습으로서 NN 은,

1) classfication prediction을 해주거나 2) regression prediction을 수행해주는 알고리즘이다.

NN 알고리즘은 training set의 임의의 데이터와 가장 근접한 데이터를 인식하고, 이 근접한 데이터가 속한 class(근접 데이터에 label 또는 target으로 지정된 값)에 기반하여 임의의 데이터가 무엇인지 구분해준다.

 

이 과정에서 근접한 데이터가 한 개가 아닌 여러개(k개) 발생하게 되는데,

1) 만약 Classification prediction 이라면, 이 여러개의 근접 데이터의 Class(label)에 지정된 값 중 가장 많은 것(major)을 결과로 반환한다. 이것이 voting system이다. 다수결원칙과 같다. -kNiehgborsClassifier 는 이 기능을 수행해준다.

2) 만약 regression prediction이라면, target 값의 평균값을 예측값으로 반환한다. 

 

2. Supervised or Unsupervised NN

Nearest Neighbors는 사실 지도학습 방법도 있고, 비지도학습 방법도 있다. 이중 흔하게 사용하는 kNN은 지도학습법에 속한다. NN의 기본 개념은 사전에 지정된 training set 으로부터 가장 가까운 거리에 있는 데이터를 다른 데이터들과 구분하여 타깃을 예측한다는 것이다. 이때 고려되는 '가까운 데이터'들이라는 것은 사용자가 사전에 정의한 특정 수치(k-NN)를 사용할 수도 있고, 각 데이터들의 local density를 활용(radius-based neighbor learning)할 수도 있다.

 

1) Unsupervised NN

Unsupervised NN은 manifold learning 또는 spectral clustering과 같은 다른 학습방법들의 기초작업으로 사용된다. sklearn에서는 빠른 index구조를 잡기 위한 옵션으로 balltree, kdtree 등의 옵션을 선택할 수 있도록 되어 있다. 

2) Supervised NN 은 Calssification prediction 또는 Regression Prediction 에 활용된다.

sklearn.neighbors 에서는 아래 방법론들을 지원하고 있다.

 

Unsupervised NN Ball tree
KD tree
Kernal density
Supervised NN 
- k based
- Radius-based
Classification
Regression

 NN은 굉장히 많은 데이터의 calssification 과 regression 문제들을 풀이하는데에 성공적으로 사용되고 있다. 필기 인식, 위성사진 인식 등과 같이 경계가 모호한 상황에서 calssification 에 효과적이다. 

 

3.  sklearn.neighbors section 

 sklearn.neighbors 는 unsupervised 또는 supervised neighbors 방법을 위한 기능을 모두 지원한다. 이 중 

sklearn.neighbors section
출처: sklearn. https://scikit-learn.org/stable/modules/classes.html#module-sklearn.neighbors
neighbors.BallTree(X[, leaf_size, metric]) BallTree for fast generalized N-point problems
neighbors.KDTree(X[, leaf_size, metric]) KDTree for fast generalized N-point problems
neighbors.KernelDensity(*[, bandwidth, ...]) Kernel Density Estimation.
neighbors.KNeighborsClassifier([...]) Classifier implementing the k-nearest neighbors vote.
neighbors.KNeighborsRegressor([n_neighbors, ...]) Regression based on k-nearest neighbors.
neighbors.KNeighborsTransformer(*[, mode, ...]) Transform X into a (weighted) graph of k nearest neighbors.
neighbors.LocalOutlierFactor([n_neighbors, ...]) Unsupervised Outlier Detection using the Local Outlier Factor (LOF).
neighbors.RadiusNeighborsClassifier([...]) Classifier implementing a vote among neighbors within a given radius.
neighbors.RadiusNeighborsRegressor([radius, ...]) Regression based on neighbors within a fixed radius.
neighbors.RadiusNeighborsTransformer(*[, ...]) Transform X into a (weighted) graph of neighbors nearer than a radius.
neighbors.NearestCentroid([metric, ...]) Nearest centroid classifier.
neighbors.NearestNeighbors(*[, n_neighbors, ...]) Unsupervised learner for implementing neighbor searches.
neighbors.NeighborhoodComponentsAnalysis([...]) Neighborhood Components Analysis.
neighbors.kneighbors_graph(X, n_neighbors, *) Computes the (weighted) graph of k-Neighbors for points in X
neighbors.radius_neighbors_graph(X, radius, *) Computes the (weighted) graph of Neighbors for points in X

 

Comments