서포트벡터머신 모델
#필요 패키지 불러오기
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import pandas as pd
import warnings
warnings.filterwarnings('ignore')
from sklearn import svm
#데이터 불러오기
train_data = pd.read_csv("C:/Users/twink/Documents/카카오톡 받은 파일/train.csv")
# type과 나머지 데이터들을 분리
X = train_data.iloc[:, 2:]
y = train_data.iloc[:, 1]
# training dataset과 test dataset으로 쪼개기
# training과 test의 비율은 0.3
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=11)
#SVM 모델
clf = svm.SVC(kernel = 'linear', C=1, gamma=0.1)
#모델 학습
clf.fit(X_train, y_train)
# 정확도 출력
print("서포트벡터머신 정확도:", clf.score(X_test, y_test))
- 임의로 kernel을 선형으로 linear 를 사용하였는데 이에 따라 설정하는 C와 gamma 설정 범위를 잘못 기재하였는지 정확도가 안나와서 더 공부 해봐야 될것같습니다 ...
하이퍼파라미터 분석
- C : 오류를 얼마나 허용할 것이지 규제
- kernal : 데이터 셋의 형태에 따라 다름(선형 데이터셋:'linear', 비선형 데이터셋:'poly' 등)
- degree : 다항식 커널의 차수 결정
- gamma : 결정경계를 얼마나 유연하게 그릴지 결정, 클수록 오버피팅 발생 가능성 높아짐
- coef0 : 다항식 커널에 있는 상수항 r
평가방법
Log loss
모델 성능 평가 시 사용 가능한 지표
분류 모델 평가시에 사용한다.
Log loss 개념
1. 모델이 예측한 확률 값을 직접적으로 반영하여 평가
2. 확률 값을 음의 log 함수에 넣어서 변환을 시킨 값으로 평가 -> 잘못 예측할 수록, 패널티를 부여하기 위함
- logloss는 음의 로그 함수를 사용하는데, log함수의 결과에 -1을 곱한 결과로 x축을 기준으로 대칭을 이룬다.
- 음의 로그 함수는 1일때 0이고, 0에 가까워질 수록 숫자가 급격하게 커진다.
- log loss 값이 작을수록 좋은 모델이다.
100%의 확률(확신)로 답을 구한 경우 -log(1.0) = 0
80% 확률의 경우 -> -log(0.8) = 0.22314
60% 확률의 경우 -> -log(0.6) = 0.51082
확률이 낮아질수록 log loss 값이 기하급수적으로 증가
이런식으로 log loss 는 확률이 낮을 때 패널티를 더 많이 부여하기 위해 음의 로그 함수 사용
관측치 (row)가 여러 개일 경우
관측치별로 실제 답안에 해당하는 확률 값을 음의 로그를 취하고, 평균을 낸다.
log loss 평균
= 1번 문제 정답 확률에 대한 음의 로그 값 + ... + n번 문제 정답 확률에 대한 음의 로그 값 / n(문제의 개수)
왜 사용하는가?
최종적으로 맞춘 결과만 가지고 성능을 평가할 경우, 얼만큼의 확률로 해당 답을 얻은건지 평가가 불가능하다. 답은 맞췄지만 20%의 확률로 그저 찍은거라면 성능이 좋은 모델이라고 할 수 없을 것이다.
AUC - ROC Curve
다양한 임계값에서 모델의 분류 성능에 대한 측정 그래프를 말함
- ROC(Receiver Operating Characteristic) = 모든 임계값에서 분류 모델의 성능을 보여주는 그래프
- AUC(Area Under thr Curve) = ROC 곡선 아래 영역
AUC 가 높다는 것을 클래스를 구별하는 모델의 성능이 훌륭하다는 것을 의미
용어정리
1. TP : 맞는 것을 맞다고 예측한 것
2. TN : 아닌 것을 틀리다고 예측한 것
3. FP : 아닌 것을 맞다고 예측한 것
4. FN : 맞는 것을 틀리다고 예측한 것
정밀도 = TP/TP+FP
재현율 = TP/TP+FN
정확도 = TP+TN/TP+FP+TN+FN
- FN,FP 구간은 판단이 불분명하기 때문에 구간이 작을수록 좋다.
- 따라서 판단 불분명 구간을 최소화 한 것이 ROC 커브이다.
- ROC 커브는 TP 와 FP 의 그래프이다.
- TP 는 FP 는 작을수록 좋다.
- AUC 값의 최소값은 0.5으로 이 경우 모델의 클래스 분리 능력이 거의 없을 뜻한다.
- 즉, AUC 가 1일때는 두개의 곡선이 전혀 겹치지 않고 클래스를 완벽하게 구분, 0.7 의 경우 클래스의 구별 확률이 70%라고 할 수 있다.
ROC 커브
y축 : 민감도
x축 : 특이도
아래의 면적을 AUC 라고 하여 AUC 면적이 넓을수록 좋은 커브, 즉 좋은 모델이다.
출처
https://for-my-wealthy-life.tistory.com/37
https://seoyoungh.github.io/machine-learning/ml-logloss/
https://velog.io/@skyepodium/logloss-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0
'WIDA > DACON 분류-회귀' 카테고리의 다른 글
[DACON/김민혜] 파이썬을 이용한 EDA (0) | 2023.04.07 |
---|---|
[DACON/김세연] 분류 모델 뜯어보기, 분류 모델 평가방식 (0) | 2023.03.31 |
[DACON/김규리] 분류 모델 뜯어보기, 분류 모델 평가방식 (0) | 2023.03.31 |
[DACON/최다예] 분류 모델 뜯어보기, 분류모델 평가방식 (0) | 2023.03.30 |
[DACON/조아영] 분류 모델 뜯어보기, 분류모델 평가방식 (svm 모델도 추가할 예정) (0) | 2023.03.30 |