기본 콘텐츠로 건너뛰기

12월, 2018의 게시물 표시

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

삼각함수 미분공식

1. $ f(x)=x^n → f′(x)=nxn-1 or  \frac{d}{dx}(x^n)=nx^{n-1}$ 위 식을 증명하기 위해서는  n이 양수라고 가정합니다. 또한 이항정리를 사용합니다.  <이항정리>  $(a+b)^n=\sum^n_{k=0}\left(^n_k \right) a^{n-k}b^{k}\\=a^n+\left(^n_1 \right)a^{n-1}b+\left(^n_2 \right)a^{n-2}b^2+ \cdots +\left(^n_{n-1} \right)ab^{n-1}+\left(^n_n \right)ab^n\\=a^n+na^{n-1}b+\frac{n(n-1)}{2!}a^{n-2}b^2+\frac{n(n-1)(n-2)}{3!}a^{n-3}b^3+\cdots+nab^{n-1}+b^n$ 위 식의 전개에서  $\left( \begin{matrix} n \\k  \end{matrix} \right) =\frac { n! }{ k!(n-k)! } ,\quad n!=n\cdot (n-1)\cdot \cdots \cdot 2\cdot 1$ f(x)=xn 이라고 하면  $f^\prime(x)=\lim_{h \to 0}\frac{(x+h)^n-x^n}{h} \\=\lim_{h \to 0}\frac{(x^n+nx^{n-1}h+\frac{n(n-1)}{2!}x^{n-2}h^2+\frac{n(n-1)(n-2)}{3!}x^{n-3}h^3+\cdots+nxh^{n-1}+h^n)-x^n}{h} \\=\lim_{h \to 0} \; nx^{n-1}+\frac{n(n-1)}{2!}x^{n-2}h+\frac{n(n-1)(n-2)}{3!}x^{n-3}h^2+\cdots+nxh^{n-2}+h^{n-1} \\=nx^{n-1}$ 2. $\lim_{\theta \to 0} \frac{sin \theta}{\theta}=1$    위 그림은 원위의 두 접선을 기준으로 작성된 것으로 다음을 유도 할 수 있습니다. 증명과정을 간단히

미분의 개념

내용 단순한 형태의 미분 음의 거듭제곱 형태의 미분 분수형태의 거듭제곱의 경우 상수를 포함한 식의 미분 단순한 형태의 미분 예 1) 두 변수 y와 x의 관계를 나타낸 함수 $y = x^2$에 따르면 x가 증가하면 y 역시 증가합니다. 이 관계에서 두 변수 사이의 비율을 계산할 수 있습니다. 이 예제는 미분계수인 $\displaystyle \frac{dy}{dx}$의 값을 계산하는 것으로 x의 증가에 따라 식 1과 같이 표현할 수 있습니다. $$\begin{align}\tag{1}y+dy&=(x+dx)^2\\&=x^2+2xdx+(dx)^2\end{align}$$ dx는 변수 x의 작은 양이므로 위 식에서 $(dx)^2$는 작은 양들 사이의 곱이므로 다른 항에 비해 매우 작습니다. 즉, 이 항은 무시 가능하기 때문에 식 1은 식 2와 같이 정리됩니다. $$\begin{align} \tag{2}y+dy&=x^2+2xdx\\dy&=2xdx\end{align}$$ 위 식2는 미세한 구간에서 x에 대한 y의 변화율을 나타내는 것으로 미분이라고 정의합니다. 다시말하면, 일반적인 미분의 정의인 식 3과 같이 나타낼 수 있습니다. $$\begin{align} \tag{3}\frac{dy}{dx}&=2x\end{align}$$ 파이썬 sympy 패키지의 diff() 함수를 적용하여 다음과 같이 코드화 할 수 있습니다. 이 함수는 sympy객체.diff() 와 같이 메소드 형태로 적용할 수 있습니다. x=symbols("x", real=True) y=x**2 diff(y) 2x y.diff() 2x $\displaystyle \frac{dy}{dx}$는 x에 대한 y를 미분하는 결과입니다. 미분한다는 것은 미분 계수를 발견하는 것을 의미합니다. x에 관한 다른 함수에 대해 생각해 봅니다. $$u=7x^2+3$$ 위 식의 x에 대한 u의 미분은 다음과 같이 나타

