기본 콘텐츠로 건너뛰기

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

극한(Limit)의 개념

내용

  1. 접선과 외선
  2. 극한(limit)

1. 접선과 외선

한 점 x에서의 함수 f(x)의 접선(tangent line)은 그 점에서 함수의 그래프를 스쳐지나가는 직선으로 그 점과 평행입니다.

그림 1.

위 그림에서 직선 y는 곡선 f(x)위의 점 A(0.3, f(0.3))에 대한 접선입니다. 이 접선은 곡선의 다른 점 B를 통과합니다. 이와같이 어떤 점의 접선이 동일한 함수의 다른 점과 교점을 이루는 선을 외선(scant line)이라고 합니다. 위의 경우 직선 y의 식은 접점(점A)과 외선을 이루는 점B를 알 수 있으므로 쉽게 계산할 수 있습니다.

예 1)
  x=1에서 $f(x)=15-2x^2$의 접선?

그림 2.

위 그림에서 f(x) 위의 접점 A를 지나는 접선 a의 식을 계산하기 위해서는 a를 지나는 다른 점을 알거나 그 직선의 기울기를 알아야 합니다. 위 그림에서는 두 가지 모두 미지수입니다. 그러나 함수 f(x)위의 두 점 A와 B를 지나는 직선을 계산할 수 있습니다. 이 직선을 이용하여 접선을 추정할 수 있습니다.

위 그림에서 b의 기울기는 다음과 같이 계산할 수 있습니다.

$$\frac{f(0.5)-f(1.32)}{0.5-1.32}$$
import numpy as np
import pandas as pd
from sympy import *
x=symbols("x")
f=5-2*x**2
s1=(f.subs(x,0.5)-f.subs(x, 1.32))/(0.5-1.32)
N(s1, 2)
−3.6

그림 2의 점 B가 점 A쪽으로 근접할수록 직선 b는 직선 a와 근사해질 것입니다.(그림 3)

A로 수렴하는 여러 점들에 대한 기울기를 계산하면 다음과 같습니다.

x_p=np.linspace(0.51, 1, 5)
np.around(x_p, 2)
array([0.51, 0.63, 0.76, 0.88, 1.  ])
slope=[]
bias=[]
for j, i in enumerate(x_p):
    slope.append((f.subs(x, 0.5)- f.subs(x, i))/(0.5-i))
    bias.append(f.subs(x, i)-slope[j]*i)
equ=np.array([x_p, slope, bias], dtype=np.float64).T
np.around(equ, 3)
array([[ 0.51 , -2.02 , 15.51 ],
       [ 0.633, -2.265, 15.633],
       [ 0.755, -2.51 , 15.755],
       [ 0.878, -2.755, 15.878],
       [ 1.   , -3.   , 16.   ]])
rng=np.linspace(0, 1, 100)
plt.figure(figsize=(10, 7))
plt.plot(rng, [f.subs(x, i) for i in rng], color="red")
plt.scatter(0.5, f.subs(x, 0.5), color="red")
plt.plot()
for k, i,j in equ:
    plt.plot(rng, i*rng+j, linestyle="--", label=f"solpe={round(i,3)}")
    plt.scatter(k, f.subs(x, k))
plt.legend(loc="best")
plt.show()
그림 3.

그림 3과 같이 좌표가 A에 수렴할 수록 기울기는 -2에 수렴됩니다. 그러므로 점 A의 접선의 기울기는 -2라고 추정할 수 있습니다. 즉, 어떤 점 P(a, f(a))에 대한 접선은 그 점에 근접한 점 Q(x, f(x)=y)와의 선으로부터 추정할 수 있습니다. P와 Q사이에 직선은 식 1과 같이 표현할 수 있습니다.

$$\begin{equation}\tag{1}m=\frac{y-f(a)}{x-a} \rightarrow y=f(a)+m(x-a) \qquad \end{equation}$$

2. 극한(limit)

식 1에서 적절한 기울기의 추정은 그림 4와 같이 나타낼 수 있습니다.

그림 4.

즉, 그림 4와 같이 점 a로 접근하는 점들은 a와 차이 h로 나타낼 수 있습니다. h의 부호에 따라 접근 방향의 차이를 보이지만 결국 h의 절대값이 작아질수록 점 a로 접근하며 그 두 점 사이의 직선은 점 a에서의 접선에 접근할 것입니다. 이 관계는 다음 식으로 표현됩니다.

$$\begin{equation}\tag{2}\frac{f(x)-f(a)}{x-a}= \frac{f(a+h)-f(a)}{a+h-a}=\frac{f(a+h)-f(a)}{h}\end{equation}$$

식 2를 일반화하기 위해 특정한 값 a를 변수 x로 치환하면 어떤 점에 대한 접선의 기울기에 대한 식 3의 공식으로 나타낼 수 있습니다.

