rueki

평가 - 정확도(Accuracy) 본문

머신러닝/파이썬 머신러닝 완벽가이드 정리

평가 - 정확도(Accuracy)

륵기 2020. 1. 26. 16:02
728x90
반응형

머신러닝의 프로세스

1. 데이터 가공 / 변환

2. 모델 학습 / 예측

3. 평가

 

 

정확도 : 실제 데이터에서 예측 데이터가 얼마나 같은지를 판단하는 지표

 

정확도(Accuracy) = 예측 결과가 동일한 데이터 건수 / 전체 예측 데이터 건수

 

모델예측 성능을 직관적으로 나타내는 평가지표이다.

그러나 데이터의 구성에 따라 ML 모델의 성능을 왜곡 받을 수 있다.

 

캐글의 타이타닉 예제에서 성별로만 예측을 하면 정확도가 얼마나 나오는지 확인해보자.

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

titanic_df = pd.read_csv('train.csv')
y_titanic_df = titanic_df['Survived']
X_titanic_df = titanic_df.drop('Survived',axis=1)
X_titanic_df = transform_features(X_titanic_df)
X_train, X_test, y_train, y_test = train_test_split(X_titanic_df, y_titanic_df, test_size=0.2, random_state=0)

myclf = MydummyClassifier()
myclf.fit(X_train, y_train)

mypredictions = myclf.predict(X_test)
print('Dummy Classifier의 정확도는 : {0:.4f}'.format(accuracy_score(y_test,mypredictions)))


# Dummy Classifier의 정확도는 : 0.7877

단순히 성별로만 예측을 진행했는데도 78%라는 높은 수치가 나온다.

정확도는 불균형한 레이블 값 분포에서 ML성능을 판단할 경우, 적합한 평가 지표가 아니다.

 

즉, 정확도는 불균형한 레이블 데이터 세트에서 성능 수치로 사용되서는 안 되며, 이의 단점을 해결한 것이

오차행렬 (Confusion Matrix) 이다.

728x90
반응형
Comments