기본 콘텐츠로 건너뛰기

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

미적분의 기본 용어

내용

기본 용어 정의

미적분을 시작하는 과정에 처음으로 만나는 장벽은 사용되는 기호에서 기인하는 경우가 많습니다. 그러므로 미적분에서 필수적으로 사용되는 몇몇의 용어를 소개합니다.

  • d 는 단지 '조금' 또는 '약간'을 의미합니다. 이 의미가 좀 모호하기는 하지만 전체에서 아주 작은 부분, 좀더 정확히는 무한히 작은 부분을 나타내기 위해 사용합니다. 그러므로 dx는 x의 조금, du는 u의 조금이라는 의미입니다.
  • $\mathbf{\int}$(integral)은 합계 sum의 첫 글자인 s를 길게 늘어뜨린 형태입니다. 그러므로 $\int\, dx$는 x의 작은 부분들의 합을 의미합니다. 이것을 적분이라고 합니다. 예로서 1시간은 3600초의 합입니다. 적분기호를 사용하면 다음과 같이 나타낼 수 있습니다. $$\int \text{sec} = \int ds = \text{hour}$$

'작음' 또는 '조금'을 나타내는 d는 상대적입니다. 예를 들어 1시간은 60분으로 구성되며 1시간에 비해 1분은 작은양입니다. 그러나 그보다 1초는 더 작은 양이 됩니다. 어떤 부분에서는 '작다'보다는 '미세하다'라고 나타낼 수 있습니다.

상수와 변수

미적분학에서 모든 수는 상수(constant)변수(variable)로 구분합니다. 예를 들어 갓 태어난 아기의 신장이 50cm이고 이후 아기의 성장을 기록한다고 해봅니다. 이 경우 50은 변할 수 없는 수인 상수가 되며 지속적인 성장에 의해 50에 첨가되는 수는 계속 변할 것입니다. 이렇게 지속적으로 변하는 수를 변수라고 합니다.

수학에서 수는 알파벳을 기호화하여 사용합니다. 위의 예에서 상수인 50을 a로 하고 이 값에 더해지는 변수를 x로 하여 다음과 같이 나타냅니다.

$$\text{height} =a+x$$

미적분학에서는 일반적으로 상수는 a, b, c 등과 같이 알파벳 첫자부터 사용하며 변수는 x, y, z등과 같이 마지막 부분에 있는 알파벳을 적용합니다.

함수, 변화율, 그리고 미분

위에서 정의한 변수는 다른 변수에 의존되어 변할 수 있습니다. 예를 들어 위에서 언급한 아기의 신장에서 변수는 시간, 영양 상태 등의 다른 변수들에 의존됩니다. 시간과 영양 상태 등을 다른 변수 기호 t, N 등으로 나타낸다면 위의 식은 다음과 같이 나타낼 수 있습니다.

$$\text{height} =a+x=a+(t, N,\cdots)$$

사실 위 표현에서 (t, N,...)는 여러 변수의 관계를 의미합니다.

그림 1은 밑면 x와 높이 y이고 한쪽이 30°의 사잇각을 가진 직각삼각형을 나타낸 것입니다. 이 삼각형에서 서로 의존하는 두 개의 변수 x, y를 생각해 봅시다. 두 변수 중에 변수 x를 변화시키면 y 역시 그 변화에 따라 달라질 것입니다. 예를 들어 x에 dx(x의 약간)를 첨가하면 y 역시 dy 만큼 변경될 것입니다. 물론 dx, dy는 양수 뿐만 아니라 음수가 될 수 있겠지요.

그림 1. 직각 삼각형의 밑면과 높이의 관계.

삼각형이 30°의 사잇각을 유지하면서 확장된다고 가정하고 밑변이 x + dx가 될 정도로 커지면 높이가 y + dy가 됩니다. 여기서 x를 늘리면 y가 증가합니다. 높이가 dy이고 밑이 dx인 작은 삼각형은 원래 삼각형과 비슷합니다. 그리고 두 비율 $\displaystyle \frac{dy}{dx}$와 $\displaystyle \frac{y}{x}$는 동일할 것입니다. 각도가 30°이므로 다음과 같이 나타낼 수 있습니다.

$$\frac{dy}{dx}=\frac{1}{1.73} \to \tan(30)=\frac{dy}{dx}$$

다음은 위 값을 계산하기 위한 코드입니다. 이 코드에서는 사용된 round(값, 자릿수) 함수는 값을 지정한 자릿수까지 반올림하여 반환합니다. 또한 tan(라디안)는 numpy 모듈의 함수로 tan값을 계산하여 반환합니다. 그러나 전달하는 값은 각도가 아닌 라디안(radian) 값이어야 하므로 30°를 라디안으로 전환하기 위해 numpy 모듈 함수인 deg2rad()를 적용하였습니다.

import numpy as np
import pandas as pd
from sympy import *
import matplotlib.pyplot as plt
round(1/1.73, 2)
0.58
round(tan(np.deg2rad(30)),2)
0.58

다른 예로 그림 2는 벽에 기대어 있는 길이 $\overline{AB}$의 사다리를 나타낸 것입니다. 변수 x는 벽으로부터 A까지의 수평 거리 $\overline{OA}$, y는 벽에 닿는 높이 $\overline{OB}$를 나타냅니다. 이러한 상태에서 사다리를 움직일 경우 y는 분명히 x에 의존합니다. 즉, 하단 A를 벽에서 조금 더 당기면 상단 B가 약간 아래로 내려 오는 것을 알 수 있습니다.

