kNN 알고리즘 원리
kNN(k-Nearest Neighbor)은 분류 또는 회귀 모두에서 사용 가능한 모델이다. 일반적으로는 분류에서 사용하는 모델이나, 회귀에서도 kNN을 적용할 수 있다.
kNN의 개념
kNN은 주어진 데이터셋에서 새로운 점이 들어왔을 때, 해당 점을 어떻게 분류할지에 대해 고려하는 것이 문제이다.
예를 들어, 다음과 같은 데이터 셋이 주어졌을 때 붉은색과 녹색으로 분류하는 문제를 고려하자.
여기서, 검은색 데이터가 새로 들어 왔을대를 고려할 때, k = 3이라면 검은색에서 가장 가까운 데이터 3개를 확인한다.
여기서는 빨강 1개, 초록 2개이니 검은색을 초록색으로 분류하게 된다.
모델 설계시 고려해야 할 사항
정규화
변수의 값이 적당히 퍼진 정도가 아니라, 매우 넓게 퍼진다면 편차가 너무 커서 결론이 올바르게 나지 않을 수 있다. 이를 위해서는 특성을 모두 고르게 반영하기 위해, 정규화를 고려해야 할 것이다.
k값 선택
k값이 너무 작다면 : 오버피팅이 발생한다.
k값이 너무 크다면 : 언더피팅이 발생한다.
k값이 너무 크다는 것은, 모든 점이 동일한 방식으로 분류되므로 점 사이의 거리가 의미가 없어져 언더피팅이 발생하게 된다. 단, k값이 너무 작다면 근처의 점을 민감하게 영향받기에 오버피팅이 발생하게 된다.
응용 - kNN 회귀에 적용하기
scikit-learn의 kNeighhborsRegresor을 통해 kNN을 회귀에도 적용이 가능하다.
이것의 경우는 근처의 점들로 분류를 하는 것 대신 근처 k개의 점들의 평균을 통해 예측할 수 있다.
from sklearn.datasets import load_boston
from sklearn import neighbors
from sklearn.model_selection import train_test_split
boston = load_boston()
K = 5
X_train, X_test, y_train, y_test = train_test_split(boston.data,
boston.target,
test_size = 0.2)
model = neighbors.KNeighborsRegressor(n_neighbors = K)
model.fit(X_train, y_train)
pred = model.predict(X_test)
응용 - kNN을 통한 결측치 채우기
결측치를 채울 때에도 범주형 결측치의 경우는 최빈값, 연속형일 경우 데이터의 중앙값 및 대체값으로 대체한다.
'Archive > 데이터 분석 관련' 카테고리의 다른 글
[Data] Feature Importance 정리하기 (0) | 2021.09.30 |
---|---|
[Data] Data Clustering 정리 (0) | 2021.09.30 |
[Data] ROC Curve (0) | 2021.08.24 |
[Data] 로지스틱 회귀분석의 해석 및 개선 (0) | 2021.08.23 |
[Data] Ensemble - Gradient Boosting (0) | 2021.08.02 |