기본 콘텐츠로 건너뛰기

[ML] 결정트리(Decision Tree) 모델

지수와 로그 함수의 미분

내용

지수와 로그 함수의 미분

지수와 로그가 포함된 함수들을 미분합니다. 다음은 로그 함수입니다.

$$\begin{equation} y = \log_ex \; \text{또는} \; \log(x) \end{equation}$$

위 함수 y의 역함수는 지수함수가 됩니다. 지수 급수의 미분은 원래 형태와 같으므로 식 1과 같이 나타낼 수 있습니다.

$$\begin{align}\tag{1} y &=\log_ex \rightarrow e^y=x\\ e^y &=\frac{dx}{dy}\\ \frac{dy}{dx}&=\frac{1}{\frac{dx}{dy}}\\ &=\frac{1}{e^y}\\ &=\frac{1}{x} \end{align}$$

결과적으로 로그함수의 미분은 식 2와 같이 나타낼 수 있습니다.

$$\begin{equation}\tag{2} \frac{d(\log_e x)}{dx}=\frac{dy}{dx}=x^{-1} \end{equation}$$
import numpy as np
import pandas as pd
from sympy import *
import matplotlib.pyplot as plt

예 1)  $\displaystyle y=\log(x+a)$를 미분합니다.

$$\begin{align} x+a&=e^y\\ \frac{d(x+a)}{dy}&=e^y \rightarrow \frac{dx}{dy}=e^y\\ \frac{dy}{dx}&=\frac{1}{e^y}\\ &=\frac{1}{x+a} \end{align}$$
a, x=symbols('a, x')
y=log(x+a)
diff(y, x)
$\quad \small \color{blue}{\frac{1}{a + x}}$

예 2)  $y = \log_{10}x$를 미분합니다.

이 함수는 대수로그입니다. 대수로그를 자연로그로 변환하기 위해 다음 식 1에서 나타낸 로그 규칙을 적용합니다.

$$\begin{equation}\tag{3} \log_ab=\frac{\log_eb}{\log_ea} \end{equation}$$ $$\begin{align} y&=\log_{10}x\\ &=\frac{\log_ex}{\log_e10}\\ &=\frac{1}{\log_e10}\log_ex\\ \frac{dy}{dx}&=\frac{1}{\log_e10}\frac{1}{x} \end{align}$$
a, x=symbols('a, x')
y=log(x, 10)
dy=diff(y, x)
dy
$\quad \small \color{blue}{\frac{1}{x \log{\left(10 \right)}}}$
N(dy, 5)
$\quad \small \color{blue}{\frac{0.43429}{x}}$

지수함수와 유사한 형태이지만 e 대신 다른 수에 대한 x 거듭제곱 형태의 미분에 대해 알아봅니다. 즉, y=ax (a: 상수)형태의 함수로서 위에서 소개한 로그 규칙(식 9)을 적용하여 자연로그로 전환하여 미분 계산을 할 수 있습니다.

$$\begin{align} y&=a^x\\ \log_ey&=x \cdot \log_ea\\ x&=\frac{log_ey}{x \cdot \log_e10}\\ \frac{dx}{dy}&=\frac{1}{\log_ea}\frac{1}{y}\\ &=\frac{1}{\log_ea \cdot a^x}\\ \frac{dy}{dx}&=\log_ea \cdot a^x \end{align}$$
a, x=symbols('a, x')
y=a**x
dy=diff(y, x)
dy
$\quad \small \color{blue}{a^{x} \log{\left(a \right)}}$

예 3)  다음 함수들의 $\displaystyle \frac{dy}{dx}$를 계산하여 봅니다.

(1) $y = e^{-ax}$는 두 가지 방법을 적용할 수 있습니다. $$\begin{align} \text{방법 1}&\\ & \begin{aligned} -ax = z & \rightarrow y = e^z\\ \frac{dy}{dz} = e^z & , \frac{dy}{dx} = -a\\ \therefore& \frac{dy}{dx} = -a·e^{-ax} \end{aligned}\\ \text{방법 2}&\\ &\begin{aligned} \log_ey &= -ax \\ d(\log_ey)dy & = d(-ax)dx\\ \frac{dy}{y} & = -a·dx \\ \frac{dy}{dx} & = -ay \\ & = -a \cdot e^{-ax} \end{aligned} \end{align}$$

