파이썬에서 array형 리스트 두 개의 유사도(정확도)를 알고 싶습니다.

조회수 2013회

이제 막 딥러닝 공부를 시작한 대학생입니다.

공부를 위해 특정 기상 현상 예측을 목적으로 RNN의 GRU 방식으로 시계열 데이터를 처리했고, 이를 그래프로 시각화 하는데 성공했습니다.

하지만 저는 여기서 train 데이터와 test 데이터간의 유사도, 즉 정확도를 측정하고 싶었습니다. 이를 위해 코사인 유사도 방식을 이용해봤지만, 에러가 발생했습니다.

우선 딥러닝 결과값으로 나온 train 데이터와 test 데이터의 형태는 다음과 같습니다.

In [51] : train
Out[51] : array([[0., 0., 0., ..., 0., 0., 0.],
       [0., 0., 0., ..., 0., 0., 0.],
       [0., 0., 0., ..., 0., 0., 0.],
       ...,
       [0., 0., 0., ..., 0., 0., 0.],
       [0., 0., 0., ..., 0., 0., 0.],
       [0., 0., 0., ..., 0., 0., 0.]], dtype=float32)

(train 데이터는 0과 1로만 구성되어 있습니다. 그래프 상에서도 디지털 그래프처럼 직각 모양으로 그래프가 그려져 있습니다.)

In [52] : test
Out[52] : array([[0.        , 0.        , 0.        , ..., 0.0603604 , 0.11037167,
        0.        ],
       [0.        , 0.        , 0.        , ..., 0.07735108, 0.13839354,
        0.        ],
       [0.        , 0.        , 0.        , ..., 0.07322919, 0.12958862,
        0.        ],
       ...,
       [0.        , 0.        , 0.        , ..., 0.        , 0.        ,
        0.        ],
       [0.        , 0.        , 0.        , ..., 0.        , 0.        ,
        0.        ],
       [0.        , 0.        , 0.        , ..., 0.        , 0.        ,
        0.        ]], dtype=float32)

(test 데이터는 0.xx 단위로 구성되어 있습니다. 그래프는 아날로그 그래프처럼 되어 있습니다.)

이 두 데이터를 코사인 유사도 방식으로 계산해보려 했지만, 에러가 발생했습니다.

from numpy import dot
from numpy.linalg import norm
cos_sim = dot(train_r, test_r)/(norm(train_r)*norm(test_r))
ValueError: shapes (100,24) and (100,24) not aligned: 24 (dim 1) != 100 (dim 0)

딥러닝 공부를 시작한지 얼마 되지 않아서 자세한 이유를 모르겠지만, 검색을 하다 보니 이게 차원과 관련된 문제라는 점을 발견했습니다. 하지만 이걸 어떻게, 어떤 코드와 어떤 방식을 이용해서 처리해야 할지 고민입니다.

답변해주신다면 정말 감사하겠습니다.

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 문제를 해결했습니다. 간단하게 해결할 수 있는 방법이었습니다.

    train, test에는 한 개의 리스트가 아니라 24개의 리스트가 들어있었습니다. 이 24개의 리스트를 코사인 유사도 방식으로 한꺼번에 계산하려 하니 에러가 발생했습니다.

    에러를 해결하는 방법은 그냥 train_r, test_r 에서 특정 리스트를 지정한 뒤 다른 이름으로 저장하면 됩니다.

    train_c = train_r[:,12]

    test_c = test_r[:,12]

    이렇게 지정한 뒤 코사인 유사도 공식을 이용하여 계산하니 정상적으로 결과가 표시됩니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)