• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 분석

  • 해결 여부

    미해결

로그 스케일에 대한 질문드립니다.

20.09.02 10:15 작성 조회수 4.01k

1

강의 잘 보고 있습니다

로그 스케일에 대한 궁금증이 생겨 질문 드립니다.

1.

np.log는 자연로그 값을 반환한다고 알고 있습니다. 로그 스케일을 취할 때 자연로그를 취하는 것이 일반적인 관습인가요? 

2. log(x + 1)을 하게 되면 log 그래프를 좌측으로 1 만큼 평행이동해서 log값이 음의 무한으로 수렴하는 것을 막을 수 있다고 하셨는데, -1 보다 큰 마이너스 값이 있는 경우에는 어떻게 대처해야 하나요? 

미리 감사드립니다 ^^

답변 3

·

답변을 작성해보세요.

1

user님의 프로필

user

2020.09.02

흑흑 감사합니다. 너무 친절하셔요

1

안녕하세요. 좋은질문을 주셨네요.

1. 평소에 자연로그를 많이 사용하는 편이라 자연로그를 사용했는데 질문주신것 처럼 자연로그를 취하지 않고 np.log10으로 상용로그를 취해도 되겠다는 생각이 들어요. 다만 두 가지 방법에 대해 스케일이 달라지게 되니 전달하고자 하는 혹은 그래프 안에서 얻고자 하는 내용에 따라 다른 로그기법을 선택하면 될것 같아요.

로그와 관련된 건 아래 문서를 좀 더 참고해 보시면 좋을거 같아요.

[numpy.log — NumPy v1.19 Manual](https://numpy.org/doc/stable/reference/generated/numpy.log.html#numpy.log)

[numpy.log10 — NumPy v1.19 Manual](https://numpy.org/doc/stable/reference/generated/numpy.log10.html)

값의 스케일을 어떻게 줄이느냐에 따라 어떤 로그 방식을 취할지 결정을 하면 될것 같아요.

아래 링크는 "로그 그래프"라는 설명이 있는 위키피디아 로그 설명 링크에요. 이것도 참고해 보세요!

https://ko.wikipedia.org/wiki/%EB%A1%9C%EA%B7%B8

로그 그래프[편집]

로그는 범위를 줄여준다는 점에서 그래프에도 사용한다. 보통 십만이나 백만 단위의 그래프를 알기 쉽게 보여주기 위해 로그 그래프를 사용한다. 보통 수직 축에 로그 단위를 넣으나, 수평 축에만 혹은 둘 다 넣는 경우도 있다. 로그 그래프는 1부터 1000까지 증가하는 모습과 1000부터 백만까지 증가하는 모습을 동일한 거리 내에서 나타낼 수 있다는 점이다. y축이 로그인 수직 평면에서, 지수함수 f(x)= abx는 일반 평면에서의 일차함수와 같이 직선 형태를 나타낸다.

2. 로그는 지수함수의 역함수이기 때문에 음수에는 사용할 수가 없습니다. 그래서 음수에 사용하게 되면 다음과 같이 결측치가 반환되게 됩니다.

np.log10([1e-15, -3.])
array([-15.,  nan])
np.log([1, np.e, np.e**2, 0])
array([  0.,   1.,   2., -Inf])

하지만 음수 값에 스케일링을 적용하고 싶다면 가장 작은 값을 더해주는 방법이 있습니다.

np.log1p 도 로그가 1 이하의 값에서 -Inf (마이너스 무한대)로 수렴하는 것을 방지해 주게 됩니다.

https://numpy.org/doc/stable/reference/generated/numpy.log1p.html

그래서 가장 작은 마이너스 값이 -13 이라면 모든 데이터에 0 이상의 값이 나오도록 + 14 를 해주는 방법이 있을거 같습니다.

판다스의 Series 데이터에 + 값 을 해주시면 쉽게 더해볼 수 있습니다.

이 외에 오일러의 등식 등을 사용해 볼 수 있습니다. 오일러의 등식은 직접 찾아보시면 좋을 거 같습니다.

3. 그리고 그래프의 스케일을 줄이는 것 외에 보통 Scaling을 할 때 histogram 등의 분포를 그리고 그 분포가 한쪽으로 너무 치우쳐져 있을 때 정규분포를 이루도록 변환을 해줄 때도 log변환을 사용합니다. 이건 왜도, 첨도를 함께 알아보시면 좋을거 같아요.

감사합니다.

0

감사합니다 :)