-
[지도학습] KNNStudy/Statistics 2019. 5. 23. 09:52
지도학습 중 가장 간단하다고 볼 수 있는 거리를 이용하여 예측하는 모델
테스트 데이터와 가장 가까운 k개의 특징을 보고 테스트 데이터 예측
k-최근접 이웃(K-Nearest Neighbors, KNN)
거리가 가장 가까운 데이터포인트를 찾고, 가장 많은 클래스가 예측 결과가 됨
훈련방법 : 훈련데이터 저장
예측방법 : 궁금한 데이터에서 가장 가까운 훈련 데이터를 찾아 선택
이웃을 몇개 찾을 지 몰라서 k! 이웃개수는 내가 정하면 됨~ 이웃수는 홀수로 정하기
예측 결과는 가장 많은 이웃의 상태가 됨!
knn 과정
1. 데이터셋 나누기(train/test)
2. 이웃 수(= k) 정하기
3. 훈련 : 훈련데이터 저장
4. 예측 : 테스트 데이터에서 가장 가까운 k개 데이터 포인트가 속한 클래스 중 과반수에 해당하는 것이 예측 결과!
5. 평가
K-Neighbors Classifier
knn이랑 같은데 포인트가 속한 클래스에 따라 평면에 색을 칠함
이항이라면 색이 지정 영역으로 나뉘는 결정경계를 볼 수 있음
이웃을 많이 선택할 수록 경계가 부드러워짐 = 복잡도가 낮아짐(단순해짐)
훈련 데이터 전체 개수를 이웃으로 정하는 경우 0,1 둘 중 많은 쪽으로 예측값이 다 동일하게 선택됨
=> 예측할 의미가 없어짐
k-Neighbors Regression
하나일 경우는 knn이랑 같은데 둘 이상일 경우 개수가 많은 걸로 선택하는 것이 아니라 이웃 간의 평균
python 코드 중 sklearn 패키지 사용 시
knn_regression( weight=uniform,..) = np.mean사용한 단순 평균 (기본값)
knn_regression( weight= distance,..) = 거리 고려한 가중치 평균
이웃수에 따른 정확도 비교
이웃 수가 많을수록 훈련데이터 정확도는 떨어지지만 테스트 정확도는 상승함
이웃 수를 너무 많이 선택하면 오히려 정확도가 떨어짐
장단점과 파라메타
kneighbors 분류기에 중요한 매개변수는 2개
- 이웃의 수- (KNR일 경우만!) 데이터 포인트 사이의 거리를 재는 방법(기본값은 유클리디안)
장점 이해하기 쉬운 모델
매개변수를 많이 조정하지 않아도 좋은 성능
단점 훈련 세트가 매우 크면(특성의 수 or 샘플의 수) 느림
전처리과정이 중요!
수백개 이상의 특성을 가진 데이터셋에서는 잘 안됨
특성값 대부분이 0인 희소한 데이터 셋 잘 안됨
-
어떨때 사용?
복잡한 알고리즘 적용전 시작해볼 만함
* 이차원으로 했을 때 하나의 특성에만 영향이 클 수도 있어서 거리를 재는 것이기 때문에 전처리 과정에서 꼭 표준화 해주기!
'Study > Statistics' 카테고리의 다른 글
[분석/통계] 교차검증 (0) 2019.05.29 [분석/통계] 비지도학습 - 군집(K-MEANS, 병합군집) (2) 2019.05.28 [분석/통계] 데이터 전처리와 스케일 조정 방법 (0) 2019.05.28 [지도학습] 의사결정나무/랜덤포레스트/그래디언트 부스팅 (4) 2019.05.24 정규분포? (0) 2019.05.22 -