a, x=symbols('a, x')
y=exp(-a*x)
dy=diff(y, x)
dy
$\quad \small \color{blue}{- a e^{- a x}}$

(2)$\displaystyle y = e^{\frac{2x}{x+1}}$의 미분

$$\begin{align} \log_ey& =\frac{2x}{x+1}\\ d(\log_ey)dy& =d\left(\frac{2x}{x+1}\right)dx \end{align}$$
a, x=symbols('a, x')
y=exp(2*x/(x+1))
dy=diff(y, x)
dy
$\quad \small \color{blue}{\left(- \frac{2 x}{\left(x + 1\right)^{2}} + \frac{2}{x + 1}\right) e^{\frac{2 x}{x + 1}}}$

(3)$\displaystyle y = e^{\sqrt{x^2+a}}$

위의 함수 중 $\displaystyle \sqrt{x^2+a}$의 미분은 연쇄법칙을 적용합니다.

$$\begin{align} y &= \exp(\sqrt{x^2+a})\\ \log_ey &=\sqrt{x^2+a}\\ d(\log_ey)dy &= d(\sqrt{x^2+a})dx\\ \frac{1}{y}dy&= \frac{2x}{2 \sqrt{x^2+a}}dx\\ \frac{dy}{dx} &= \frac{y}{\sqrt{x(x^2+a)}}\\ &= \frac{x⋅\exp(\sqrt{x^2+a})}{\sqrt{x^2+a}} \end{align}$$
a, x, u=symbols('a, x, u') 
y=exp(u) 
u1=sqrt(x**2+a) 
dydu=diff(y, u) 
dydu
$\quad \small \color{blue}{ e^{u}}$
dudx=diff(u1, x) 
dudx
$\quad \small \color{blue}{\frac{x}{\sqrt{a + x^{2}}}}$
dydx=(dydu)*(dudx) 
dydx
$\quad \small \color{blue}{\frac{x e^{u}}{\sqrt{a + x^{2}}}}$
dydx.subs(u, u1)
$\quad \small \color{blue}{\frac{x e^{\sqrt{a + x^{2}}}}{\sqrt{a + x^{2}}}}$

위 함수를 diff()에 직접 적용할 수 있습니다.

yo=exp(sqrt(x**2+a))
yo.diff(x)
$\quad \small \color{blue}{\frac{x e^{\sqrt{a + x^{2}}}}{\sqrt{a + x^{2}}}}$

(4)$\displaystyle y = \log(a + x^3)$의 미분은 $\displaystyle a + x^3 = u$로 치환하여 실행합니다.

a, x, u=symbols('a, x, u') 
y=log(u) 
u1=a+x**3 
dydu=diff(y, u) 
dydu
$\quad \small \color{blue}{\frac{1}{u}}$
dudx=diff(u1, x) 
dudx
$\quad \small \color{blue}{3x^2}$
dydx=(dydu)*(dudx) 
dydx
$\quad \small \color{blue}{\frac{3x^2}{u}}$
dydx.subs(u, u1)
$\quad \small \color{blue}{\frac{3x^2}{a+x^3}}$
yo=log(a+x**3) 
yo.diff(x)
$\quad \small \color{blue}{\frac{3x^2}{a+x^3}}$

(5)$\displaystyle y = \log(3x^2 +\sqrt{a + x^2})$

위 함수의 미분은 $\displaystyle 3x^2 + \sqrt{a + x^2} = u$로 치환하여 실행합니다.