$$\begin{equation}\tag{3}\frac{f(x+h)-f(x)}{h}\end{equation}$$

식 3을 보다 정확하게 표현하면 h가 0에 접근할수록 정확한 접선의 기울기에 접근합니다. 그러므로 식 4와 같이 나타냅니다.

$$\begin{equation}\tag{4}\lim_{h \to 0} \frac{f(x+h)-f(x)}{h} =l\end{equation}$$

식 4의 표현을 극한(limit)이라고 합니다. 즉, x=h에서의 극한값은 l이라고 합니다.

예 2)
  다음 극한의 표현을 봅시다.

1. $$1. \lim_{x \to 1} \frac{2-2x^2}{x-1} $$

위 식은 $f(x) = 2x^2$ 함수가 x=1인 점과 그에 근접한 점사이의 기울기를 의미합니다.

f=(2-2*x**2)/(x-1)
rng=np.linspace(0.95, 1.05, 10)
slope=np.array([[i, f.subs(x, i)] for i in rng], dtype=np.float32)
np.around(slope, 3)
array([[ 0.95 , -3.9  ],
       [ 0.961, -3.922],
       [ 0.972, -3.944],
       [ 0.983, -3.967],
       [ 0.994, -3.989],
       [ 1.006, -4.011],
       [ 1.017, -4.033],
       [ 1.028, -4.056],
       [ 1.039, -4.078],
       [ 1.05 , -4.1  ]], dtype=float32)

x가 1에 근접하면 결과는 -4와 가까워짐을 알수 있습니다. 그러므로 다음과 같이 나타낼 수 있습니다.

$$\lim_{x \to 1} \frac{2-2x^2}{x-1}=-4$$

위와 같은 계산은 python의 모듈 sympy의 limit(함수, 변수, 접근값)에 의해 계산할 수 있습니다.

limit(f, x, 1)
−4
$$\begin{align} 2.\; f(t) &= t^3-6t^2+30, \quad t=5\\ & \lim_{t \to 5} \frac{f(t)-f(5)}{t-5} \end{align}$$
t=symbols("t")
f=t**3-6*t**2+30
rng=np.linspace(4.9, 5.1, 10)
slope=np.array([[i, f.subs(t, i)] for i in rng], dtype=np.float32)
np.around(slope, 3)
array([[4.9  , 3.589],
       [4.922, 3.887],
       [4.944, 4.194],
       [4.967, 4.51 ],
       [4.989, 4.834],
       [5.011, 5.168],
       [5.033, 5.51 ],
       [5.056, 5.861],
       [5.078, 6.222],
       [5.1  , 6.591]], dtype=float32)
limit(f, t, 5)
5

위 계산 결과에 의하면 x가 5에 근접할수록 결과는 5에 수렴됩니다. 그러므로 위의 식은 다음과 같이 나타낼 수 있습니다.

$$\lim_{x \to 5} \frac{f(x)-f(5)}{x-5}=5$$

위의 예 1, 2에서 각 x 값에 대응하는 y값은 함수에 의해 나타낼 수 있습니다. 즉, 함수에 존재하는 위치에서의 극한값입니다. 그러나 다음 예 3과 같이 어떤 함수가 특정한 x 값을 포함하지 않는다면 그 점에서의 극한값을 계산할 수 없을 것입니다.

예 3)

$$\begin{align}&\lim_{x \to 2} g(x)\\ &g(x) = \begin{cases} \frac{x^2+4x-12}{x^2-2x}& \text{if}\; x\neq 2\\ 6 &\text{if}\; x=2 \end{cases}\end{align}$$

위 함수의 점 x=2의 접선의 기울기를 계산합니다.

x=symbols("x")
g=(x**2+4*x-12)/(x**2-2*x)
g
$$\qquad \color{blue}{\frac{x^{2} + 4 x - 12}{x^{2} - 2 x}}$$
x1=np.r_[np.linspace(1, 1.99, 10), np.linspace(2.01, 3, 10)]
y1=np.array([g.subs(x, i) for i in x1], dtype=float)
np.around(np.array([x1, y1]).T, 3)
array([[1.   , 7.   ],
          ⋮,    ⋮
       [1.99 , 4.015],
       [2.01 , 3.985],
       [2.12 , 3.83 ],
          ⋮,    ⋮
       [3.   , 3.   ]]))
limit(g, x, 2)
4

위 결과에 의하면 x=1에 근접할 수록 결과는 4에 접근한다고 할 수 있습니다. 즉,

$$\lim_{x \to 2}\frac{g(x) -g(2)}{x-2} = 4$$

이는 위의 g 함수를 다음과 같이 인수분해 한후 x=2를 대입한 결과와 같습니다.

g1=g.simplify()
g1
$$\qquad \color{blue}{\frac{x + 6}{x}}$$

