์ํฌํธ๋ฒกํฐ๋จธ์ ๋ชจ๋ธ
#ํ์ ํจํค์ง ๋ถ๋ฌ์ค๊ธฐ
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
https://bioinformaticsandme.tistory.com/328
log loss์ ๋ํด ์์๋ณด์ - [๋ฐ์ด์ฝ ํ๊ฐ์ฐ์] - YouTube