[ Python ] 모델 예측 TOP N번까지 값 뽑고 N번까지 Accuracy 계산하기
2019. 7. 16. 20:51ㆍ분석 Python/구현 및 자료
예측 정확도를 뽑다보면, 추천도 그렇듯이 TOP1만 보는 것이 아니라 TOP N번까지 보는 경우가 많다.
이런 경우 TOP N 번까지 결과값과 TOP N번까지 고려했을 때 정확도를 궁금해하는 경우가 흔하다.
Python으로는 다음과 같이 하면 된다!
예를 들어 이런 다중 클래스에서 예측을 한다고 하자.
아무리 모델이 좋아도 1개의 클래스를 예측하는 것에 성능을 왠만하면 기대하기 어려울 것이다.
pd.DataFrame(pred).head()
방법은 다음과 같다 top_n 함수를 잘 보면 된다.
저 함수를 이용해서 N번째로 큰 값을 찾을 수 있다.
import numpy as np
def top_n(data , n ) :
return list(map(lambda x: np.argpartition(x, -n)[-n:][0], data ))
"""
N : TOP 어디까지 볼지
"""
N = 3
Predict = pd.DataFrame([top_n(pred , i) for i in np.arange(1,N+1)]).T
Predict.columns = ["Top" + i for i in list(np.arange(1,N+1).astype(str)) ]
그 다음으로는 실제 test label을 붙여준다.
from sklearn import preprocessing
"""
TRAIN의 Predict은 Train으로 Label Encoder로 InverseTransform 진행합니다.
"""
trainle = preprocessing.LabelEncoder()
trainle.fit(train[target])
Predict[target] = test[target]
Predict.head()
다음으로는 inverse transform을 통해서 실제 라벨로 복원해주는 과정이다.
for i in Predict.columns.tolist() :
if re.search("Top" , i) is not None :
Predict[i] = trainle.inverse_transform(Predict[i])
else :
pass
TOP N번까지의 정확도 함수 구현
def top_n_acc(data , n) :
total = 0
for i in np.arange(1, n+1) :
total +=sum(data[target] == data["Top" + str(i)])
return print("Top~{} ACC : {:.4f}".format(n , total/data.shape[0]))
이런식으로 여러개의 클래스가 있고 평가할 때 Top 몇 순위를 보고 싶어할 때 다음과 같이 하면 된다!
- 끝 -
728x90
'분석 Python > 구현 및 자료' 카테고리의 다른 글
[ Python ] combination 조합 만들기 (0) | 2019.07.24 |
---|---|
[ Python ] Regex 유용한 팁들! (0) | 2019.07.20 |
[ Python ] 영어 Text 전처리 및 유용한 Re 설명 자료 (0) | 2019.07.09 |
[ Python ] 메모리 누수 해결에 도움되는 패키지 소개 (0) | 2019.06.05 |
[ Python ] Python에서도 R처럼 data.table을 사용할 수 있어요. (0) | 2019.06.02 |