기본 콘텐츠로 건너뛰기

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

[Linear Algebra] 선형독립과 선형종속

선형 독립과 선형 종속

ℝ 공간의 벡터들(v1, v2, …, vp)과 스칼라(c1, c2, …, cp)의 동차선형결합(Homogeneous Linear Combination)은 식 1과 같이 행렬 방정식의 형태로 나타낼 수 있습니다.

\begin{align}v_1c_1+v_2c_2+\cdots+v_pc_p &=0\\ \Rightarrow\begin{bmatrix}v_{11}& v_{12}& \cdots & v_{1p}\\ v_{21}& v_{22}& \cdots & v_{2p}\\ \vdots& \vdots& \ddots& \vdots\\ v_{n1}& v_{n2}& \cdots & v_{np}\end{bmatrix} \begin{bmatrix} c_1\\c_2\\\vdots\\c_p\end{bmatrix} &= \begin{bmatrix} 0\\0\\\vdots\\0\end{bmatrix}\end{align}(식 1)

동차 선형 결합이 자명한 해(trivial solution)를 갖는다면 선형 독립(linear independent)라고 하고 위 식을 만족시키기 위한 자명하지 않은 해(nontrivial solution)을 갖는다면 선형 종속(linear dependent)이라고 합니다.

예 1)

다음시스템의 선형 독립성을 결정합니다.

\begin{align}3x_1 + 5x_2 - 4x_3 &= 0\\ -3x_1 - 2x_2 + 4x_3 &= 0\\  6x_1 + x_2 - 8x_3 &= 0\end{align}

다음 코드에서 객체 aug와 같이 각 식을 벡터로 전환하여 행기준으로 결합하면 확대행렬이 됩니다. aug에서 상수항을 제외하면 표준행렬(A)이 됩니다.

v1=np.array([1, 2, 3])
v2=np.array([4, 5, 6])
v3=np.array([2, 1, 0])
c=np.array([0, 0, 0])
aug=np.c_[v1, v2, v3, c]
print(aug)
[[1 4 2 0]
 [2 5 1 0]
 [3 6 0 0]]
A=aug[:,:-1]
print(A)
[[1 4 2]
 [2 5 1]
 [3 6 0]]
la.det(A).round(3)
-0.0

행렬 A는 3×3 정방 행렬이므로 행렬식을 계산할 수 있지만 그 결과는 0이므로 역행렬은 존재하지 않습니다. 이는 고유한 해가 없음을 의미합니다. 기약행사다리꼴(rref)을 적용하여 확인할 수 있습니다.

Matrix(aug).rref()
(Matrix([
[1, 0, -2, 0],
[0, 1,  1, 0],
[0, 0,  0, 0]]),
(0, 1))

위 결과에 의하면 2개의 선도 변수와 1개의 자유 변수가 존재합니다. 즉, 다음과 같이 나타낼 수 있습니다.

x1 = 2x3,  x2 = -x3

위 시스템은 변수 x3에 따라 다양한 해를 가질 수 있습니다. 결과적으로 자명하지 않은 해를 가지므로 선형 종속입니다.

예 2)

행렬 B의 선형 독립 여부를 결정하여 봅니다.

$$B=\begin{bmatrix} 0& 1& 4\\ 1& 2& -1\\5& 8& 0\end{bmatrix}$$

행렬 B는 정방 행렬이므로 가역행렬이라면 함수 np.linalge.solve()에 의해 해집합을 계산할 수 있습니다.

B=np.array([[0,1,4],[1,2,-1],[5,8,0]])
round(la.det(B), 3)
-13.0

행렬 B의 행렬식은 0이 아닙니다. 이 결과는 B의 역행렬이 존재하며 다음 결과와 같이 그 행렬에 의한 선형 결합의 유일해가 존재함을 의미합니다.

c=np.array([0,0,0]).reshape(-1,1)
print(la.solve(B, c))
[[ 0.]
 [ 0.]
 [-0.]]

미지수의 수와 식의 수가 동일한 선형시스템이라면 표준 행렬의 역행렬의 존재는 그 시스템이 독립임을 의미합니다. 즉, 가역행렬과 독립은 동치입니다.

표준행렬이 정방행렬이고 가역적이면 다음과 동치입니다.
⇒ 자명한 해(trivial solution) ≡ 선형 독립

예 3)

다음 선형 시스템의 경우는 식의 수가 변수의 수보다 많은 상태로서 표준 행렬이 정방 행렬이 아닌 경우입니다. 선형 독립 여부를 결정하여봅니다.

\begin{align}-3x_2 + 9x_3& = 0\\ 2x_1 + x_2 - 7x_3& = 0\\ -x_1 + 4x_2 - 5x_3& = 0\\ x_1 - 4x_2 + 2x_3& = 0\end{align}
v1=np.array([0,-3, 9, 0])
v2=np.array([2, 1, -7, 0])
v3=np.array([-1, 4, -5, 0])
v4=np.array([1, -4, 2, 0])
aug=np.vstack([v1, v2, v3, v4])
print(aug)
[[ 0 -3  9  0]
 [ 2  1 -7  0]
 [-1  4 -5  0]
 [ 1 -4  2  0]]
Matrix(aug).rref()
(Matrix([
 [1, 0, 0, 0],
 [0, 1, 0, 0],
 [0, 0, 1, 0],
 [0, 0, 0, 0]]),
 (0, 1, 2))

위 결과에 의하면 피봇열이 3개이므로 선형결합의 변수의 수와 같습니다. 즉, 변수 x1, x2, x3의 해는 모두 0으로 유일한 해 집합을 가지므로 자명한 해를 가지므로 선형독립입니다.

예 4)

다음 예는 변수의 수가 식의 수보다 많은 경우 입니다. 선형 독립 여부를 결정하여봅니다.

 \begin{align}x_1 + 4x_2 - 3x_3& = 0\\ -2x_1 - 7x_2 + 5x_3 + x_4& = 0\\ -4x_1 - 5x_2 + 7x_3 + 5x_4& = 0\end{align}
v1=np.array([1, -2, -4])
v2=np.array([4, -7, -5])
v3=np.array([-3, 5, 7])
v4=np.array([0, 1, 5])
c=np.array([0, 0, 0])
aug=np.c_[v1, v2, v3, v4, c]
print(aug)
[[ 1  4 -3  0  0]
 [-2 -7  5  1  0]
 [-4 -5  7  5  0]]
Matrix(aug).rref()
(Matrix([
 [1, 0, 0, -3, 0],
 [0, 1, 0,  0, 0],
 [0, 0, 1, -1, 0]]),
 (0, 1, 2))

위 결과와 같이 확대행렬의 기약행사다리꼴에서 1개의 자유변수(x4)가 존재합니다. 그러므로 나머지 변수는 그 자유변수 값에 따라 결정되어집니다. 즉, 다음과 같이 나타낼 수 있습니다.

행렬 V에 대응되는 변수 벡터 x는 다음과 같이 4×1의 형태이어야 합니다.

x1 = x4,  x2 = 0,  x3 = x4

결론적으로 자명하지 않은 해(nontrivial solution)가 존재하므로 선형 종속 관계에 있습니다.

자명한 해와 자명하지 않은 해는 각각 선형독립과 종속임을 의미합니다. 다음과 같이 정리될 수 있습니다.

(행의 수 > 열의 수) ∩ (자유변수가 없음)
 ⇔ 자명한 해가 존재하므로 선형 독립
(행의 수 < 열의 수) ∩ (자유변수 존재)
 ⇔ 자명하지 않은 해를 가지므로 선형종속

댓글

이 블로그의 인기 게시물

[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