기본 콘텐츠로 건너뛰기

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

고계도 미분

내용

고계도 미분

고계도 함수(higher order function)를 함수를 여러 번 미분하는 것을 고계도 미분이라고 합니다. 함수 $y = x^5$를 여러 번 미분해 봅니다.

[첫번째 미분]
$ \displaystyle y'=\frac{dy}{dx}=5x^4$
[두번째 미분]
$\displaystyle y''=\frac{d^2y}{dx^2}=5\cdot4 x^3=20x^3$
[세번째 미분]
$\displaystyle y'''=\frac{d^3y}{dx^3}=5\cdot 4 \cdot 3 x^2=60x^2$
[네번째 미분]
$\displaystyle y^{(4)}=\frac{d^4y}{dx^4}=5\cdot 4 \cdot 3 \cdot 2 x^3=120x$
[다섯번째 미분]
$\displaystyle y^{(5)}=\frac{d^5y}{dx^5}=5\cdot 4 \cdot 3 \cdot 2 x^3=120$
[여섯째 미분]
$\displaystyle y^{(6)}=\frac{d^6y}{dx^6}=0$

위의 식 y = x5는 독립변수 x에 대한 종속변수 y의 함수입니다. 일반적으로 함수는 φ(), f() 등으로 나타냅니다. 그러므로 다음과 같이 표현할 수 있습니다.

$$f(x)=x^n$$

x에 관한 y의 미분을 나타내는 $\frac{dy}{dx}$는 f′(x)와 같이 나타낼 수 있습니다. 위의 표에서 나타낸 다중의 미분의 표현 역시 f()를 사용하여 나타낼 수 있습니다.(식 1)

$$\begin{align} \tag{1} &\frac{dy}{dx}=f'(x)=nx^{n-1}\\ &\frac{d}{dx}\left(\frac{dy}{dx}\right)=\frac{d^2y}{dx^2}=f'(x)=n(n-1)x^{n-2}\\ &\frac{dy}{dx}\left(\frac{d^2y}{dx^2}\right)=\frac{d^3}{dx^3}=f'''(x)=n(n-1)(n-2)x^{n-3}\\ &\qquad \vdots \end{align}$$

