22.11.08 14:59 작성
·
384
0
자료에서 IDF 값을 구하는 방식이 궁금해서요.
자료를 다운받으면 IDF를 구하는 식이
import numpy as np
D = len(tf)
idf = np.log((D+1) / (df+1)) +1
로 나와있는데 이 전에 df를 구하는 식이 먼저 나와야 하지 않나요?
공식 자체에 대한 질문입니다.
idf = np.log((D+1) / (df+1)) +1
자료에 라고 제시되고
강의에서는 idf 값이랑 보정하는 걸 강의에서 설명해주셨습니다
그런데 이게 어떻게 나온 식인지 이해가 안 됩니다.
보정으로 취하신 것 같은데
np값은 무엇인가요?
그리고 df와 D에 각각 1을 더해주는 이유는 무엇인가요?
맨 마지막에 1을 더한 이유는 무엇인가요?
tfidf에 대한 질문입니다.
tfidf = tf * idf 인데
tfidf = tfidf / np.linalg.norm(tfidf, axis=1, keepdims=True)
이렇게 한번 더 계산하신 까닭도 있을까요???
강의로 많이 배웁니다
감사합니다!!
np.linalg.norm(tfidf, axis=1, keepdims=True)
감사합니다..!
답변 1
0
2022. 11. 08. 15:25
안녕하십니까, 인사이저입니다.
문의에 답변드리겠습니다.
1)
먼저 저희가 코드 파일을 다운로드하여 확인하였을 때는 df를 구하는 코드가 포함되어 있었습니다.
아래 스크린샷을 참고하여 입력하시거나, 다시 파일을 다운로드하여 확인해보시기 바랍니다.
2)
먼저 np는 numpy 모듈의 약어입니다.
(import numpy as np 의 의미는 numpy 라이브러리를 np라는 명칭으로 사용한다는 의미입니다)
그리고 numpy에서 제공해주는 numpy.log(np.log) 함수는, numpy array(혹은 pandas series)안의 값들에 log를 적용하는 기능으로, 강의 설명에서 들으신 것 처럼 보정을 위해 넣어주었습니다.
numpy.log()는 밑이 자연상수인 로그로서 적용되는 함수이며, 각각 밑이 2거나 10(상용로그)인 케이스를 적용하고 싶으시다면 numpy.log2(), numpy.log10()을 적용하시면 되겠습니다.
그리고 +1의 값을 적용한 이유는 주로 계산상 오류를 방지하기 위함으로 아래와 같습니다.
2-1) 0으로 나누게 되어 발생하는 zero division error를 방지 하기 위함
2-2) 향후 tf*idf 계산 시 idf가 0이되어, tf의 정보가 누락할 가능성을 방지하기 위함
상기의 보정 방식(각 값에 +1, 밑이 자연상수인 로그 적용)은 따로 정답이 정해져있지 않은 바,
상황에 맞춰 적용하시면 되겠습니다.
추가로 궁금하신 점 있으면 언제든 문의 주시기 바랍니다.
감사합니다.
참고 포스트
numpy log
https://cosmosproject.tistory.com/429
tf-idf