기본 콘텐츠로 건너뛰기

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

Affin combination과 linear combination

기하학적으로 두 점들이 이루는 집합 S에서 이 점들을 통과하는 선이 그 집합내에 존재한다면 그 집합은  affin입니다. 이것은 S의 두 점에 대한 모든 affin combination은  S를 포함합니다.
정리하면
집합 S의 점들에 대한 모든 affin combination이 S 내에 존재한다면 그 집합은 Affine 입니다.
S=aff S → S는 affine

간단히 말하면 어떤 집합 S는 선형결합이 존재하고 그 집합의 원소들 사이의 Affine combination에서도 선형결합이 성립해야 한다는 것입니다. 이것은  linear combination이 성립한다면 Affine combination이 이루어지는 것을 의미합니다.
선형관계성을 알아보기 위해 동차시스템(homogeneous system)을 먼저 정의합니다.
어떤 시스템을 동차시스템으로 만드는 것은 다음과 같습니다.
Ax = b → Ax-b=0
이 변화를 행렬 형태로 나타내보면 다음과 같습니다.
 $A=\left[\begin{matrix}a_{11}&a_{12}\\a_{21}&a_{22}\end{matrix}\right], x=\left[\begin{matrix}x_{1}\\x_{2}\end{matrix}\right], b=\left[\begin{matrix}b_{1}\\b_{2}\end{matrix}\right] $
$\left[\begin{matrix}a_{11}&a_{12}\\a_{21}&a_{22}\end{matrix}\right]\left[\begin{matrix}x_{1}\\x_{2}\end{matrix}\right]=\left[\begin{matrix}b_{1}\\b_{2}\end{matrix}\right] \\ \rightarrow \left[\begin{matrix}a_{11}&a_{12}\\a_{21}&a_{22}\end{matrix}\right]\left[\begin{matrix}x_{1}\\x_{2}\end{matrix}\right]-\left[\begin{matrix}b_{1}\\b_{2}\end{matrix}\right]=0\\ \rightarrow \left[\begin{matrix}a_{11}x_1+a_{12}x_2-b_1\\a_{21}x_1+a_{22}x_2-b_2\end{matrix}\right] =0\\ \rightarrow \left[\begin{matrix}a_{11}&a_{12}&-b_1\\a_{21}&a_{22}&-b_2\end{matrix}\right]\left[\begin{matrix}x_{1}\\x_{2}\\1\end{matrix}\right]=0$
그러므로
 $R^n$ 차원의 벡터 v의 표준 동차형태(homogeneous form)은 $\tilde{v}=\left[\begin{matrix}v\\1\end{matrix}\right]$ 입니다. 
위 설명으로 부터 y의 동차형태가 Span={$\tilde{v}_1, \cdots, \tilde{v}_p$}라면 점 y는 $v_1, \cdots, v_p$의 affin combination입니다. 사실
$\tilde{y}=c_1\tilde{v}_1+\cdots+c_p\tilde{v}_p, \quad c_1+\cdots+c_p=1$
위 식이 성립한다는 것으로 affine 변형에 의한 새로운 함수사이에 선형결합이 이루어지는 것으로 다음과 같이 변형 전의 변수들 사이에 선형결합 역시 성립하는 것과 동치입니다. 
$y=c_1v_1+\cdots+c_pv_p, \quad c_1+\cdots+c_p=1$

>>> import numpy as np
>>> import numpy.linalg as LA
>>> from sympy import *
1. p에 대한 다음 벡터들의 Affin combination?
$v_1=\left[\begin{matrix}3\\1\\1\end{matrix}\right],\; v_2=\left[\begin{matrix}1\\2\\2\end{matrix}\right],\;v_3=\left[\begin{matrix}1\\7\\7\end{matrix}\right], \; p=\left[\begin{matrix}4\\3\\0\end{matrix}\right]$
위 벡터들의  Affin combination이 성립한다면 위 각 벡터의 동차형태에 대해 다음이 성립해야 합니다.
$\tilde{y}=c_1 \tilde{v}_1+ c_2 \tilde{v}_2+ c_3 \tilde{v}_3, \quad c_1+c_2+c_3=1$
>>> v1t=np.array([[3],[1], [1],[1]]);v1t
array([[3],
       [1],
       [1],
       [1]])
>>> v2t=np.array([[1],[2],[2],[1]]);v2t
array([[1],
       [2],
       [2],
       [1]])
>>> v3t=np.array([[1],[7],[1],[1]]); v3t
array([[1],
       [7],
       [1],
       [1]])
>>> pt=np.array([[4],[3],[0],[1]]);pt
array([[4],
       [3],
       [0],
       [1]])