a, x, u=symbols('a, x, u') 
yo=log(3*x**2+sqrt((a+x**2)))
yo.diff("x")
$\quad \small \color{blue}{\frac{6 x + \frac{x}{\sqrt{a + x^{2}}}}{3 x^{2} + \sqrt{a + x^{2}}}}$
y=log(u)
dydu=y.diff(u)
dydu
$\quad \small \color{blue}{\frac{1}{u}}$
u1=3*x**2+sqrt((a+x**2))
dudx=u1.diff(x)
dudx
$\quad \small \color{blue}{6 x + \frac{x}{\sqrt{a + x^{2}}}}$
dydx=dydu*dudx
dydx
$\quad \small \color{blue}{\frac{6 x + \frac{x}{\sqrt{a + x^{2}}}}{u}}$
dydx.subs(u, u1)
$\quad \small \color{blue}{\frac{6 x + \frac{x}{\sqrt{a + x^{2}}}}{3 x^{2} + \sqrt{a + x^{2}}}}$

(5) $\displaystyle y = (x + 3)^2\sqrt{x - 2}$

위 함수의 미분은 양변에 로그화하여 미분을 실시합니다. 이 함수는 종속 변수 y와 독립 변수 x에 대한 모든 미분을 고려해야 합니다. 즉, 다음과 같은 음함수를 고려해야 합니다.

$$\begin{align} \log(y)&=\log((x+3)^2 \sqrt{x-2})\\ \rightarrow &d(\log(y))dy=d(\log((x+3)^2 \sqrt{x-2}))dx \end{align}$$

음함수 형태의 미분은 sympy 함수 idiff()를 적용합니다. 물론 원함수를 diff()에 적용해도 동일한 결과를 나타냅니다.

a, x, y=symbols('a, x, y')
yo=(x+3)**2*sqrt(x-2)
dyo=yo.diff(x)
simplify(dyo)
$\quad \small \color{blue}{\frac{5 \left(x - 1\right) \left(x + 3\right)}{2 \sqrt{x - 2}}}$
#양변을 로그화하여 미분을 실시 
eq=log(y)-log((x+3)**2*sqrt(x-2))
deq=idiff(eq, y, x)
deq
$\quad \small \color{blue}{\frac{5 y \left(x - 1\right)}{2 \left(x^{2} + x - 6\right)}}$
simplify(deq.subs(y, yo))
$\quad \small \color{blue}{\frac{5 \left(x^{2} + 2 x - 3\right)}{2 \sqrt{x - 2}}}$

(6) $\displaystyle y=\frac{\sqrt{a+x^2}}{\sqrt[3]{x^3-a}}$

함수 y는 분수 형태로 로그화하여 계산할 수 있습니다. 또한 미분의 나눗셈 법칙을 적용할 수 있습니다.

a, x, y=symbols('a, x, y')
yo=sqrt(x**2+a)/(x**3-a)**(Rational('1/3'))
yo
$\quad \small \color{blue}{\frac{\sqrt{a + x^{2}}}{\sqrt[3]{- a + x^{3}}}}$
dyo=yo.diff(x) #원함수의 미분
simplify(dyo)
$\quad \small \color{blue}{- \frac{a x \left(x + 1\right)}{\left(- a + x^{3}\right)^{\frac{4}{3}} \sqrt{a + x^{2}}}}$
eq=log(y)-log(sqrt(x**2+a))+log((x**3-a)**(Rational('1/3')))
eq #원 함수를 로그화
$\quad \small \color{blue}{ \log{\left(y \right)} + \log{\left(\sqrt[3]{- a + x^{3}} \right)} - \log{\left(\sqrt{a + x^{2}} \right)}}$
deq=idiff(eq, y, x)
deq
$\quad \small \color{blue}{\frac{a x y \left(x + 1\right)}{a^{2} - a x^{3} + a x^{2} - x^{5}}}$
deq=deq.subs(y, yo)
simplify(deq)
$\quad \small \color{blue}{\frac{a x \sqrt{a + x^{2}} \left(x + 1\right)}{\sqrt[3]{- a + x^{3}} \left(a^{2} - a x^{3} + a x^{2} - x^{5}\right)}}$

위 결과에 의하면 원래의 함수와 로그화로 변환된 함수의 미분의 형태는 같지 않습니다. 그러나 정의적으로 두 결과는 같아야 합니다. 이를 확인하기 위해 일정한 값을 대응 시켜봅니다.

