군침이 싹 도는 코딩

softmax 결과를 레이블 인코딩으로 바꾸는 법 (argmax) 본문

Python/Deep Learning

softmax 결과를 레이블 인코딩으로 바꾸는 법 (argmax)

mugoori 2022. 12. 29. 11:08
y_test
>>> array([9, 2, 1, ..., 8, 1, 5], dtype=uint8)
y_pred
>>>
array([[2.20964534e-06, 1.08094355e-05, 9.79511606e-06, ...,
        1.81616340e-02, 9.49416881e-06, 9.58712578e-01],
       [3.86873609e-04, 3.95946366e-11, 9.89674151e-01, ...,
        2.52638402e-14, 2.08223998e-08, 1.40853149e-13],
       [4.37165903e-09, 9.99999940e-01, 7.74465492e-11, ...,
        1.44372901e-15, 2.84200545e-11, 4.31300395e-13],
       ...,
       [3.20444873e-04, 1.72288335e-08, 1.08582329e-03, ...,
        2.72887689e-07, 9.97514784e-01, 7.87202268e-08],
       [4.04075081e-06, 9.99791861e-01, 5.28116345e-07, ...,
        1.71236345e-10, 6.93887444e-07, 8.45799661e-08],
       [1.15618832e-05, 3.99035031e-07, 7.97168741e-06, ...,
        9.16359539e-04, 7.36837756e-05, 1.76666090e-05]], dtype=float32)

# 소프트 맥스로 예측값을 뽑아내면 아웃풋 노드를 설정한 만큼의 갯수가 나온다

원래 결과값은 1개씩만 있는반면 해당 코딩에서는 아웃풋 노드를 10개를 주었기때문에 예측값의 결과가

1개당 10개씩 나온다 이러면 검증 결과를 거칠때 컨퓨전 매트릭스를 사용할 수 없다

 

 

 

 

 

y_pred.argmax(axis=1)
>>> array([9, 2, 1, ..., 8, 1, 5])

# 넘파이의 함수 argmax() 를 쓰면 해당 리스트안에서 가장 큰 값을 찾아준다

파라미터안에 axis 1을 넣게되면 모든 리스트의 가장 큰 값을 찾아주게된다

출력을 보면 실제값과 동일하게 레이블 인코딩으로 표기된것을 볼 수 있다

 

 

 

 

 

confusion_matrix(y_test,y_pred)
>>>
array([[881,   1,  15,  24,   1,   1,  71,   0,   6,   0],
       [  1, 975,   1,  18,   2,   0,   1,   0,   2,   0],
       [ 21,   2, 908,  13,  38,   0,  18,   0,   0,   0],
       [ 27,   8,  13, 915,  13,   0,  22,   0,   2,   0],
       [  0,   3, 297,  58, 619,   0,  20,   0,   3,   0],
       [  0,   0,   0,   0,   0, 922,   0,  50,   1,  27],
       [165,   3, 197,  27, 107,   0, 491,   0,  10,   0],
       [  0,   0,   0,   0,   0,   3,   0, 981,   0,  16],
       [  3,   3,   4,   6,   1,   1,   4,   5, 973,   0],
       [  0,   0,   0,   1,   0,   2,   1,  47,   0, 949]])

# 컨퓨전 매트릭스를 사용해보니 정상작동한것을 볼 수 있다