위로 부터 [v1t  v2t  v3t]c=pt 의 식에서 해의 존재를 나타내는 것과 같습니다. 
$\left[\begin{matrix}3&1&1\\1&2&7\\1&2&1\\1&1&1\end{matrix}\right] \left[\begin{matrix}c_1\\c_2\\c_3\end{matrix}\right]=\left[\begin{matrix}4\\3\\0\\1\end{matrix}\right]$
위 식을 계산하기 위해 기약행 사다리꼴 (해구하기)을 적용합니다. 
위식의 확대행렬(계수행렬+상수벡터) au는 다음과 같습니다. 
>>> au=np.c_[v1t,v2t,v3t,pt];au
array([[3, 1, 1, 4],
       [1, 2, 7, 3],
       [1, 2, 1, 0],
       [1, 1, 1, 1]])
위 확대행렬의 기약행사리꼴은 sympy함수 rref()를 사용하여 계산합니다. 
>>> Matrix(au).rref()
(Matrix([
[1, 0, 0, 3/2],
[0, 1, 0,  -1],
[0, 0, 1, 1/2],
[0, 0, 0,   0]]), (0, 1, 2))
위 결과를 정리하면 다음과 같습니다. 
$p=1.5v_1-v_2+0.5v_3$
또한 계수들의 합 역시 1이 됩니다.

2. 다음 벡터들 $v_1, v_2, v_3$이 p의  affin S?
$v_1=\left[\begin{matrix}1\\0\end{matrix}\right],\; v_2=\left[\begin{matrix}-1\\2\end{matrix}\right],\; v_3=\left[\begin{matrix}3\\1\end{matrix}\right],\; p=\left[\begin{matrix}4\\3\end{matrix}\right]$
각 벡터의 동차 형태에 대한 선형 결합을 확인해 봅니다.
$pt=c_1v_1t+c_2v_2t+c_3v_3t$
>>> v1t=np.array([[1],[0], [1]]);v1t
array([[1],
       [0],
       [1]])
>>> v2t=np.array([[-1],[2],[1]]);v2t
array([[-1],
       [ 2],
       [ 1]])
>>> v3t=np.array([[3],[1],[1]]); v3t
array([[3],
       [1],
       [1]])
>>> pt=np.array([[4],[3],[1]]);pt
array([[4],
       [3],
       [1]])
>>> au=np.c_[v1t,v2t,v3t,pt];au #위 식의 확대행렬
array([[ 1, -1,  3,  4],
       [ 0,  2,  1,  3],
       [ 1,  1,  1,  1]])
       [ 1,  1,  1,  1]])
>>> Matrix(au).rref()#확대 행렬에 대한 기약행사다리꼴
(Matrix([
[1, 0, 0, -3/2],
[0, 1, 0,  1/2],
[0, 0, 1,    2]]), (0, 1, 2))
이 결과로 위 식의 선형결합성을 확인할 수 있으며 다음과 같이 정리할 수 있습니다.
$pt=-\frac{3}{2}v_{1t}+\frac{1}{2}v_{2t}+2v_{3t} \rightarrow p=-\frac{3}{2}v_1+\frac{1}{2}v_2+2v_3$
또한 위 결과의 각 계수 합 역시 1이 됩니다. $-\frac{3}{2}+\frac{1}{2}+2=1$
위 과정은 "affin combination이란"에서 서술한 과정과 동일한 결과를 나타냅니다. 그 과정은 다음과 같습니다. 
$p-v_1=a(v_2-v_1)+b(v_3-v_1)\\p=(1-a-b)v_1+av_2+bv_3$
위 과정은 사용자 함수 affinMatS()를 적용하였습니다.
 >>> x, y=affinMatS(au, 0)
위 결과는 다음과 같습니다.
$x=\left[\begin{matrix} v_2-v_1& v_3-v_1&p-v_1\end{matrix}\right]$
y= x의 기약행사다리꼴
>>> x
array([[-2,  2,  3],
       [ 2,  1,  3],
       [ 0,  0,  0]])
>>> y
(Matrix([
[1, 0, 1/2],
[0, 1,   2],
[0, 0,   0]]), (0, 1))
 위 결과를 정리하면
$p-v_1=a(v_2-v_1)+b(v_3-v_1)=\frac{1}{2}(v_2-v_1)+2(v_3-v_1)\\ p=-\frac{3}{2}v_1+\frac{1}{2}v_2+2v_3$
결론적으로  Affin combination은 원 벡터들의 선형결합을 일정한 위치만을 이동시키는 것입니다.
위 선형결합 결과를 그림으로 나타내며 다음과 같습니다.

댓글

이 블로그의 인기 게시물

[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