그러나 위 함수의 조건은 g(2)=6이므로 위의 극한값은 정당하지 않습니다. 결과적으로 극한값이 존재하기 위해서는 계산하려는 값의 구간에서 그 함수가 연속적이어야 합니다.

그림 5.

위 그림의  g(x)는 점 2에서 이어지지 않습니다. 즉, x=2에 대한 y의 값은 6으로 특정되어있으므로 극한값 4와는 일치하지 않습니다. 이러한 경우를 "g(x)는 x=2에서 불연속"된다고 표현합니다.이러한 불연속점의 경우 극한 값을 계산할 수 없습니다.

예) 4
다음 함수의 x=0에서의 극한값?

$$\lim_{x \to 0}=\frac{1-cos(\theta)}{\theta}$$

0에서 극한값이 존재하기 위해서는 이 점에서 위 함수가 연속적이어야 합니다. 일반적으로 0으로 나누어진 경우는 무한대로 불연속적입니다. 그러나 위 함수는 0에서 분자 역시 0이 되므로 그 점에서 연속적입니다. 위 함수에 대한 그래프는 다음과 같습니다.

t=symbols("theta")
f=(1-cos(t))/t
f
$\quad \color{blue}{\frac{1 - \cos{\left(\theta \right)}}{\theta}}$
x=np.linspace(-20, 20, 100)
y=np.array([f.subs(t, i) for i in x], dtype=float)
plt.figure(dpi=100)
plt.plot(x, y, label=r'f=$\frac{1-\cos(\theta)}{\theta}$')
plt.xlabel('x', size=12, weight="bold")
plt.ylabel('f(x)', size=12, weight="bold")
plt.legend(loc='best')
plt.show()
x=np.r_[np.linspace(-0.5, -0.001, 10), np.linspace(0.001, 0.5, 10)]
y=np.array([f.subs(t, i) for i in x], dtype=float)
coord=np.array([x, y]).T
np.around(coord, 3)
array([[-0.5  , -0.245],
       [-0.445, -0.219],
          ⋮,    ⋮
       [-0.001, -0.   ],
       [ 0.001,  0.   ],
       [ 0.056,  0.028],
          ⋮,    ⋮
       [ 0.5  ,  0.245]])
limit(f, t, 0)

예) 5
다음의 극한값?

$$\lim_{x \to 0}cos(\frac{\pi}{x})$$

다음 코드 결과와 같이 x=0에서 함수의 값이 존재하지 않습니다. 즉, 이 점에서 불연속적입니다. 그러므로 극한값이 존재하지 않습니다.

f=cos(pi/t)
f
cos(𝜋𝜃)
f.subs(t, 0)
NaN
limit(f, t, 0)
⟨−1,1⟩

위 결과는 최소값 -1, 최대값 1사이에서 발산함을 나타내는 것으로 값이 없음을 의미합니다.

예) 6

$$\begin{align}&\lim_{x \to 0}h(x)\\ &h(x) =\begin{cases}0 & \text{if}\; x<0 \\ 1 &\text{if}\; x\geq 0 \end{cases} \end{align}$$

위 함수  h(x) 역시 x=0에서 불연속입니다. 그러므로 그 점에서는 극한값을 계산할 수 없습니다.

위 그림에서 x=0에서 불연속입니다. 즉, 점 0을 기준으로 왼쪽에서 접근할 경우의 값은 0이지만 오른쪽에서 접근할 경우는 1입니다. 이러한 서술을 다음과 같이 나타낼 수 있습니다.

$$\begin{align}\lim_{x \to 0^-}=0 &\qquad \text{Left-handed limit}\\ \lim_{x \to 0^+}=1 &\qquad \text{Right-handed limit}\end{align}$$

즉, 어떤 점에서 Left-handed limit와 Right-handed limit값이 일치하지 않는다면 불연속점이며 그 점에서의 극한값은 존재할 수 없습니다.

결론적으로 어떤점에서의 극한값은 다음과 같이 정의 할 수 있습니다.

$$\lim_{x \to a^+}f(x) = \lim_{x \to a^-}f(x)=L \Leftrightarrow \lim_{x \to a}f(x)=L$$
정리하면 함수 f(x)를 x=a점을 포함하는 구간에서 극한은 다음과 같이 정의합니다. $$\lim_{x \to a}f(x) =L$$ 위 식이 성립하는 구간에서 다음이 성립합니다. $$ 0 \lt |x-a| \lt \delta \Rightarrow |f(x)-L| \lt \epsilon, \quad \epsilon,\; \delta \gt 0$$

위의 서술을 그래프로 나타내면 다음과 같습니다.

x와 a의 차이가 δ보다 작을 경우는 f(x)의 극한값 L과의 차이는 위 그래프의 나타낸 ε보다 작다는 것을 의미합니다.

댓글

이 블로그의 인기 게시물

[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