기본 콘텐츠로 건너뛰기

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

[Linear Algebra] 부분공간의 차원

부분공간의 차원

관련된 내용

예 1)

H가 4차원의 좌표(a, b, c, d)에서 다음 식들을 만족하는 모든 벡터들의 집합이라고 한다면 H가 4차원의 부분 공간인지를 확인합니다.

\begin{align} a - 2b + 5c - d& = 0\\-a - b + c& = 0\end{align}

위 식은 식 1과 같이 행렬시스템으로 나타낼 수 있습니다.

$$\begin{bmatrix} 1&-2&5&1\\-1&-1&1&0\end{bmatrix}\begin{bmatrix} a\\b\\c\\d\end{bmatrix} = \begin{bmatrix} 0\\0\end{bmatrix}$$ (식 1)
A=np.array([[1,-2,5,-1],[-1, -1, 1, 0]])
c=np.zeros([2,1])
aug=np.hstack([A, c])
print(aug)
[[ 1. -2.  5. -1.  0.]
 [-1. -1.  1.  0.  0.]]
print(np.array(Matrix(aug).rref()[0], dtype=float).round(3))
[[ 1.     0.     1.    -0.333  0.   ]
 [ 0.     1.    -2.     0.333  0.   ]]

선형결합은 2개의 자유 변수 c, d를 포함하므로 자명하지 않은(non trivial) 해를 갖습니다. 즉, 선형 종속으로 선형 결합이 성립하므로 벡터 [[a], [b], [c], [d]]는 4차원의 부분 공간으로 간주할 수 있습니다. 그러나 변수 a, b는 c와 d에 의존적입니다. 이 경우 그 벡터의 차원을 차원을 4차원으로 고정할 수 있을까요?

표준 행렬 A의 각 열벡터 A1, A2, A3, A4라고 하면 위 rref의 결과로 A1, A2가 기저벡터로 나머지 벡터들인 A3, A4와 각각 선형결합이 성립될 것입니다(식 2).

\begin{align}\begin{bmatrix}1&-2\\-1&-1 \end{bmatrix} \begin{bmatrix}a\\b \end{bmatrix} &=\begin{bmatrix}5\\1 \end{bmatrix} \\ \begin{bmatrix}1&-2\\-1&-1 \end{bmatrix} \begin{bmatrix}a\\b \end{bmatrix} &=\begin{bmatrix}-1\\0\end{bmatrix}\end{align} (식 2)

식 2의 두 식에서 좌항의 행렬의 행렬식은 0이 아닙니다. 즉, 역행렬이 존재하므로 위 각식의 유일한 해를 가집니다.

A12=A[:,[0,1]]
print(A12)
[[ 1 -2]
 [-1 -1]]
la.det(A12).round(3)
-3.0
A3=A[:, 2].reshape(-1,1)
A4=A[:, 3].reshape(-1,1)
sol1=la.solve(A12, A3)
print(sol1)
[[ 1.]
 [-2.]]
sol2=la.solve(A12, A4)
print(sol2.round(3))
[[-0.333]
 [ 0.333]]

식 2의 선형결합은 모두 선형독립입니다. 다시말하면 A1, A2 두 벡터를 기저로 하여 부분공간 A3과 A4을 생성할 수 있음을 나타냅니다. 이 부분공간을 H로 한다면 식 3과 같이 나타낼 수 있습니다.

\begin{align}H& = \text{Span}\{A_1,\; A_2\} \\& = \text{Span}\left\{ \begin{bmatrix}1\\-1 \end{bmatrix},\; \begin{bmatrix}-2\\-1 \end{bmatrix}\right\}\end{align} (식 3)

벡터 A1, A2는 부분공간 H의 기저 벡터입니다.

그림 1은 A1, A2를 기저로하여 생성되는 선형결합의 결과인 A3과 A4을 나타낸 것입니다. 이 그림에 의하면 두 기저들에 의해 생성되는 다양한 벡터공간내에 A3과 A4가 존재함을 알 수 있습니다.

그림 1. 두 기저로 생성되는 부분공간.

그림 1과 같이 두 개의 기저로 생성되는 부분공간은 평면입니다. 그러므로 2차원입니다. 이것은 기저벡터의 수와 같습니다. 다음과 같이 정리할 수 있습니다.

[부분공간의 차원]
  • 피벗열(pivot column)이 기저 벡터가 됩니다.
  • 스판(Span)은 기저 벡터로 구성되며 기저 벡터의 수가 부분 공간의 차원이 됩니다.

예 2)

다음 벡터들에 의한 기저와 그 부분 공간의 차원을 계산합니다.

$$\begin{bmatrix}1\\-3\\2\\-4 \end{bmatrix}, \quad \begin{bmatrix}-3\\9\\-6\\12\end{bmatrix}, \quad \begin{bmatrix}2\\-1\\4\\2 \end{bmatrix}, \quad \begin{bmatrix} -4\\5\\-3\\7\end{bmatrix}$$

위 각 벡터들의 결합에 의한 행렬 A는 다음과 같습니다. 그 행렬의 기약행사다리꼴의 피벗열이 기저가 되며 그 기저의 수가 부분공간의 차원이 됩니다.

A=np.array([[1,-3, 2, -4],[-3, 9, -1, 5], [2, -6, 4, -3],[-4, 12, 2, 7]])
print(A)
[[ 1 -3  2 -4]
 [-3  9 -1  5]
 [ 2 -6  4 -3]
 [-4 12  2  7]]