무한대와 극한

1. 무한 극한  x=a 점으로 충분히 근접할 경우 극한값이 양(positive)의 무한대로 증가하면 또는 음(negative)의 무한대로 확장되는 것을 다음과 같이 나타냅니다. $\lim_{x \to a}f(x) = \infty \, \;  \lim_{x \to a}f(x) = -\infty$ 이러한 경우 그 함수에 의해 x=a는 정의되지 않습니다. 1. $ f(x)=\frac{1}{x}$함수의 그래프를 그려보면 다음과 같습니다. 이 함수는 x가 0에 접근할 수록 값이 양의 무한대와 음의 무한대로 확장됩니다. 즉. $\lim_{x \to 0^+}\frac{1}{x} = +\infty, \; \lim_{x \to 0^-}\frac{1}{x} = -\infty$ 위의 결과와 같이 0에 대해 오른쪽 극한과 왼쪽 극한이 일치하지 않습니다. 즉, 그 점에서는 불연속이므로 x=0에서의 극한 값은 존재하지 않습니다. $\lim_{x \to 0^+}\frac{1}{x} \; \text{doesn't exist}$ 2. $ f(x)=\frac{1}{x^2}$? 위 함수는 극한은 다음과 같이 나타낼 수 있습니다. $\lim_{x \to 0^+}\frac{1}{x} = \infty, \; \lim_{x \to 0^-}\frac{1}{x} = \infty$ 위 결과와 같이 x=0에 대해 왼쪽극한과 오른쪽 극한은 같습니다. 그러므로 0에 대한 극한은 $ \infty$입니다.  $\lim_{x \to 0^+}\frac{1}{x} = \infty$ 위 두 문제로 부터 다음을 정의할 수 있습니다. x=a에서 다음이 성립하면 함수 f(x)는 x=a를 기준으로 대칭입니다. $\lim_{x \to a^-} f(x) = \pm \infty, \;  \lim_{x \to a^+} f(x) = \pm \infty, \;  \lim_{x \to a} f(x) = \pm \infty$ 3. 함수 $f(x) = \frac{3}{(4-x)^3}$에 대

극한의 특성과 계산

극한의 특성 $\lim_{x \to a}f(x), \;  \lim_{x \to a}g(x)$ 그리고 상수(constant) c사이에 다음 관계들이 성립합니다. import numpy as np import pandas as pd from sympy import * import matplotlib.pyplot as plt x=symbols("x") f=x**2+3*x g=x**3+4*x+5 c=3 a=2 f $\quad \color{blue}{x^{2} + 3 x}$ g $\quad \color{blue}{x^{3} + 4 x + 5}$ 1) $\displaystyle \lim_{x \to a}cf(x)=c\lim_{x \to a}f(x)$ limit(c*f, x, a) 30 c*limit(f, x, a) 30 2) $\displaystyle \lim_{x \to a}[f(x) \pm g(x)]=\lim_{x \to a}f(x) \pm \lim_{x \to a}g(x)$ limit(f+g, x, a) 31 limit(f, x, a)+limit(g, x, a) 31 3) $\displaystyle \lim_{x \to a}[f(x) g(x)]=\lim_{x \to a}f(x)  \lim_{x \to a}g(x)$ limit(f*g, x, a) 210 limit(f, x, a)*limit(g, x, a) 210 4) $\displaystyle \lim_{x \to a}\frac{f(x)}{g(x)}=\frac{\lim_{x \to a}f(x)}{\lim_{x \to a}g(x)}, \quad \lim_{x \to a}g(x)\neq 0$ limit(f/g, x, a) $\quad \color{blue}{\displaystyle \frac{1}{21}}$ limit(f, x, a)/limit(g, x, a) $\quad \color{blue}{\displaystyle \frac{1}{21}}$ 5) $\lim

극한(Limit)의 개념

