- 분류(Classification)와 회귀(Regression) 를 모두 지원
- 예측하려는 데이터와 input 데이터들 간의 거리를 측정해 가장 가까운 K개의 데이터셋의 레이블을 참조해 분류/예측
- 거리를 측정해 데이터 포인트를 기준으로 K를 이용해 모델 학습
- Hyper Parameter
- K : 새로운 데이터포인트를 분류할때 확인할 데이터 포인트의 개수
- K가 너무 작으면(모델이 복잡) Overfitting, 너무 크면(모델이 단순) Underfitting
- 검증 결과에 따라 K값 수정을 통해 개선 가능
- default : 5
- 거리
- 방식
- p=2: 유클리디안 거리(Euclidean distance - 기본값, L2-Norm)
- p=1: 맨하탄 거리(Manhattan distance, L1-Norm)
- Hyper Parameter가 적어 빠르게 만들 수 있다
- 복잡한 알고리즘 적용 전에 확인용 or base line을 잡기위한 모델
- Feature의 단위에 영향 받기에 Feature Scaling작업 필요
- Tree의 경우는 하지 않는다
from sklearn.neighbors import KNeighborsClassifier # 모델 생성 knn = KNeighborsClassifier(n_neighbors = k) # 보통 K를 list, 반복문 이용해 학습 # 학습 knn.fit(전처리된 Feature_train, 전처리된 Label) # 추론 pred_train = knn.predict(전처리된 Feature_train) pred_test = knn.predict(전처리된 Feature_test)
# pipeline 2가지 pipeline1 = Pipeline([ ('s_scaler', StandardScaler()), ('knn', KNeighborsClassifier()) # 단순히 pipeline 모델별로 이름 붙여줌 ], verbose=True) pipeline2 = Pipeline([ ('mm_scaler', MinMaxScaler()), ('knn', KNeighborsClassifier()) ], verbose=True) # parameter params = { "knn__n_neighbors":range(1,11), #k값 1 ~ 10 "knn__p":[1,2] # p(거리재는방식): 1-유클리디안, 2-맨하탄 } param = { "knn__n_neighbors":range(1,11), # pipeline의 경우 (모델이름__변수)로 정의 "knn__p":[1,2] } gs = GridSearchCV(pipeline1, param, scoring='accuracy', cv=5, n_jobs=-1) # 학습 gs.fit(Feature, Label)
- classification Score 반환
result = classification_report(Label, model.predict(Feature)) # return precision, recall, f1-score, support