본문 바로가기

반응형

Theory

(53)
Sparse Matrix (희소행렬) 구현하기 행렬 곱하기는 행렬 크기가 클수록 많은 연산량이 소요됩니다. 만약 행렬에 0이 대부분이고 0이 아닌 요소가 (non-zero elements) 매우 적은 경우 0은 곱연산에 의미가 없으므로 일반적인 행렬 곱연산은 비효율적이겠죠. 이럴때 효율적으로 행렬 곱을 수행할 수 있는 방법은 sparse matrix (희소행렬) 형태로 행렬을 재구성하는 것입니다. 희소행렬은 0이 아닌 요소에 대해서만 (행 인덱스, 열 인덱스, 값)을 가진 형태로 0이 아닌 요소만 저장하고 불필요한 0인 요소는 따로 저장하지 않습니다. Scipy 라이브러리의 sparse matrix 모듈에 관련 함수들이 구현되어 있고 이번 포스트에서는 raw한 파이썬으로 구현해보도록 하겠습니다. Data structure 먼저 희소행렬을 구성하기 위..
Maximum Likelihood Estimation & Maximum A Posteriori Maximum likelihood estimation (MLE) MLE (최대우도법)은 주어진 데이터셋 $D$에 대해 $D$를 가장 잘 설명하는 (likelihood) 모델의 파라미터 $w$를 찾는 방법입니다. Likelihood 란 특정한 파라미터로 정의된 모델의 분포가 데이터에 대해 얼마나 잘 들어맞는지에 대한 통계적인 정의로 확률은 단순히 정의된 확률분포 상에서의 값을 말하지만 likelihood 는 데이터 분포에 모델 분포가 얼마나 잘 들어맞는지를 뜻합니다. 즉, MLE는 likelihood 함수 $p(D|w)$ 가 최대화되는 $\hat{w}$를 찾는 방법이고 보통 로그를 취해 negative log-likelihood (NLL) 를 최소화하는 방향으로 식을 변환합니다. $\hat{w}=argma..
Compositional Data 세상에는 이미지, 음성, 로그 등의 많은 종류의 데이터가 다양한 분야에 존재합니다. 특히, 생물학, 화학, 지질학 등의 자연과학에서는 다음 표와 같이 다양한 구성 요소가 퍼센트로 표현되어 합이 100 (혹은 1) 으로 표현되는 데이터가 많은데요, 이러한 데이터를 compositional data 라고 합니다. 즉, 확률, 구성성분, 퍼센트, ppm 등으로 표현되는 모든 류의 데이터가 compositional data 가 되는 것이죠. Data Component 1 Component 2 Component 3 Component 4 Sum Data 1 20 30 20 30 100 Data 2 25 25 25 25 100 Data 3 15 55 15 15 100 다른 종류의 데이터와는 다른 composition..
Classification - Logistic Regression (2) Classification - Logistic Regression (1) 지난 포스트에 이어 이번 포스트에서는 파이썬을 이용해 logistic regression 을 수행해보려 합니다. 파이썬에서는 sklearn.linear_model 모듈의 LogisticRegression 함수를 사용하며 간단한 iris (붓꽃 데이터)에 대해 실험해 보겠습니다. 붓꽃 데이터는 sklearn.datasets 안에 들어있는 toy dataset으로 150개의 데이터와 5개의 컬럼으로 (Sepal Length/Width, Petal Length/Width, Species) 이루어진 데이터로 타겟은 Species 열이며 3 종류로 구분합니다. 여기서는 2/3 번째 열인 꽃잎의 길이와 너비 정보만을 이용하여 붓꽃의 종류를 예..
Classification - Logistic Regression (1) 회귀 분석에서는 종속 변수가 연속적인 값을 가질 때 여러 독립 변수의 선형결합으로 종속 변수의 값을 예측했습니다. 하지만 종속 변수가 범주형일때, 예를 들어 남성/여성이나 나라 등 연속되지 않은 범주의 형태를 가질때에는 분류 (classification) 의 형태로 예측을 수행해야 합니다. 이번 포스트에서는 분류 분석에서 가장 기본적인 Logistic Regression에 대해 살펴보도록 하겠습니다. Logistic Regression은 이름에 "회귀"가 붙어있는 것처럼 선형 회귀를 분류 분석으로 연장한 것으로 두 개의 범주로 나누는 binary classification 부터 세 개 이상의 범주로 분류하는 multi-class classification 모두에 대해 적용할 수 있는 가장 기본적인 분류 ..
Regression - 다항식을 이용한 비선형 회귀 지난 포스트에서 수행한 선형 회귀는 독립 변수들의 선형 결합으로 종속 변수를 표현하기 때문에 변수들이 선형으로 분포하지 않거나 구간 별로 기울기가 다르게 적용되는 경우 설명에 한계가 있습니다. 이를 해결하기 위한 가장 간단한 방법으로는 각 독립 변수에 대한 고차원의 다항식을 적용하여 비선형적으로 종속 변수를 표현하는 방법이 있습니다. Examples Simple example 간단한 numpy array를 선언하여 종속 변수에 대해 독립 변수를 다항식으로 구성하여 설명해 보겠습니다. 독립 변수의 다항식화는 sklearn.preprocessing 모듈의 PolynomialFeatures 함수를 사용해 쉽게 구현할 수 있으며 2차원의 데이터 [a,b]를 가지고 있을 때 디폴트로 [1,a,b,a^2,ab,b^..
Regression - 다중공선성 (Multicollinearity) 다중 선형 회귀에서의 전제는 독립 변수간 상관 관계가 없이 서로 독립이어야 한다는 점입니다. 만약 독립 변수간에 선형 관계가 존재한다면 이는 다중 선형 회귀에서 다중공선성 (multicollinearity)가 존재한다고 하며 이는 회귀 분석에 악영향을 끼치기 때문에 모델 훈련 전 미리 제거해야 합니다. 선형 회귀는 기본적으로 다음 수식에서 $X^T X$의 역행렬을 구하는 문제입니다. 만약 하나의 독립 변수가 다른 독립 변수에 대해 선형적으로 설명된다면 $X$의 한 열이 다른 열의 선형 결합으로 표현되므로 행렬의 rank가 줄어들어 invertible 해지지 않습니다. 물론 완벽히 선형 결합으로 표현되지는 않을테니 역행렬 자체는 구할 수 있겠으나 수치계산상으로 불안정해지고 회귀 계수의 표준오차와 p-val..
Regression - 다중 선형 회귀 in Python 이번 포스트에서는 지난 포스트에서 다룬 다중 선형 회귀 모델을 파이썬으로 실험해보려 합니다. 지난번 보스톤 주택 가격 데이터로부터 $X, y$를 설정하고 훈련/테스트 데이터를 sklearn.model_selection 모듈의 train_test_split 함수를 통해 구성합니다. import pandas as pd df = pd.read_csv('/content/drive/MyDrive/Posco/Regression/Data/housing_data.txt', sep='\s+') df.columns = ['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT', 'MEDV'] df.head()..

반응형