내용 접선과 외선 극한(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(

우분투에 필요한 프로그램들 설치

1. 프린트 스크린  Shift + Ctrl + Print Screen 키를 누르면 마우스 커서가 십자 모양으로 바뀌며  캡처 하려는 영역을 사각형으로 지정하여 캡처할 수 있습니다. 캡처 결과를 클립보드에 복사되며 Ctrl + V를 눌러 원하는 프로그램에서 붙여넣기 할 수 있습니다.  2. 그림판  윈도우 그림판과 유사한 프로그램인 kolourpaint 터미널에서  sudo apt-get install kolourpaint4 실행  kolourpaint 3. sigil 설치 및 upgrade 1) 터미널에서 ~$ sudo add-apt-repository ppa:ubuntuhandbook1/sigil 2) install or upgrade sudo apt update sudo apt install sigil 3) uninstall sudo apt-get remove --autoremove sigil sigil-data 4. 한글 설정 (UIM 설치) 우분투 18.04의 한글 입력기는 iBus로 되어 있는데 Visual Studio Code등에서 한글 입력이 되지 않는 문제가 발생합니다. 이 경우 UIM 설치로 상당부분 해소됩니다. $sudo apt install uim  설치후 - 프로그램 메뉴에서 --> 언어지원(또는 setting(제어판) )--> 지역 및 언어에서 "설치된 언어 관리" 클릭 - 언어지원 창에서 키보드 입력기를 uim으로 변경 - 재부팅 재부팅후 프로그램 메뉴에서 --> 입력기에서  - 전체적인 설정 --> 입력기 이용준비 디폴트 입력기 지정 체크 디폴트 입력기 : 벼루 사용되는 입력기 : 모두 지우고 "벼루" 만 남김 - 툴바 Display behavor > Display : Never  - 전체적인 키 설정 : [전체] 켜기, [전체] 끄기의 모든 내용을 지웁니다.  - 벼루 키설정 1 > [벼루] 한글

sympy와 미분

미분 sympy 에서 미분은  diff()  함수를 사용합니다 . diff( 식 ,  기준이 되는 변수 ) >>> from sympy import * >>> x, y, z = symbols('x y z') >>>  diff(cos(x),x) -sin(x) >>>  diff(exp(x**2), x) 2*x*exp(x**2) 위의  diff() 에 의한 미분은  1 차 미분을 나타낸 것이고 다중 미분역시 이 함수를 사용하여 수행할 수 있습니다 .  다중 미분을 위해서 미분을 위한 변수를 여러차례 전달해야 한다 .  즉 ,  변수를 전달하는 횟수만큼 미분이 실행됩니다 .  다음은  4 제곱인  x 를  4 번 미분한 것으로 결과는  24 입니다 . >>>  diff(x**4, x) 4*x**3 >>>  diff(x**4, x,x,x,x) 24 즉, 위의 경우는$((((x^4)^{\prime})^{\prime})^{\prime})^{\prime})$과 같습니다. 이와같은 다중 미분은 다음과 같이  diff(식, 변수, 미분횟수) 로 사용할 수 있습니다.  >>>  diff(x**4, x,4) 24 미분을 여러번 시행할 경우 횟수만큼 변수를 전달하는 대신 대상이 되는 변수와 함께 미분의 횟수를 전달하는 것으로 동일한 효과를 나타낼 수 있습니다 . 이 방법으로 다중의 변수에 대해 미분을 실행할 수 있습니다. 즉,  함수에 전달하는 변수의 순서에 따라 미분이 실행됩니다 .  예를들어 다음을 실행합니다 . >>> eq=exp(x*y*z) >>> diff(eq, x) y*z*exp(x*y*z) $eq1=frac{d(e^{xyz})}{dx}=yz e^{xyz}$ >>> diff(eq, x, y) z*(x*y*z + 1)*e

window, ubuntu간의 공유폴더 생성

