경영과학/최적화, 다변량 통계분석, 머신러닝을 제대로 이해하고 활용하려면 선형대수(linear algebra)와 미적분(
따라서, 경영과학/최적화에 들어가기 전에 그 기초가 되는 행렬(matrix)에 대한 기초와 행렬 연산에 대해서 알아보도록 하겠습니다. 행렬을 사용하면 1차 연립방정식을 시각적으로 보기에 깔끔하고 편리하게 나타낼 수 있으며, 최적화 기법 중에 선형계획법을 풀 때 이를 사용할 수 있고, 컴퓨터로 해를 찾을 때도 행렬식으로 목적함수와 제약조건을 입력하게 됩니다. 왜 행렬에 대한 기본 개념과 연산에 대해서 먼저 짚고 넘어가야 하는지 이해가 되셨을 겁니다.
이공계 계열을 전공한 분이라면 기본적으로 선형대수, 미적분은 배웠을 텐데요, 문과생들은 그렇지 못하다보니 처음에 최적화, 다변량 통계분석에 나오는 수식을 보고는 이게 무슨 소리인지 이해를 못해서 어려움을 겪고, 심하면 좌절하고 포기하기도 쉽답니다. (제가 처음에 그랬습니다. 시계열분석 공부하다가 수식에 질려서 토할 것 같은 어지럼증을...^^;)
행렬(matrix)이란 숫자나 상징, 표현을 직사각형 또는 정사각형 모양으로 m행과 n열로 배열하고 괄호로 묶은 것을 말합니다(* Wikipedia : "In mathematics, a matrix (plural matrices) is a rectangular array of numbers, symbols, or expressions, arranged in rows and columns"). 괄호 안의 각각의 수를 성분(entries)이라고 하며, m행 n열로 구성된 행렬은 'm x n 행렬'이라고 말하며, 아래와 같이 표기합니다.
[ m * n 행렬 (m * n matrix) ]
행(column)과 열(row)의 개수가 n개로 같은 행렬을' n차 정방행렬(a square matrix of order n)'이라고 하며, 아래와 같이 표기합니다.
[ n차 정방행렬 (a square matrix of order n) ]
1차 연립방정식을 행렬을 이용해서 표기하면 아래와 같이 할 수 있습니다. 왼쪽의 연립방정식 대비 오른쪽의 행렬이 많이 깔끔해보이지요? (경영과학 처음 배울 때 가우스 소거법에 아래 행렬 표기를 사용한답니다.)
[ 1차 연립방정식(simultaneous equations) 의 행렬 표기 ]
R을 활용하여 행렬(matrix)를 입력하는 방법에는 (1) rbind(), (2) cbind(), (3) matrix()의 3가지가 있습니다. 아래에 차례대로 소개하였습니다.
> ##--------------------------------------------------------------------- > ## matrix algebra > ##--------------------------------------------------------------------- > > # data key-in way 1 : rbind() > row_1 <- c(1, 2, 3, 4) > row_2 <- c(5, 6, 7, 8) > > data_rbind <- rbind(row_1, row_2) > data_rbind [,1] [,2] [,3] [,4] row_1 1 2 3 4 row_2 5 6 7 8 > > # column naming > colnames(data_rbind) <- paste("col_", 1:4, sep="") > > data_rbind col_1 col_2 col_3 col_4 row_1 1 2 3 4 row_2 5 6 7 8 > > > # data key-in way 2 : cbind() > column_1 <- c(1, 5) > column_2 <- c(2, 6) > column_3 <- c(3, 7) > column_4 <- c(4, 8) > > data_cbind <- cbind(column_1, column_2, column_3, column_4) > data_cbind column_1 column_2 column_3 column_4 [1,] 1 2 3 4 [2,] 5 6 7 8 > > # row naming > rownames(data_cbind) <- paste("row_", 1:2, sep="") > data_cbind column_1 column_2 column_3 column_4 row_1 1 2 3 4 row_2 5 6 7 8 > > > # data key-in way 3 : matrix() > raw_data <- c(1, 2, 3, 4, 5, 6, 7, 8) > data_matrix <- matrix(raw_data, byrow=TRUE, nrow=2) > data_matrix [,1] [,2] [,3] [,4] [1,] 1 2 3 4 [2,] 5 6 7 8 > > # giving names to the rows and columns of the data table : dimnames() > dimnames(data_matrix) <- list("row" = c("row_1", "row_2"), + "column" = c("col_1", "col_2", "col_3", "col_4")) > > data_matrix column row col_1 col_2 col_3 col_4 row_1 1 2 3 4 row_2 5 6 7 8
|
행렬에서 행이나 열을 하나만 인덱싱하게 되면 벡터로 바뀌게 되는데요, 벡터가 아니라 행렬로 계속 차원을 유지하고 싶을 경우에는 drop=FALSE 옵션을 써주면 됩니다.
|
다음번 포스팅에서는 특수한 형태의 행렬에 대해서 알아보도록 하겠습니다.
많은 도움 되었기를 바랍니다.
행렬, 벡터 관련 포스팅은 아래 링크를 걸어놓았습니다.
☞ 행렬의 기본 연산 (+, -, *, /, ^, %*%, colMeans(), rowMeans(), colSums(), rowSums())
☞ 벡터의 기본 이해와 연산 (vector: addition, subtraction, multiplication by scalar)
☞ 벡터의 곱 (1) 내적 (inner product, dot product, scalar product, projection product)
☞ 벡터의 곱 (2) 외적 (outer product, cross product, vector product, tensor product)
이번 포스팅이 도움이 되었다면 아래의 공감 ♡ 꾸욱~ 눌러주세요. ^^
'R 분석과 프로그래밍 > R 선형대수' 카테고리의 다른 글
R (6) 벡터의 곱 - [1] 내적 (inner product, dot product, scalar product, projection product) (4) | 2015.12.08 |
---|---|
R (5) 벡터(Vector)의 기본 이해와 연산 (합, 차, 스칼라배) (1) | 2015.12.05 |
R (4) 역행렬(inverse of a matrix, invertible matrix) : ginv(), 여인수(cofactor) (1) | 2015.12.02 |
R (3) 역행렬(inverse of a matrix, invertible matrix) : ginv(), 가우스 소거법(Gauss-Jordan elimination method) (5) | 2015.12.01 |
R (2) 특수한 형태의 행렬 (0) | 2015.11.30 |