dyo.subs({a:1, x:3})==deq.subs({a:1, x:3})
True

나눗셈 규칙을 적용합니다.

ynu=numer(yo)
ynu
$\quad \small \color{blue}{\sqrt{a + x^{2}}}$
yde=denom(yo)
yde
$\quad \small \color{blue}{\sqrt[3]{- a + x^{3}}}$
dy=(ynu.diff(x)*(yde)-(ynu*yde.diff(x)))/yde**2
simplify(dy)
$\quad \small \color{blue}{- \frac{a x \left(x + 1\right)}{\left(- a + x^{3}\right)^{\frac{4}{3}} \sqrt{a + x^{2}}}}$

(7) $\displaystyle y=\left( \frac{1}{a^x} \right)^{ax}$

a, x, y=symbols('a, x, y')
yo=(1/a**x)**(a*x)
yo
$\quad \small \color{blue}{(a^{-x})^{ax}}$
dyo=yo.diff(x) #원함수의 미분
dyo
$\quad \small \color{blue}{\left(- a x \log{\left(a \right)} + a \log{\left(a^{- x} \right)}\right) \left(a^{- x}\right)^{a x}}$
eq=log(y)-log((1/a**x)**(a*x))
eq
$\quad \small \color{blue}{\log{\left(y \right)} - \log{\left(\left(a^{- x}\right)^{a x} \right)}}$
deq=idiff(eq, y, x)
deq
$\quad \small \color{blue}{a y \left(- x \log{\left(a \right)} + \log{\left(a^{- x} \right)}\right)}$
deq=deq.subs(y, yo)
deq
$\quad \small \color{blue}{a \left(- x \log{\left(a \right)} + \log{\left(a^{- x} \right)}\right) \left(a^{- x}\right)^{a x}}$

로그 곡선(Logarithmic Curve)

방정식 $y = bp^x$의 그래프를 작성해봅니다. b는 y의 초기값이며 x에 따른 y의 변화는 다음과 같습니다.

b, p, x=symbols('b, p, x')
y=b*p**x
re={}
for i in range(6):
    re[i]=y.subs(x, i)
re
{0: b, 1: b*p, 2: b*p**2, 3: b*p**3, 4: b*p**4, 5: b*p**5}

위 결과를 표의 형태로 나타내면 다음과 같습니다.

x 0 1 2 3 4 5
y b bp $\text{bp}^2$ $\text{bp}^3$ $\text{bp}^4$ $\text{bp}^5$

그림 1은 b=2, p=1.5로 치환한 상태에서 위 코드의 지수함수와 그 함수를 로그화한 경우를 작성한 것입니다. 지수함수의 경우 y 값은 x에 따라 p배 만큼의 변화를 보입니다. 이와 같이 두 개의 연속하는 좌표들이 일정한 비율로 연결된 경우 그 식을 로그화하면 일정한 변화를 보입니다.

plt.figure(dpi=100)
x=np.linspace(0, 6, 100)
y=2*1.5**x
y1=np.log(2)+x*log(1.2)
plt.plot(x, y, label=r"$\mathbf{y=2 \cdot 1.5^x}$")
plt.plot(x, y1, label=r"$\mathbf{\log(y)=\log(2)+ x\log(1.5)}$")
plt.xlabel("x", size=12, weight="bold")
plt.ylabel("y, log(y)", size=12, weight="bold")
plt.legend(loc="best")
plt.grid(True)
plt.show()
그림 1. 지수함수와 그 함수를 로그화한 함수.

결과적으로 지수함수를 로그함수로 전환하면 y축 역시 log(y)로 전환하여 기울기가 상수인 직선의 방정식으로 나타낼 수 있습니다.

댓글

이 블로그의 인기 게시물

[Linear Algebra] 유사변환(Similarity transformation)

