정확도(Accuracy)
정확도는 실제 데이터에서 예측 데이터가 얼마나 같은지를 판단하는 지표입니다.
정확도(Accuracy) = 예측 결과가 동일한 데이터 건수 / 전체 예측 데이터 건수
import sklearn
accuracy_score(y_test,mypredictions)
accuracy_score(정답값, 예측값) 함수로 정확도를 쉽게 구할수 있다.
하지만 데이터의 구성에 따라 왜곡될수 있기때문에 정확도만으로 평가하는것은 적합하지 않다..
(EX : 희귀병환자의 경우 병이 걸린 환자보다 병이 걸리지 않은 사람이 데이터가 훨씬 많기 때문에 컴퓨터가 어떤 과정을 거치지 않고, 단순하게 모든 경우를 정상적인 환자라 결과를 내놔도 정확도는 꽤 높게 형성될수 있는 경우가 있다.)
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.base import BaseEstimator
from sklearn.metrics import accuracy_score
import numpy as np
import pandas as pd
class MyFakeClassifier(BaseEstimator):
def fit(self,x,y):
pass
def predict(self,x):
return np.zeros((len(x),1),dtype=bool)
digits=load_digits()
y=(digits.target==7).astype(int)
x_train,x_test,y_train,y_test=train_test_split(digits.data,y,random_state=11)
print('레이블 테스트 세트 크기:',y_test.shape)
print('테스트 세트 레이블 0과 1의 분포도')
print(pd.Series(y_test).value_counts())
fakeclf=MyFakeClassifier()
fakeclf.fit(x_train,y_train)
fakepred=fakeclf.predict(x_test)
print('모든 예측을 0으로 하여도 정확도는:{0:.3f}'.format(accuracy_score(y_test,fakepred)))
#output
레이블 테스트 세트 크기: (450,)
테스트 세트 레이블 0과 1의 분포도
0 405
1 45
dtype: int64
모든 예측을 0으로 하여도 정확도는:0.900
mnist 데이터세트에서 임의로 7을 제외한 숫자의 레이블을 False(==0)으로 만든 후 0을 예측하는 코드를 짜보았는데 1이든0이든 상관없이 모든 예측을 0이라 하여도 정확도가 90%가 나오는것을 볼수 있다.
728x90
'머신러닝 > sklearn' 카테고리의 다른 글
평가(Accuracy) (0) | 2022.02.08 |
---|---|
피처 스케일링(Feature Scaling)과 정규화(Normalization) (0) | 2022.02.06 |