KNN 회귀는 KNN 분류와 동일한 과정을 거쳐 이웃들의 값의 평균을 예측값으로 얻는다. 이 때, 거리가 가까운 이웃일수록 평균에 더 많이 기여하도록 가중치를 주기도 한다. 가장 흔한 가중치 스키마는 d가 이웃까지의 거리일 때 각각의 이웃에게 1/d의 가중치를 주는 것이다.
즉, 가중치는 거리에 반비례하게 하여 거리가 짧을수록 큰 가중치를 갖게 한다.
k-최근접 이웃(KNN)은 거리 기반 알고리즘으로 새로운 관측값의 주변에 있는 k개의 이웃(데이터)를 이용하여 유사성 측도에 기반해 관측값을 분류한다. 따라서, 유사성 측도에 모든 변수가 동일하게 기여할 수 있도록 스케일링을 수행해야한다.
KNN 모델 성능을 높이기 위해서는 스케일링 작업을 진행
로지스틱 회귀나 트리 기반 모델인 의사결정나무, 랜덤 포레스트 , 그래디언트 부스팅은 변수의 크기에 민감하지 않으므로 표준화를 수행해줄 필요가 없음.
k값에 따라 정확도, 정밀도 등이 달라지는 만큼 이웃 값은 항시 다르기 때문에 다양하게 돌려보면서 확인해야함.
분류와 군집 모두 데이터를 특정 집단으로 나눈다는 공통점이 존재
소속 집단의 정보(종속변수)를 알고 있는 상태에서 새로운 데이터를 비슷한 집단으로 묶는 방법. 즉, 지도학습(knn)
이항분류 통계를 함께 진행해 일치 정도를 비교
소속 집단의 정보(종속변수)가 없는 상태에서 비슷한 집단으로 묶는 방법. 즉, 비지도 학습(k-means)
scikit-learn은 GPU보다는 CPU 성능을 요구.
from sklearn.datasets import load_iris
iris = load_iris()
#독립변수 가져오기
values = iris.data #2차배열
#독립변수의 이름 가져오기
feature_names = iris.feature_names #1차배열
#종속변수(레이블) 가져오기
target = iris.target #1차배열
위 과정의 결과가
origin = read_excel("https://data.hossam.kr/G02/iris.xlsx")
09-분류-iris.ipynb
사이킷런 패키지는 metrics 모듈에 다양한 선능 평가 방법을 제공.
이때 주의할 점은 이진 분류 여부를 잘 확인해 각각의 평가 지표를 적절하게 적용.
로지스틱, 소프트맥스의 차이는 2진 분류
아래는 2진분류가 아니라도 범용적으로 사용이 가능
- 오차행렬(혼동행렬) : 'confusion_matrix(관측치, 예측치)'
- 정확도 : 'accuracy_score(관측치, 예측치)'
아래는 왠만해서는 binary 형태로 사용
- 정밀도 : 'precision_score(관측치, 예측치)'
- 재현율 : 'recall_score(관측치, 예측치)'
- F1 스코어 : 'f1_score(관측치, 예측치)'
- ROC 곡선 : 'roc_curve(관측치, 예측치)'
- 분류 리포트 : 'classification_report(관측치, 예측치)'
- AUC : 'roc_auc_score(관측치, 예측치)'
불균형한 레이블 클래스를 가지는 이진 분류 모델에서 정확도만 가지고 판단할 경우 신뢰도가 떨어질 수 있다. 이럴 경우 정밀도 혹은 재현율을 사용하는 것이 더욱 바람직.
이 값들은 이진분류에서 사용을 권장. 그러므로 여기서는 실행 시 에러가 발생
Target is multiclass but average='binary'
이진분류가 아닌 경우 다중분류에서는 average를 사용해 'macro', 'micro', 'weighted' 방식을 설정 사용 가능