손실 함수 I

Python으로 설계하는 Machine Learning 워크플로

Dr. Chris Anagnostopoulos

Honorary Associate Professor

KDD '99 컵 데이터셋

kdd.iloc[0]
kdd.iloc[0]
duration                         51
protocol_type                   tcp
service                        smtp
flag                             SF
src_bytes                      1169
dst_bytes                       332
land                              0
...
dst_host_rerror_rate              0
dst_host_srv_rerror_rate          0
label                          good
Python으로 설계하는 Machine Learning 워크플로

거짓 양성 vs 거짓 음성

레이블 이진화:

kdd['label'] = kdd['label'] == 'bad'

가우시안 나이브 베이즈 분류기 학습:

clf = GaussianNB().fit(X_train, y_train)
predictions = clf.predict(X_test)
results = pd.DataFrame({
    'actual': y_test,
    'predicted': predictions
})

Python으로 설계하는 Machine Learning 워크플로

거짓 양성 vs 거짓 음성

레이블 이진화:

kdd['label'] = kdd['label'] == 'bad'

가우시안 나이브 베이즈 분류기 학습:

clf = GaussianNB().fit(X_train, y_train)
predictions = clf.predict(X_test)
results = pd.DataFrame({
    'actual': y_test,
    'predicted': predictions
})

레이블과 예측의 네 가지 조합: 모두 True, 모두 False, 레이블 True-예측 False, 레이블 False-예측 True. 마지막 조합이 강조되어 있습니다.

Python으로 설계하는 Machine Learning 워크플로

거짓 양성 vs 거짓 음성

레이블 이진화:

kdd['label'] = kdd['label'] == 'bad'

가우시안 나이브 베이즈 분류기 학습:

clf = GaussianNB().fit(X_train, y_train)
predictions = clf.predict(X_test)
results = pd.DataFrame({
    'actual': y_test,
    'predicted': predictions
})

이번에는 레이블 True-예측 False 조합이 강조됩니다.

Python으로 설계하는 Machine Learning 워크플로

거짓 양성 vs 거짓 음성

레이블 이진화:

kdd['label'] = kdd['label'] == 'bad'

가우시안 나이브 베이즈 분류기 학습:

clf = GaussianNB().fit(X_train, y_train)
predictions = clf.predict(X_test)
results = pd.DataFrame({
    'actual': y_test,
    'predicted': predictions
})

예측이 레이블과 일치하는 두 경우가 강조되어 있습니다.

Python으로 설계하는 Machine Learning 워크플로

혼동 행렬

conf_mat = confusion_matrix(
    ground_truth, predictions)
array([[9477,   19],
       [ 397, 2458]])
tn, fp, fn, tp = conf_mat.ravel()
(fp, fn)
(19, 397)

이 데이터셋에서 앞서 언급한 네 가지 조합 각각의 개수를 세는 혼동 행렬입니다.

Python으로 설계하는 Machine Learning 워크플로

스칼라 성능 지표

accuracy = 1-(fp + fn)/len(ground_truth)

recall = tp/(tp+fn)
fpr = fp/(tn+fp)
precision = tp/(tp+fp)
f1 = 2*(precision*recall)/(precision+recall)
accuracy_score(ground_truth, predictions)
recall_score(ground_truth, predictions)
precision_score(ground_truth, predictions)
f1_score(ground_truth, predictions)
Python으로 설계하는 Machine Learning 워크플로

거짓 양성 vs 거짓 음성

분류기 A:

tn, fp, fn, tp = confusion_matrix(
    ground_truth, predictions_A).ravel()
(fp,fn)
(3, 3)
cost = 10 * fp + fn
33

분류기 B:

tn, fp, fn, tp = confusion_matrix(
    ground_truth, predictions_B).ravel()
(fp,fn)
(0, 26)

cost = 10 * fp + fn
26
Python으로 설계하는 Machine Learning 워크플로

어느 분류기가 더 나을까요?

Python으로 설계하는 Machine Learning 워크플로

Preparing Video For Download...