Matrix(A).rref()
(Matrix([
 [1, -3, 0, 0],
 [0,  0, 1, 0],
 [0,  0, 0, 1],
 [0,  0, 0, 0]]),
 (0, 2, 3))

결과에 의하면 0, 2, 3열이 피벗열이며 식 4와 같이 선형결합이 가능합니다.

$$\begin{bmatrix}1&2&-4\\-3&-1&5\\2&4&-3\\-4&2&7\end{bmatrix}\begin{bmatrix}x_1\\x_2\\x_3\end{bmatrix}=\begin{bmatrix}-3\\9\\-6\\12\end{bmatrix}$$ (식 4)

위 결합의 결과인 우항은 ℝ4 벡터공간의 부분공간이 되며 좌항의 기저벡터들이 스판이 됩니다(식 5).

$$H=\left\{\begin{bmatrix}1\\-3\\2\\-4\end{bmatrix},\;\begin{bmatrix}2\\-1\\4\\2\end{bmatrix},\;\begin{bmatrix}-4\\5\\-3\\7\end{bmatrix}\right\}$$ (식 5)

그러므로 부분공간은 1차원인 벡터 3개로 구성된 공간이 되므로 3차원입니다.

예 3)

스칼라 a, b, c로 구성된 벡터와 집합 S = {t2 + 1, t − 1, 2t + 2}에 의한 다음의 선형결합에서 기저와 부분공간의 차원을 결정합니다.

$$\begin{bmatrix}t^2+1& t-1& 2t+2\end{bmatrix}\begin{bmatrix}a\\b\\c\end{bmatrix}=0$$

식의 좌항 즉, 두 벡터의 내적을 계산해 보면 식 6과 같습니다.

(t2 + 1)a + (t - 1)b + 2(t + 2)c = 0(식 6)

위 식을 변수 t2과 t 그리고 상수항으로 정리할 수 있습니다(식 7).

at2 + (b + 2c)t + (a - b + 4c) = 0(식 7)

위 식은 스칼라 a, b, c 사이의 연산에 의해 생성되는 각 계수가 0일때만 성립합니다(식 8).

a = 0, b + 2c = 0,  a -b + 4c = 0(식 8)

식 8은 식 9와 같이 행렬과 벡터로 구성된 선형시스템으로 나타낼 수 있습니다.

$$\begin{bmatrix}1&0&0\\0&1&2\\1&-1&4 \end{bmatrix}\begin{bmatrix}a\\b\\c \end{bmatrix}=\begin{bmatrix}0\\0\\0 \end{bmatrix}$$(식 9)

식 9가 성립한다면 표준행렬의 rref로 확인할 수 있는 피벗열의 수로 부분공간의 차원을 결정할 수 있습니다.

위 과정을 코드화하기 위해 sympy 패키지의 symbols() 함수를 적용합니다.

a, b, c, t=symbols('a b c t')
A=Matrix([t**2+1,t-1,2*t+2]).T
A
[t2 + 1, t  -  1, 2t + 2]
B=Matrix([[a],[b],[c]])
AB=A*B
AB
[a(t2 + 1) + b(t - 1) + c(2t + 2)]

위 식을 t에 따라 정리한 식의 각 계수를 나타내기 위해 sympy 패키지의 expand(), collect() 함수와 coeff() 메소드를 적용합니다. 이 들은 각각 식을 전개하고 차수를 기준으로 식을 정리하며 각 차수에 대응하는 계수를 반환합니다.

AB2=collect(expand(AB[0]), t)
AB2
[at2 + a - b + 2c + t(b + 2c)]
coef2=AB2.coeff(t, 2)
coef1=AB2.coeff(t,1)
coef0=AB2.coeff(t,0)
print(f'2차 계수:{coef2}\n1차 계수:{coef1}\n0차 계수:{coef0}')
2차 계수:a
1차 계수:b + 2*c
0차 계수:a - b + 2*c

위 식의 선형 독립 여부를 결정하는 것으로 기저임을 판단할 수 있습니다. 다음 객체 coefMat는 정방행렬로 행렬식으로 역행렬의 존재를 확인할 수 있습니다. 즉, 행렬식 ≠ 0인 경우 역행렬이 존재하므로 numpy.linalg.solve() 함수로 식 9의 해를 결정할 수 있습니다.

coefMat=np.array([[1, 0,0],[0,1,2], [1, -1, 2]])
c=np.zeros((3,1))
la.det(coefMat)
4.0
sol=la.solve(coefMat, c)
print(sol)
[[0.]
 [0.]
 [0.]]

식 9는 유일한 해를 가지므로 선형독립입니다. 즉, 이 선형결합의 표준행렬의 모든 열벡터가 기저가 됩니다. 이는 다음과 같이 확대행렬에 대한 rref으로 확인할 수 있습니다.

aug=np.c_[coefMat, c]
Matrix(aug).rref()
(Matrix([
 [1, 0, 0, 0],
 [0, 1, 0, 0],
 [0, 0, 1, 0]]),
 (0, 1, 2))

위 결과들과 같이 위 선형결합의 기저는 표준행렬을 구성하는 3개의 열벡터가 됩니다. 즉, 이 결합으로 생성되는 부분공간은 3개의 기저위에 형성되므로 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