KNN 알고리즘 구현하기
# 필요한 패키지 import
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
# 데이터 로드
train_data = pd.read_csv("C:/Users/allye/Desktop/DSOB/WIDA Dacon/DCSTree/train.csv")
# type과 나머지 데이터들을 분리해줌
X = train_data.iloc[:, 2:]
y = train_data.iloc[:, 1]
# 데이터셋 분할 (학습용 데이터와 검증용 데이터)
# training과 test의 비율은 0.3
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# KNN 모델 생성
k = 3 # k 값 설정
model = KNeighborsClassifier(n_neighbors=k)
# 모델 학습
model.fit(X_train, y_train)
# 검증용 데이터 예측
y_pred = model.predict(X_test)
# 정확도 계산
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)
Accuracy: 0.7735924530817694
KNN의 하이퍼파라미터 분석
하이퍼 파라미터 : 머신러닝에서 어떠한 임의의 모델을 학습시킬 때, 사람이 직접 설정해야하는 변수
- Distance(거리)
거리에 따라 새로 들어올 데이터의 분류가 달라짐
- Euclidean Distance (유클리디안 거리)
- 일반적으로 가장 많이 사용
- 피타고라스 정리, n 차원에서의 두 점 사이의 거리를 통해 계산
- But, 차원이 높아질 수록 정확도가 떨어짐
- Manhatten Distance (맨허튼 거리)
- 두 번째로 많이 쓰이는 거리 계산
- 제한된 조건 하에서 정해진 루트를 통해 도달할 수 있는 거리
이 외에도 표준화 거리, 마할라노비스 거리, 체비셰프 거리, 민콥스키 거리, 캔버라 거리 등이 존재
- K
KNN 알고리즘에서 가장 중요한 파라미터
K값을 어떻게 설정하느냐에 따라 결과가 달라짐
K = 이웃의 수
- K 값이 작을수록
- 장점
- 노이즈에 대한 영향력이 줄어듦
- 결정 경계가 부드러워 짐
- train set에서의 정확도가 높음
- 모델이 복잡해질 수 있음
- test set에서 에러가 높고 정확도가 낮아짐 → 과적합 (Overfitting)
- K 값이 클수록
- 장점
- 모델이 덜 복잡함
- test set에 대한 정확도가 낮음 → 과소적합 (Inderfitting)
이웃의 수를 설정할 때는 **교차 검증(Cross-validation)**을 사용하여 최적의 k값을 찾는 것이 좋습니다.
분류 모델의 성능 평가 방법(지표)
- logloss (Logarithmic Loss)
모델이 예측한 확률과 실제 클래스 레이블 간의 차이를 직접적으로 측정
💡 LogLoss = -1/N * Σ(yi*log(pi) + (1-yi)log(1-pi))
yi : i번째 샘플의 실제 클래스 레이블
pi : 모델이 예측한 i번째 샘플이 클래스 1에 속할 확률
N : 전체 샘플 수
- 예측 확률이 실제 레이블과 일치할수록 : 최소화
- 예측 확률이 실제 레이블과 다를수록 : 최대화
- 0과 1 사이의 값
- 값이 작을수록 모델의 예측이 더 좋음
- Recall (재현율)
이진 분류 모델에서 모델이 참으로 예측한 샘플 중 실제로 참인 샘플의 비율을 나타내는 지표
모델이 모든 양성 샘플을 식별할 수 있는 능력을 측정하는 지표
💡 TP / (TP + FN)
TP : 모델이 양성으로 예측하고 실제로 양성인 샘플의 수
FN : 모델이 음성으로 예측했지만 실제로는 양성인 샘플의 수
양성인 샘플을 찾는 것이 중요한 경우에 매우 유용한 지표
ex) 암 진단 모델
출처 :
https://needjarvis.tistory.com/715
https://leonard92.tistory.com/12
https://hleecaster.com/ml-accuracy-recall-precision-f1/
'WIDA > DACON 분류-회귀' 카테고리의 다른 글
[DACON/김경은] 분류 모델 뜯어보기, 분류 모델 평가방식 (0) | 2023.03.31 |
---|---|
[DACON/김규리] 분류 모델 뜯어보기, 분류 모델 평가방식 (0) | 2023.03.31 |
[DACON/조아영] 분류 모델 뜯어보기, 분류모델 평가방식 (svm 모델도 추가할 예정) (0) | 2023.03.30 |
[DACON/김민혜] 분류 모델 뜯어보기, 분류모델 평가방식 (0) | 2023.03.30 |
[DACON/김규리] 분류 모델 알아보기 (1) | 2023.03.24 |