유사변환(Similarity transformation) n×n 차원의 정방 행렬 A, B 그리고 가역 행렬 P 사이에 식 1의 관계가 성립하면 행렬 A와 B는 유사행렬(similarity matrix)이 되며 행렬 A를 가역행렬 P와 B로 분해하는 것을 유사 변환(similarity transformation) 이라고 합니다. $$\tag{1} A = PBP^{-1} \Leftrightarrow P^{-1}AP = B $$ 식 2는 식 1의 양변에 B의 고유값을 고려한 것입니다. \begin{align}\tag{식 2} B - \lambda I &= P^{-1}AP – \lambda P^{-1}P\\ &= P^{-1}(AP – \lambda P)\\ &= P^{-1}(A - \lambda I)P \end{align} 식 2의 행렬식은 식 3과 같이 정리됩니다. \begin{align} &\begin{aligned}\textsf{det}(B - \lambda I ) & = \textsf{det}(P^{-1}(AP – \lambda P))\\ &= \textsf{det}(P^{-1}) \textsf{det}((A – \lambda I)) \textsf{det}(P)\\ &= \textsf{det}(P^{-1}) \textsf{det}(P) \textsf{det}((A – \lambda I))\\ &= \textsf{det}(A – \lambda I)\end{aligned}\\ &\begin{aligned}\because \; \textsf{det}(P^{-1}) \textsf{det}(P) &= \textsf{det}(P^{-1}P)\\ &= \textsf{det}(I)\end{aligned}\end{align} 유사행렬의 특성 유사행렬인 두 정방행렬 A와 B는 'A ~ B' 와 같

[matplotlib] 히스토그램(Histogram)

히스토그램(Histogram) 히스토그램은 확률분포의 그래픽적인 표현이며 막대그래프의 종류입니다. 이 그래프가 확률분포와 관계가 있으므로 통계적 요소를 나타내기 위해 많이 사용됩니다. plt.hist(X, bins=10)함수를 사용합니다. x=np.random.randn(1000) plt.hist(x, 10) plt.show() 위 그래프의 y축은 각 구간에 해당하는 갯수이다. 빈도수 대신 확률밀도를 나타내기 위해서는 위 함수의 매개변수 normed=True로 조정하여 나타낼 수 있다. 또한 매개변수 bins의 인수를 숫자로 전달할 수 있지만 리스트 객체로 지정할 수 있다. 막대그래프의 경우와 마찬가지로 각 막대의 폭은 매개변수 width에 의해 조정된다. y=np.linspace(min(x)-1, max(x)+1, 10) y array([-4.48810153, -3.54351935, -2.59893717, -1.65435499, -0.70977282, 0.23480936, 1.17939154, 2.12397372, 3.0685559 , 4.01313807]) plt.hist(x, y, normed=True) plt.show()

R 미분과 적분

내용 expression 미분 2차 미분 mosaic를 사용한 미분 적분 미분과 적분 R에서의 미분과 적분 함수는 expression()함수에 의해 생성된 표현식을 대상으로 합니다. expression expression(문자, 또는 식) 이 표현식의 평가는 eval() 함수에 의해 실행됩니다. > ex1<-expression(1+0:9) > ex1 expression(1 + 0:9) > eval(ex1) [1] 1 2 3 4 5 6 7 8 9 10 > ex2<-expression(u, 2, u+0:9) > ex2 expression(u, 2, u + 0:9) > ex2[1] expression(u) > ex2[2] expression(2) > ex2[3] expression(u + 0:9) > u<-0.9 > eval(ex2[3]) [1] 0.9 1.9 2.9 3.9 4.9 5.9 6.9 7.9 8.9 9.9 미분 D(표현식, 미분 변수) 함수로 미분을 실행합니다. 이 함수의 표현식은 expression() 함수로 생성된 객체이며 미분 변수는 다음 식의 분모의 변수를 의미합니다. $$\frac{d}{d \text{변수}}\text{표현식}$$ 이 함수는 어떤 함수의 미분의 결과를 표현식으로 반환합니다. > D(expression(2*x^3), "x") 2 * (3 * x^2) > eq<-expression(log(x)) > eq expression(log(x)) > D(eq, "x") 1/x > eq2<-expression(a/(1+b*exp(-d*x))); eq2 expression(a/(1 + b * exp(-d * x))) > D(eq2, "x") a * (b * (exp(-d * x) * d))/(1 + b