4차 미분 이상에서는 함수 기호 f의 위첨자에 `(숫자)'를 첨가하는 형태로 나타냅니다.

import numpy as np
import pandas as pd
from sympy import *

예 1)
 다음 함수에 대해 최종 미분 값이 0이 될 때까지 고계도 미분을 계산해 봅시다.

$$y = 7 x^{4} + \frac{7 x^{3}}{2} - \frac{x^{2}}{2} + x - 2$$
x=symbols("x")
f=7*x**4+Rational('7/2')*x**3-Rational('1/2')*x**2+x-2
f
$\quad \small \color{blue}{7 x^{4} + \frac{7 x^{3}}{2} - \frac{x^{2}}{2} + x - 2}$
d1f=f.diff(x)
d1f
$\quad \small \color{blue}{28 x^{3} + \frac{21 x^{2}}{2} - x + 1}$
d2f=f.diff(x, 2)
d2f
$\quad \small \color{blue}{ 84 x^{2} + 21 x - 1}$
d3f=f.diff(x, 3)
d3f
$\quad \small \color{blue}{21(8x+1)}$
d4f=f.diff(x, 4)
d4f
$\quad \small \color{blue}{168}$
d5f=f.diff(x, 5)
d5f
$\quad \small \color{blue}{0}$

고계도미분의 적용

시간이 독립 변수로 작용하는 문제들은 미적분이 적용되는 중요한 분야로 예를 들어 시간이 변할 때 변하는 어떠한 양에 대한 값을 찾는 문제를 고려할 수 있습니다. 어떤 양은 시간에 따라 증가하지만 감소하는 양도 존재합니다. 기차는 시간에 따라 출발지에서 멀어지지만 도착 지점에는 가까워지는 예를 생각할 수 있지요.

시간과 관계된 경우에서 비율(rate)은 어떤 일이 일어나는 시간의 길이 당 일어나는 일의 양에 대한 비를 의미합니다. 예를 들어 초당 1m를 이동하는 것은 분당 60m를 이동하는 것과 같지만 초와 분이 같지는 않습니다. 이러한 비율을 속도라고 하는데 두 속도가 같다는 것은 통과한 거리에 대한 소요되는 시간의 비율이 동일하다는 것을 의미합니다.

다른 예로 어떤 사람이 초당 10원을 사용한다고 하면 분당 600원 시간 당 36000원 그리고 하루에 864000을 사용할 수 있다고 할수 있습니다. 이 비율을 미분으로 나타내 볼 수 있습니다. 소비하는 돈을 y, 시간을 t라고 하면 매우 짧은 시간 당 소비하는 돈의 비율은 $\frac{dy}{dt}$이며 이것은 소비하는 사람에게서 감소하는 것이므로 $-\frac{dy}{dt}$로 나타낼 수 있습니다. 그러나 돈의 사용은 연속적이 될 수 없기 때문에 미분으로 나타내기에 좋은 예가 아닙니다. 보다 적합한 예로 일정한 거리를 움직이는 기차의 속도를 고려할 수 있습니다.

400km를 가는데 4시간이 걸리는 기차의 속도는 $\frac{400km}{4 hr} = 100\frac{km}{hr}$으로 평균 속도는 100km/hr의 비율로 나타낼 수 있습니다. 실제로 기차는 출발 시점이나 도착 시점의 속도는 느릴 것이며 중간 어느 부분에서는 이 평균 속도 보다 클 것입니다. 그러므로 위에서 계산한 평균 속도는 측정 시간 간격이 작아질수록 속도 변화를 보다 정확히 나타낼 수 있습니다. 수학적으로 나타내는 미분 $\frac{dy}{dt}$는 아주 작은 시간 간격에 작은 거리를 다루며 다음과 같이 나타냅니다.

$$v=\frac{dy}{dt}$$

속도가 일정하지 않고 증가하거나 감소할 경우를 가속도(a)라고 하며 속도에 대한 비율로서 다음과 같이 나타낼 수 있습니다.

$$\begin{align} v&=\frac{dy}{dt}\\ a&=\frac{dv}{dt}\\&=\frac{d}{dt}\left(\frac{dy}{dt}\right)\\&=\frac{d^2y}{dt^2} \end{align}$$

즉, 가속도는 시간에 대한 거리의 두 번째 미분 계수로서 $\frac{\text{distance}}{\text{time}^2}$의 단위를 갖습니다. 기차가 출발하기 위해 움직일 경우 v는 매우 작을 것이지만 그 속도는 계속 증가할 것입니다. 그러므로 가속도 $\frac{d^2y}{dt^2}$는 양(positive)의 값이 될 것입니다. 기차가 정차 또는 도착 시 가속도는 0이 될 때까지 감소할 것입니다. 즉, 음(negative)의 값을 가질 것입니다.

다른 예로 어떠한 물체에 가해지는 힘은 그 물체의 질량에 가속도를 곱하는 것으로 계산됩니다. 즉, 질량을 가속하는 데 필요한 힘은 질량에 비례하며 전달되는 가속도에도 비례합니다. 따라서 힘(f)는 다음과 같이 나타낼 수 있습니다.

$$\begin{align} f&=ma\\&=m\frac{dv}{dt}\\&=m\frac{d^2y}{dt^2} \end{align}$$

위 식에서 v는 속도, y는 이동 거리를 나타냅니다.

이동 속도에 의한 질량의 곱을 운동량(momentum)이라 하며 질량과 속도의 곱 (mv)으로 계산됩니다. 시간에 대해 운동량을 미분은 즉, 운동량 변화율은 $\frac{d(mv)}{dt}$를 얻을 수 있습니다. 질량은 상수이므로 힘 f는 위의 식과 같이 $m\frac{dv}{dt}$이 됩니다. 결과적으로 힘은 질량과 가속도의 곱 또는 운동량의 변화량으로 나타낼 수 있습니다.

어떠한 물체에 힘이 가해지고 움직인다면 그 물체에 투여되는 일(work, w)의 양을 계산할 수 있습니다. 그 물체가 움직이는 거리를 y라 한다면 일(w)은 다음과 같이 계산됩니다.

$$w = f⋅y$$

위 식에서 f를 상수로 고려하면 일 w에 관계된 인수는 y로서 이동 거리의 차이로 일의 변화를 계산할 수 있습니다. dw=f⋅dy 이 식을 다음과 같이 전개할 수 있습니다.

$$\begin{align} dw&=f \cdot dy\\&=ma \cdot dy\\&=m\frac{d^2y}{dt^2}dy\\&=m\frac{dv}{dt}dy\\ \frac{dw}{dy}&=f \end{align}$$

위 식으로부터 어떤 방향으로든 변위를 생성하는 데 사용되는 경우 힘(해당 방향으로)은 해당 방향의 단위 길이 당 작업이 수행되는 일과 같습니다. 이것은 시간의 의미가 아닌 비율입니다.

위에서 설명한 시간에 따른 함수에 대한 고차 미분과 비율에 대한 몇 가지 예들을 살펴보겠습니다.

예 2)
  다음 식은 특정 지점 O에서 물체의 이동 거리와 시간의 관계식입니다. 이 식에서 t는 특정 순간 이후 경과 된 시간 (초)입니다.

$$x=0.2t^2+10.4$$

5 초 후의 속도와 가속도를 찾고, 주행 거리가 100m 일 때 해당 값을 찾습니다. 또한 처음 10 초 동안 평균 속도를 계산합니다.

t=symbols('t', positive=True)
x=0.2*t**2+10.4
#속도 (dx/dt)
v=diff(x, t)
v
0.4t
a=diff(v, t)
N(a, 2)
0.4
#t=5에서의 속도 
v_5=v.subs(t, 5)
N(v_5, 2)
2.0
#x=100m 이동에 걸린 시간과 속도 
t_100m=solve(x-100, t)
round(t_100m[0], 3)
21.166
N(v.subs(t, t_100m[0]), 3)
8.47
#10초동안 평균거리
x_10=x.subs(t, 10)-10.4
N(x_10, 3)
20.0
#그 거리에서 평균속도
#최초 v=0일 때의 시간을 고려하면 t=0
#t=0에서의 거리는 10.4이므로 다음과 같이 계산 
v_mean=x_10/10
N(v_mean, 2)
2.0

예 3)
 관계식이 다음과 같을 경우 예제 2를을 다시 계산합니다.

$$x = 0.2t^2 + 3t + 10.4$$
t=symbols('t')
x=0.2*t**2+3*t+10.4
#속도(시간에 따른 변수) 
v=diff(x, t)
v
0.4t+3
#가속도 
a=diff(v, t)
N(a, 2)
0.4
#t=0, v0
v0=v.subs(t, 0)
v0
3

위 결과에 의하면 시간은 특정 지점 O로부터 10.4m가 떨어진 지점을 통과한 순간부터 계산되며 그 시점에서의 속도는 이미 3 m/sec입니다. 움직인 이후에 경과한 시간은 다음과 같습니다.

#v=0
t_start=solve(v, t)
round(t_start[0], 3)
−7.5

즉, 움직이기 전에 이미 7.5초가 지나간 것입니다. 그러므로 특정 순간이 5초라는 것은 움직이기 전 2.5초라는 것을 의미합니다.

#t=5
v5=v.subs(t, -2.5)
N(v5, 3)
2.0

x = 100m일 때의 시간과 속도는 다음과 같습니다.

t_x100=[i for i in solve(Eq(x, 100), t) if i>0]
round(t_x100[0], 3)
14.956
N(v.subs(t, t_x100[0]), 3)
8.98

최초 10초 동안 이동한 거리는 움직임이 시작될 때의 위치와 시간을 고려해야 합니다. 움직임이 시작된 시점은 이미 7.5초가 지난 상태이므로 나머지 그 시간의 이동 거리와 2.5초 동안의 거리를 따로 계산합니다.

#t=-7.5
x7_5=x.subs(t, -7.5)
N(x7_5, 3)
−0.85
#t=2.5
x2_5=x.subs(t, 2.5)
N(x2_5, 4)
19.15

위 결과 -0.850는 역방향에서의 위치이므로 총 이동 거리는 두 값의 차이입니다.

total=x2_5-x7_5
round(total, 2)
20.0
v_aver=total/10
round(v_aver, 2)
2.0

예 4)
  위치 $x = 0.2t^3 - 3t^2 + 10.4$에서 속도와 가속도는 각각 $v = 0.6t^2 -6t,\; a = 1.2t- 6$이므로 가속도는 상수가 아닙니다. t = 0에서 v, a를 계산합니다.

t=symbols('t')
x=0.2*t**3-3*t**2+10.4
v=diff(x, t)
v
0.6t2−6t
a=diff(v, t)
N(a, 2)
1.2t−6.0
v_t0=v.subs(t, 0)
v_t0
0
a_t0=a.subs(t, 0)
a_t0
−6

정지되어 있지만 음의 가속도로 움직일 준비가되어 있습니다. 즉, 점 O를 향한 속도를 얻습니다.

댓글

이 블로그의 인기 게시물

[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