우분투에서 samba를 사용하여 공유폴더를 생성 1. Samba 생성 $sudo apt-get install samba 2. samba 폴더 생성 $mkdir samba 3. samba config 수정 /etc/samba/smb.conf 열어 다음과 같이 편집 $ sudo nano/etc/samba/smb.conf #파일의 아래에 [profiles] 밑에 다음과 같이 작성 [ ailab] # 네트워크에 보여질 공유 이름 comment = ailab share directory # 디렉토리 설명 path = /home/ailab/samba # 공유 디렉토리 절대 경로 valid users = ailab # 접속을 허용할 계정 writeable = yes create mask = 0664 directory mask = 0775 [shs1] comment = window_ubuntu share directory path=/home/sonhs valid users=shs1 writable=yes create mask=0664 directory mask=0775 ctrl+o (저장), ctrl+x: nano 편집을 마친후 samba 서버 재시작 $sudo /etc/init.d/smbd restart samba 서버에 관련된 명령은 다음과 같습니다. $sudo service smbd start #samba server 시작 $sudo service smbd stop #samba server 멈춤 $sudo service smbd restart #samba server 재시작(권한 입력 필요) 윈도우 탐색기에서 samba서버 접속을 위해 방화벽 139, 445 포트를 열어두어야 합니다. $sudo ufw allow 139 $sudo ufw allow 445 4. 윈도우 탐색기 연결하기

sympy.solvers로 방정식해 구하기

sympy.solvers로 방정식해 구하기 대수 방정식을 해를 계산하기 위해 다음 함수를 사용합니다. sympy.solvers.solve(f, *symbols, **flags) f=0, 즉 동차방정식에 대해 지정한 변수의 해를 계산 f : 식 또는 함수 symbols: 식의 해를 계산하기 위한 변수, 변수가 하나인 경우는 생략가능(자동으로 인식) flags: 계산 또는 결과의 방식을 지정하기 위한 인수들 dict=True: {x:3, y:1}같이 사전형식, 기본값 = False set=True :{(x,3),(y,1)}같이 집합형식, 기본값 = False ratioal=True : 실수를 유리수로 반환, 기본값 = False positive=True: 해들 중에 양수만을 반환, 기본값 = False 예 $x^2=1$의 해를 결정합니다. solve() 함수에 적용하기 위해서는 다음과 같이 식의 한쪽이 0이 되는 형태인 동차식으로 구성되어야 합니다. $$x^2-1=0$$ import numpy as np from sympy import * x = symbols('x') solve(x**2-1, x) [-1, 1] 위 식은 계산 과정은 다음과 같습니다. $$\begin{aligned}x^2-1=0 \rightarrow (x+1)(x-1)=0 \\ x=1 \; \text{or}\; -1\end{aligned}$$ 예 $x^4=1$의 해를 결정합니다. solve() 함수의 인수 set=True를 지정하였으므로 결과는 집합(set)형으로 반환됩니다. eq=x**4-1 solve(eq, set=True) ([x], {(-1,), (-I,), (1,), (I,)}) 위의 경우 I는 복소수입니다.즉 위 결과의 과정은 다음과 같습니다. $$x^4-1=(x^2+1)(x+1)(x-1)=0 \rightarrow x=\pm \sqrt{-1}, \; \pm 1=\pm i,\; \pm1$$ 실수

함수(Function)

함수의 정의 함수의 정의역(domain)과 치역(range) 역함수(Inverse function) 함수(Function) 함수의 정의 식에 입력되는 값에 대응하는 정확히 하나의 수를 생성한다면 그 식을 함수라고 합니다. 예)   1. 다음 식은 함수? 1) y=x 2 +1 한개의 값 x에 대응되는 y 역시 하나입니다. 그러므로 함수입니다. 2) y 2 =x+1 한개의 값 x에 대응되는  y의 값은 한 개 이상일 수 있습니다. 예로 x=3일 경우 y값은 두개 입니다. y 2 = 4 → y=2 or -2 그러므로 이 식은 함수가 아닙니다. import numpy as np from sympy import * 일반적으로 함수는 f(x)로 나타냅니다. f(x) = 2x 2 -5x+3 식 f(x)에서 x=3 인 경우의 대응되는 값은 다음과 같이 하나입니다. f=2*x**2-5*x+3 f.subs(x, 3) 6 위 코드와 같이 수학의 수식을 표현하고 계산하기 위해 sympy 패키지 를 사용합니다. 함수의 정의역(domain)과 치역(range) 정의역 은 함수에 전달할 수 있는 모든 값의 범위이며 함수로 전달되는 각 값에 대응하는 결과를 치역 이라고 합니다. 예를들어 f(x) =5x-3의 경우 이 함수 x값에 전달할 수 있는 값들과 이 함수에 의해 생성되는 결과의 범위는 다음과 같습니다. Domain:$(-\infty, \infty)$ range: $(-\infty, \infty)$ $g(x)=\sqrt{4-7t}$에서 변수 t에 전달할 수 있는 수는 한정되어 있습니다. 즉, 제곱근의 수는 0을 포함하는 양수이어야 합니다. 즉, $4-7t \geq 0 \rightarrow t \leq \frac{4}{7} $ Domain: $\left( -\infty , \frac{4}{7} \right]$ 구간을 표시할 때 괄호' ( ) '와 대괄호' [ ] '를 사용합니다. 대