그림 2. x, y 축에 기대어 있는 사다리 모습
$x\rightarrow x+dx, \; y \rightarrow y-dy$

하단 A가 벽에서 19cm 떨어져 있을 때 상단 B가 면에서 180cm인 경우 하단 A를 1cm 더 빼면 상단 B는 얼마나 내려갈까요?

이 상황에서 x, y는 각각 19, 180이 되며 x의 증분은 1cm가 됩니다. 이 증분을 dx라고 하며 전체 길이 x+dx = 19+1 = 20 cm가 됩니다. x, y의 길이의 변화에도 불구하고 AB의 길이는 변함이 없습니다. 그러므로 피타고라스 정리를 적용하여 y의 변화 즉, dy를 계산할 수 있습니다.

$$\begin{align}\overline{AB}&=\sqrt{x^2+y^2}\\ &=\sqrt{(x+dx)^2+(y+dy)^2}\\ \sqrt{19^2+181^2}&=181\\ \sqrt{20^2+(180+dy)^2}&=181\\ dy &\approx -0.11 \end{align}$$

위 과정을 코드화하기 위해서 x, y를 기호화하여 관계를 정립할 필요가 있습니다. 이러한 경우 기호를 지정하여 숫자로 치환을 가능하게 하는 파이썬의 sympy 라이브러리를 사용합니다. 그 과정은 다음과 같습니다.

  • 변수(x, y)와 기호(dx, dy)를 symbols()함수를 사용하여 지정
  • $\overline{AB}$를 위한 식을 생성(z)
  • x=1.9, y=180에서의 $overline{AB}$길이 산출(z)
  • 이 계산을 위해서 subs()메서드를 사용합니다.
  • $\sqrt{(x + dx)^2 + (y + dy)^2 − z^2} = 0$ 의 식을 생성(eq)
    $\qquad$ 위 식과 같이 한쪽이 0인 식을 동차식(homogeneous equation)이라고 합니다.
  • 동차식에서 지정한 변수의 해를 계산하기 위해 solveset()함수를 적용합니다.
x, y, dx, dy=symbols("x, y, dx, dy", real=True)
z=sqrt(x**2+y**2)
z
$\quad \small{\color{blue}{\sqrt{x^{2} + y^{2}}}}$
z1=z.subs([(x, 19), (y, 180)])
print(z1)
181
eq=sqrt((x+dx)**2+(y+dy)**2-z1**2)
eq1=eq.subs([(x, 19),(dx, 1),(y,180)])
eq1
$\quad \small{\color{blue}{\sqrt{\left(dy + 180\right)^{2} - 32361}}}$
sol=solveset(eq1, dy, Interval(-180, 180))
sol
$\quad \small{\color{blue}{\left\{-180 + \sqrt{32361}\right\}}}$
x=[N(i, 3) for i in N(sol)] #(1)
x
[-0.108]

위 예들로부터 특정 위치를 제외하고 dy와 dx는 다른 크기이며 그 값들의 변화는 dx, dy의 비율로 나타냄을 알 수 있습니다. 또한 두 변수 y와 x가 서로 관련이 있을 경우만 $\frac{dy}{dx}$의 비율을 찾을 수 있음을 알수 있습니다. 예를 들어 위 첫 번째 예에서 dy와 dx의 비는 tan(30°)으로 고정되고 두 번째 예의 경우는 $\overline{AB}$의 값이 고정된 상태이므로 dx, dy 중 하나의 변화에 대한 다른 변수의 변화를 찾아낼 수 있습니다. 길이가 길어지면 y는 감소하며 그 관계를 비율로 나타낼 수 있는 것입니다. 이러한 변수들의 관계를 정의한 식을 함수(function)라고 합니다.

그림 2의 경우 $\overline{AB}$를 상수 a로 나타낸다면 두 변수 x, y에 대한 식 $a^2=x^2+y^2$은 다음과 같이 두 가지 형식으로 나타낼 수 있습니다.

  • $y=\sqrt{a^2-x^2}$: 양함수(Explicit Function)
  • $x^2+y^2-a^2=0$: 음함수(Implicit Function)

위 식에서 y는 x에 의해 결정되므로 x를 독립변수(independent variable), y를 종속변수(independent variable)로 간주합니다. 위에서 나타낸 것과 같이 독립변수와 종속변수가 등호('=')를 기준으로 분리하여 나태낸 함수를 양함수(explicit function)라고 합니다. 반면에 독립변수와 종속변수의 분리 없이 함께 나타낸 함수를 음함수(implicit function)라고 합니다.

일반적으로 함수는 F(), f(), φ()등과 같이 다양한 기호로 나타낼 수 있으며 이 경우 양함수와 음함수는 다음과 같이 표시됩니다.

양함수와 음함수
  • y=F(x, a) 또는 x=F(y, a) : 양함수(explicit function)
  • F(x, y, a)=0 : 음함수(implicit function)

위 예로부터 산출된 두 변수의 비율 $\frac{dy}{dx}$를 x에 관한 y의 미분계수라고 합니다. 또한 이 미분계수를 산출하는 과정을 미분(differentiating)이라 합니다. 다시 말하면 미분의 결과는 극소 구간에서의 두 변수의 비율이 됩니다.

댓글

이 블로그의 인기 게시물

[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