📖 행렬은 뭔가요?
# numpy 에선 행(row)이 기본 단위입니다.
X = np.array([[1, -2, 3],
[7, 5, 0],
[-2, -1, 2]])
📖 행렬을 이해하는 방법 (1)
📖 행렬의 덧셈, 뺄셈, 성분곱, 스칼라곱
📖 행렬 곱셈
X = np.array([[1, -2, 3],
[7, 5, 0],
[-2, -1, 2]])
Y = np.array([[0 ,1],
[1, -1],
[-2, 1]])
# numpy에선 @ 연산을 사용한다
X @ Y
array([[-8, 6], [ 5, 2], [-5, 1]])
📖 행렬도 내적이 있을까?
np.inner
는 i번째 행벡터와 j번째 행벡터 사이의 내적을 성분으로 가지는 행렬을 계산함X = np.array([[1, -2, 3],
[7, 5, 0],
[-2, -1, 2]])
Y = np.array([[0, 1, -1],
[1, -1, 0]])
np.inner(X, Y)
array([[-5, 3], [ 5, 2], [-3, -1]])
📖 행렬을 이해하는 방법 (2)
📖 역행렬 이해하기
X = np.array([[1, -2, 3],
[7, 5, 0],
[-2, -1, 2]])
np.linalg.inv(X)
array([[ 0.21276596, 0.0212766 , -0.31914894], [-0.29787234, 0.17021277, 0.44680851], [ 0.06382979, 0.10638298, 0.40425532]])
X @ np.linalg.inv(X)
array([[ 1.00000000e+00, 0.00000000e+00, 0.00000000e+00], [ 0.00000000e+00, 1.00000000e+00, 0.00000000e+00], [-5.55111512e-17, 0.00000000e+00, 1.00000000e+00]])
Y = np.array([[0, 1],
[1, -1],
[-2, 1]])
np.linalg.pinv(Y)
array([[ 5.00000000e-01, 1.11022302e-16, -5.00000000e-01], [ 8.33333333e-01, -3.33333333e-01, -1.66666667e-01]])
np.linalg.pinv(Y) @ Y
array([[ 1.00000000e+00, -2.22044605e-16], [ 1.11022302e-16, 1.00000000e+00]])
📖 응용 1: 연립방정식 풀기
np.linalg.pinv
를 이용하면 연립방정식의 해를 구할 수 있다.📖 응용 2: 선형회귀분석
np.linalg.pinv
를 이용하면 데이터를 선형모델(linear model)로 해석하는 선형회귀식을 찾을 수 있다.# Scikit Learn 을 활용한 회귀분석
from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(X, y)
y_test = model.predict(x_test)
# Moore-Penrose 역행렬
X_ = np.array([np.append(x,[1]) for x in X]) # intercept 항 추가
beta = np.linalg.pinv(X_) @ y
y_test = np.append(x, [1]) @ beta
<이 게시물은 임성빈 교수님의 '행렬은 뭔가요?' 강의 자료를 참고하여 작성되었습니다.>
본 포스트의 학습 내용은 [부스트캠프 AI Tech 5기] Pre-Course 강의 내용을 바탕으로 작성되었습니다.
부스트캠프 AI Tech 5기 Pre-Course는 일정 기간 동안에만 운영되는 강의이며,
AI 관련 강의를 학습하고자 하시는 분들은 부스트코스 AI 강좌에서 기간 제한 없이 학습하실 수 있습니다.
(https://www.boostcourse.org/)