성능지표 / 평가DNN/머신러닝2021. 6. 25. 18:13
Table of Contents
모델의 성능을 판단하는 평가지표 중 하나가 정확도(accuracy)이다.
하지만 정확도는 불균형한 레이블 값 분포에서 ML 모델의 성능을 판단할 경우 적합한 평가지표가 아닙니다.
다음과 같이 sex 피처가 1이면 0 , 0이면 1로 예측하는 아주 간단한 예측 분류기를 통해 정확도르 도출하겠습니다.
from sklearn.base import BaseEstimator
class MyDummyClassifier(BaseEstimator):
def fit(self,X,y=None):
pass
def predict(self,X):
pred = np.zeros((X.shape[0],1))
for i in range(X.shape[0]):
if X['Sex'].iloc[i] ==1:
pred[i] = 0
else:
pred[i] = 1
return pred
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
train_df = pd.read_csv("./data/train.csv")
y_train_df = train_df['Survived']
X_train_df = train_df.drop('Survived',axis=1)
X_train_df = transform_features(X_train_df)
X_train, X_test, y_train,y_test = train_test_split(X_train_df,y_train_df,test_size=0.2,random_state=777)
myclf = MyDummyClassifier()
myclf.fit(X_train,y_train)
mypredictions = myclf.predict(X_test)
print("Dummy classifier의 정확도 : {:.4f}".format(accuracy_score(y_test,mypredictions)))
======================================
Dummy classifier의 정확도 : 0.7821
이런 아주 단순한 알고리즘도 약 80% 정확도를 보인다는건 문제가 있어 보입니다.
오차행렬
정밀도는 예측을 Positive로 한 대상 중에 예측과 실제 값이 Positive로 일치한 데이터의 비율을 뜻합니다.
의사의 암진단여부를 예를 들면 암이 있다 예측한 경우중 실제 암이였던 비율을 뜻하게 됩니다.
재현율은 실제값이 Positive인 대상 중에 예측과 실제 값이 Positive로 일치한 데이터의 비율을 말합니다.
마찬가지로 의사의 암진단여부로 예를 들면 실제 암이였던 사람중 암이 있다고 사전에 예측한 비율을 뜻하게 됩니다.
오차행렬에 관한 실습 문제를 보면,
from sklearn.metrics import accuracy_score,precision_score,recall_score,confusion_matrix
def get_clf_eval(y_test , pred):
confusion = confusion_matrix(y_test,pred)
acccuarcy = accuracy_score(y_test,pred)
precision = precision_score(y_test,pred)
recall = recall_score(y_test,pred)
print("오차행렬")
print(confusion)
print("정확도 : {:.4f}, 정밀도 : {:.4f}, 재현율 : {:.4f}".format(acccuarcy,precision,recall))
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
train_df = pd.read_csv('./data/train.csv')
y_train_df = train_df['Survived']
X_train_df = train_df.drop('Survived',axis=1)
X_train_df = transform_features(X_train_df)
X_train,X_test,y_train,y_test = train_test_split(X_titanic_df,y_titanic_df,test_size=0.2,random_state=777)
lr_clf = LogisticRegression()
lr_clf.fit(X_train,y_train)
pred = lr_clf.predict(X_test)
get_clf_eval(y_test,pred)
=====================================
오차행렬
[[100 17]
[ 17 45]]
정확도 : 0.8101, 정밀도 : 0.7258, 재현율 : 0.7258
F1 스코어
> 정밀도와 재현율을 결합한 지표. 정밀도와 재현율이 어느 한쪽으로 치우치지 않는 수치를 나타낼 때 상대적으로 높은 값을 가진다.
ROC곡선과 AUC
roc곡선은 모든 분류 임계값에서 분류 모델의 성능을 보여주는 그래프입니다.
auc는 roc곡선의 넓이를 의미합니다.
'DNN > 머신러닝' 카테고리의 다른 글
회귀 [일반선형,릿지,라쏘,엘라스틱 넷, 로지스틱회귀] (0) | 2021.07.22 |
---|---|
분류 - Ensemble(앙상블) [결정트리,RandomForest,Boost,스태킹] (0) | 2021.07.21 |
사이킷런으로 타이타닉 생존자 예측 (0) | 2021.06.23 |
붓꽃 품종 예측 , 사이킷런 , Model Selection , 데이터 전처리 (0) | 2021.06.23 |
Pandas (0) | 2021.06.22 |
@Return :: Return
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!