기본 콘텐츠로 건너뛰기

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

[Linear Algebra] 벡터 공간과 부분공간 (vector space & subspace)

벡터 공간(vector space)과 부분공간

벡터들의 식 1과 같은 집합 V의 벡터들 사이의 선형결합이 성립한다는 것은 선으로 표시되는 벡터들에 의해 n차원 등의 공간이 형성된다는 것을 의미합니다. 또한 선형결합의 성립은 그 결과 역시 피연산자인 벡터들에 의해 성립되는 공간에 포함되므로 집합 V에 포함됩니다. 이 집합 V를 벡터 공간(Vector space)라고 하며 그 공간내에 포함된 벡터들 사이에 다음의 연산이 성립됩니다.

V = {v1, v2, …,vn}(식 1)
표 1 벡터 공간에서의 연산 법칙
u, v ∈ Vector → u+v ∈ Vector
α ∈ scalar, u ∈ Vector → αu ∈ Vector
u + v = v + u (교환법칙)
u + (v + w) = ( u + v) + w (결합법칙)
모든 요소가 0인 0벡터(zero vector)가 존재
u + (-u) = 0
α, β ∈ scalar, u ∈ Vector → α(βu) = (αβ)
α ∈ scalar and u ∈ Vector → α(u + v) = αu + αv (분배법칙)
α, β ∈ scalar and u ∈ Vector → (α + β)u = α u + β u (분배법칙)
u ∈ V → 1·u = u

식 2는 두 벡터 u와 v의 선형결합을 나타낸 것입니다. 이 관계가 성립한다는 것은 두 벡터를 기본으로 하는 공간의 확대와 축소내에 선형결합의 결과가 존재함을 의미합니다. 벡터 u, v 그리고 그들의 선형결합 결과인 벡터들이 존재하는 벡터공간을 부분공간(subspace)이라 합니다. 이 관계에서 0에 의한 스칼라배는 0벡터를 생성하므로 모든 벡터공간의 부분공간이 됩니다.

\begin{align}u&=\begin{bmatrix} a_1\\a_2\\ \vdots \\a_n\end{bmatrix} \in W, \quad v=\begin{bmatrix} b_1\\b_2\\ \vdots \\b_n\end{bmatrix} \in W \\ \Rightarrow & \begin{cases}c_1\begin{bmatrix} a_1\\a_2\\ \vdots \\a_n\end{bmatrix} \in W, \quad c_2\begin{bmatrix} b_1\\b_2\\ \vdots \\b_n\end{bmatrix} \in W & \text{scalar product}\\ c_1\begin{bmatrix} a_1\\a_2\\ \vdots \\a_n\end{bmatrix}+ c_2\begin{bmatrix} b_1\\b_2\\ \vdots \\b_n\end{bmatrix} \in W & \text{sum}\end{cases}\\ & c_1, c_2:\; \text{scalar}\end{align}(식 2)

식 2의 선형결합이 성립한다면 벡터 u와 v의 차원과 결과의 차원은 모두 ℝn이 됩니다. 그러므로 이 선형결합은 Rn 차원의 벡터들 사이에서 이루어지는 것으로 그 차원의 모든 벡터들이 존재하는 부분이 벡터공간이 되며 선형결합의 각 구성요소들과 결과들이 포함된 W는 부분공간이 됩니다.

부분공간은 다음과 같이 정리할 수 있습니다.

부분공간

u, v ∈ ℝn의 두 벡터에 대해 부분공간은 다음이 성립합니다.

  1. 모든 벡터 공간(V)내의 0벡터는 부분 공간(W)이 됩니다.
  2. u, v ∈ W → u + v ∈ W
  3. v ∈ W → cv ∈ W

u와 v는 벡터(Vector)이고 c는 스칼라(Scalar)를 나타냅니다.

위 연산 1과 2가 성립하는 선형결합의 결과벡터는 벡터 공간인 ℝn의 부분공간이 됩니다. 결과적으로 실수 ℝn의 부분 공간은 다음 중 하나를 의미합니다.

  • 동차 선형 시스템의 모든 해(solution)집합
  • 특정한 벡터들의 모든 선형 결합의 집합

예 1)

다음 선형 결합의 성립 여부를 결정하여 봅니다.

