knn(k-nearest neighbors)
- 거리기반 모델
- 스케일링에 민감
- 이상치에 매우 민감
- 선택된 변수의 조합에 영향을 많이 받음(선택된 변수의 조합 중요)
- 수치형 변수 구성 시 가장 유리(명목형 변수는 knn과 어울리지 않음)
- 게으른 학습
knn은 다른 모델들과는 다르게 fit 할 때 아무것도하지 않는다. 궁금한 대상이 등장하면 그 때 계산을 하기 시작한다. 즉 predict 할 때 궁금한 대상과 나머지 대상과의 거리를 계산하기 시작한다는 의미이다(kmeans와 헷갈리지 말 것). 10만건의 데이터가 있고 predict 데이터가 3000건이면 10만 곱하기 3000건의 거리가 계산된다. 따라서 fitting 할 때 부하가 크지 않고 predict 할 때 부하가 크다. 결론적으로 학습 시 학습데이터끼리의 거리를 계산하지 않으므로 게으른 학습이라고한다.
예제 - iris data set의 분류(knn)
1. 데이터 로딩
2. 분리
3. 스케일링
4. 모델링
테스트 결과가 높아서 과소적합으로 보인다.
5 모델 개선
모델 개선 방법에는 파라미터 튜닝, 변수 선택, 변수 가공 등을 고려할 수 있는데 여기서는 변수 가공은 논외로 하겠다.
모델 점수가 높게 나온 편이기는 하나, 모델 점수를 0.1점 올리는 것은 현업에서는 물론 공모전에서 특히 중요하다. 공모전에서는 0.1점 사이에 몇 십 명이 몰려있기 때문이다.
1) 변수 선택
변수를 선택하니 over fit 이 심해졌다.
2) k의 튜닝
결론적으로, 변수 선택의 기대효과는 없고, 파라미터 튜닝의 결과 k = 3 정도가 적합해보이는 것으로 나타났다.
즉, 변수 선택의 효과가 유의미하다고 볼 수 없으며 k가 3일 때 가장 적절한 구간.
참고) 가장 가까운 이웃 확인하기
train data에서 k=1일 때 score는 항상 1이다. predict을 자기 데이터로 시도하기 때문이다. 즉, 가장 가까운 이웃은 자기 자신이라는 의미이다.
첫 번째 컬럼은 자기 자신과의 거리를 추출하므로 자기 자신을 나타낸다.
1번 데이터는 28번과 가장 가깝다. 43번 데이터와는 두 번째로 가깝다.
즉, 첫 번째 컬럼: 각 행 별로 가장 가까운데이터 포인트 번호(자신 포함)
두 번째 컬럼: 각 행 별로 두 번째로 가까운 데이터 포인트 번호(자신 포함)
세 번째 컬럼: 각 행 별로 세 번째로 가까운 데이터 포인트 번호(자신 포함)
예제) iris 데이터의 세 번째와 네 번째 컬럼만으로 분류모델 진행 시 new_data[[0.8, 0]]의 예측 결과와 함께 이웃을 시각화하여라.
(모든 predict data는 2차원으로 들어갸아 함)
new_data의 가장 가까운 이웃 3개 확인
'배우기 > 복습노트[Python과 분석]' 카테고리의 다른 글
[복습] Python | 분석 | 이미지 인식 (1) + 하루끝(20240205) (0) | 2024.02.11 |
---|---|
[복습] Python | 분석 | 교차검증(CV, Cross Validation) (0) | 2024.02.11 |
[복습] Python | 분석 | 차원축소(PCA, MDS) (2) (0) | 2024.02.10 |
[복습] Python | 분석 | 차원축소(PCA, MDS) (1) + 하루끝(20240202) (0) | 2024.02.09 |
[복습] Python | 분석 | SVM(Support Vector Machine) (4) (암의 양성 여부 예측) (0) | 2024.02.09 |