다항식과 인수분해

다항식(plynomial) 내용 하나의 변수를 가진 다항식 두개의 변수를 가진 다항식 연산 다항식의 인수분해 (factoring polynomials) 하나의 변수를 가진 다항식 식 1은 하나의 변수를 가진 다항식을 표현한 것입니다. \begin{align}&ax^n\\ \tag{식 1} &a: \text{계수(coeficient)}\\ &x: \text{변수(variable)}\\ &n: \text{차수(degree)}\end{align} 다항식의 차수는 0을 포함하는 양의 정수이어야 합니다. 다항식 전체의 차수를 표현할 경우는 가장 높은 것으로 나타냅니다. 예 1) (1) A = 5 x 12 - 2 x 6 + 5 x 5 - 198 x + 1: 식 A의 차수는 12입니다. (2) B=-8: B는 -8x 0 와 같습니다. 그러므로 차수는 0입니다. (3) 5x-7: 역시 다항식입니다. 차수는 1입니다. 이와 같이 다항식은 변수의 차수가 반드시 1이상일 필요는 없으며 차수가 0으로 변수를 포함하지 않는 경우 역시 다항식으로 표현됩니다. 예 2) 다음식들은 다항식이 아닙니다. (1)$4x^6+15x^{-4}+7$ : 음수(-4) 차수를 포함 (2)$5\sqrt{x} -x+3$: 차수 $\frac{1}{2}$는 정수가 아닌 차수 (3)$\frac{3}{x}+x^3-2$: 음수인 차수(-1) 물론 계수에는 이러한 제한이 없습니다. 두개의 변수를 가진 다항식 식 2는 두개의 변수를 가진 다항식의 일반 형태입니다. \begin{align}\tag{식 2}& ax^ny^m\\ & a:\text{계수}\\ & x,y: \text{변수}\\ & n, m: \text{차수}\end{align} 두 변수를

지수(Exponents) 계산

내용 지수 계산 지수함수들의 연산특성 지수함수의 계수 지수 계산 $a^n=a \cdot a \cdot \cdots a$ 즉, a를 n번 곱하는 것을 의미합니다. 이 식의 a를 밑수, n을 지수라고 합니다. 지수는 python에서는 a**n , 내장함수인 pow(밑수, 지수) 또는 numpy 모듈의 power(밑수, 지수) 를 적용할 수 있습니다. 또한 sympy 모듈의 Pow(밑수, 지수) 를 적용하여 미지수를 포함한 지수를 표현할 수 있습니다. import numpy as np from sympy import * 2**5, pow(2, 5), np.power(2, 5) (32, 32, 32) a, n=symbols("a, n") eq=Pow(a, n) eq $\quad \color{navy}{a^{n}}$ eq.subs({a:2, n:5}) $\quad \color{navy}{32}$ 지수가 분수로 나타낼 수 있을 경우 식 1과 같이 거듭제곱근(radical)로 나타낼 수 있습니다. $$\begin{equation}\tag{1}a^{\frac{1}{n}}=\sqrt[n]{a}\end{equation}$$ np.power(2, 1/2) 1.4142135623730951 eq.subs({a:2, n:1/2}) $\quad \color{navy}{1.4142135623731}$ 지수가 음수일 경우는 식 2와 같이 계산됩니다. $$\begin{equation}\tag{2} a^{-n}=\frac{1}{a^n} \end{equation}$$ 2**(-2) 0.25 1/np.power(2, 2) 0.25 지수함수들의 연산특성 지수함수들은 식 2와 같은 특성으로 연산할 수 있습니다. $$\begin{align}\tag{2}\displaystyle &a^na^m=a^{n+m}&\quad(2.1)\\&(a^n)^m=a^{n+m}&\quad(2.2)\