$$\begin{aligned}x-3y&=0\\x-y&=0\\x&=0\\y&=0 \end{aligned} \Rightarrow \begin{bmatrix}1&-3\\1&-1\\1&0\\0&1 \end{bmatrix}\begin{bmatrix} x\\y\end{bmatrix}=\begin{bmatrix}0\\0\\0\\0 \end{bmatrix}$$

A=np.array([[ 1, -3], [-1, 1], [ 1, 0], [0, 1]])
c=np.zeros([4,1])
au=np.hstack([A, c])
print(au)
[[ 1. -3.  0.]
 [-1.  1.  0.]
 [ 1.  0.  0.]
 [ 0.  1.  0.]]
Matrix(au).rref()
(Matrix([
 [1, 0, 0],
 [0, 1, 0],
 [0, 0, 0],
 [0, 0, 0]]),
 (0, 1))

기약행사다리꼴에서 자유변수가 없으므로 자명한 해가 존재합니다. 즉, 행렬 A에 의한 동차선형결합이 성립합니다.

A를 구성하는 각 벡터 u, v와 그들의 선형결합 결과는 R4의 부분공간(W)이 됩니다. 즉, 그 부분공간 W는 벡터 u와 v를 기본으로 그들의 확대 또는 수축의 결과이므로 그 벡터들은 W의 스판(span)이 됩니다(식 3).

W = span{u, v} (식 3)

위의 결과는 다음과 같이 정리할 수 있습니다.

부분공간의 스판

벡터공간 V를 구성하는 벡터들에 의한 선형 결합의 결과 W는 V의 부분공간이 됩니다. 그러므로 식 4에서 나타낸 것과 같이 V에 포함되고 선형결합을 구성하는 벡터들은 W의 span이 됩니다.

v1, v2, …, vp ⊂ V (벡터공간)(식 4)
W = Span {v1, v2, …, vp}

예 2)

세 개의 벡터 v1, v2, v3는 벡터 공간 R3에 존재합니다. 다음 벡터 y 역시 이 공간에 존재하기 위한 h값을 결정합시다.

$$v_1=\begin{bmatrix}1\\-2\\-2\end{bmatrix}\quad v_2=\begin{bmatrix} 15\\-4\\-7\end{bmatrix}\quad v_3=\begin{bmatrix} -3\\1\\0\end{bmatrix}\quad y=\begin{bmatrix} -4\\3\\h\end{bmatrix}$$

벡터들 사이에 선형 결합이 성립하는지를 결정하는 것입니다. 그러나 벡터 y에 미지수 h가 포함되어 있습니다. 미지수가 포함된 연산은 sympy 라이브러리의 symbols() 함수를 사용합니다. 이 함수는 기호를 연산할 수 있는 미지수로 변환하기 때문에 미지수를 포함하는 다양한 연산이 가능합니다.

v1=np.array([1,-2,-2]).reshape(-1,1)
v2=np.array([5,-4, -7]).reshape(-1,1)
v3=np.array([-3, 1, 0]).reshape(-1,1)
V=np.hstack([v1,v2,v3])
print(V)
[[ 1  5 -3]
[-2 -4  1]
[-2 -7  0]]
h=symbols("h")
y=Matrix([[-4], [3], [h]])
y

$\left[\begin{matrix}-4\\3\\h\end{matrix}\right]$

다음은 rref() 함수를 적용하기 의해 확대행렬(augment matrix)을 생성한 것입니다. 이 결과는 출력 형태의 조정을 위해 sympy 객체를 array 객체로 변환하였습니다.

au=Matrix(V).row_join(y)
au

$\left[\begin{matrix}1 & 5 & -3 & -4\\-2 & -4 & 1 & 3\\-2 & -7 & 0 & h\end{matrix}\right]$

au.rref()
(Matrix([
 [1, 0, 0,      h/3 - 5/3],
 [0, 1, 0, 10/21 - 5*h/21],
 [0, 0, 1,   11/7 - 2*h/7]]),
 (0, 1, 2))

위 결과에 의하면 자유 변수가 존재하지 않으므로 h 값에 관계없이 벡터들의 선형 관계는 성립합니다. 결과적으로 벡터 v1, v2, v3은 y의 span이고 y는 ℝ3 차원의 벡터공간의 부분공간이 됩니다(식 5).

y = Span{v1, v2, v3}(식 5)
v1, v2, v3 ⊂ ℝ3 → y ∈ ℝ3

댓글

이 블로그의 인기 게시물

[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