머신러닝 모델 소개 (1) - 선형 회귀 모델 (Linear Regression)

Mozen

·

2023. 7. 4. 21:14

반응형

 

머신러닝 모델 소개 시리즈의 첫 번째 글입니다. 가장 대표적이면서도 기본적인 머신러닝 모델인 선형 회귀 모델 (Linear Regression model)을 소개하고, 파이썬의 Scikit-learn 라이브러리를 활용하여 실제 데이터에 적용하는 방법을 알아보겠습니다.

 

1. 모델 설명

   

    데이터 분석과 예측 모델링은 현대 사회에서 중요한 역할을 수행합니다. 이 중 선형 회귀 모델(Linear Regression model)은 가장 기본적이면서도 강력한 예측 모델 중 하나입니다. 선형 회귀 모델은 데이터의 선형 관계를 기반으로 예측을 수행하는 모델로, 독립 변수와 종속 변수 사이의 선형 관계를 설명합니다. 선형 회귀는 주어진 데이터와 예측 데이터의 오차 평균을 최소화할 수 있는 최적의 기울기와 절편을 찾는 것을 목적으로 합니다. 아래 그림은 선형 회귀 분석의 예시를 보여줍니다.

Figure 1. 선형 회귀 분석의 예

    선형 회귀에서 최적의 기울기와 절편을 찾는 방식에는 여러 가지가 있습니다. 대표적인 방법으로는 정규 방정식(Normal Equation)경사하강법(Gradient Descent)이 있습니다.

반응형

    우선 정규 방정식은 최소제곱해(Least Squares Solution)을 찾기 위한 대표적인 방법으로 대수적인 방법을 통해 최소제곱해를 구합니다. 이 때, 최소제곱해를 찾아 선형회귀 모델 추정하는 법을 OLS(Ordinary least squares)라고 부르며 최소자승법, 최소이승법, 최소제곱법 등으로 불렸으나 최소제곱법으로 명칭이 통일되었다고 합니다. Scikit-learn의 경우, 선형회귀를 할 때 Ordinary Least Squares를 사용하고 있습니다. 참고로 Scikit-learn은 파이썬(Python)에서 사용할 수 있는 오픈 소스 머신러닝 라이브러리입니다. Scikit-learn은 데이터 분석과 머신러닝 모델 구축을 위한 다양한 도구와 알고리즘을 제공하여, 쉽고 효율적으로 머신러닝 모델을 개발할 수 있도록 도와줍니다. Scikit-learn에 대한 자세한 설명은 다른 포스팅에서 다뤄보도록 하겠습니다.

 

    경사하강법은 손실 함수의 1차 미분계수를 이용해 함수의 최솟값을 찾아가는 방법으로, 손실 함숫값이 낮아지는 방향으로 독립 변수 값을 변형시켜 가면서 최종적으로 최소 함숫값을 갖도록 하는 독립 변수 값을 찾는 방법입니다.

 

    정규 방정식은 평균제곱오차를 이용하여 만들어지며 행렬 연산을 통해 한 번에 최적해를 구하기 때문에 행렬의 크기가 커질수록 계산 시간이 오래 걸립니다. 경사하강법은 기본적으로 소요되는 시간이 길지만, 행렬의 크기가 커지더라도 일정 시간 안에 최적해를 찾습니다. , 행렬의 크기가 크지 않다면 정규방정식, 크다면 경사하강법을 사용하는 것이 좋습니다. 또한, 경사하강법은 지역 최저점(local minima)에 빠질 수 있다는 문제점이 있습니다.

 

 

2. Scikit-learn 라이브러리를 활용한 선형 회귀 모델 사용 방법

   

    파이썬의 Scikit-learn 라이브러리를 활용하여 실제 데이터에 선형 회귀 모델을 적용하는 방법을 알아보겠습니다. 선형 회귀 모델은 종속 변수와 독립 변수 사이의 선형 관계를 표현하는 방정식을 찾는 과정입니다. 가장 간단한 형태의 선형 회귀 모델은 단순 선형 회귀로, 하나의 독립 변수와 하나의 종속 변수 사이의 관계를 모델링합니다. 다중 선형 회귀는 여러 개의 독립 변수와 하나의 종속 변수 간의 관계를 모델링하는 방법입니다. 선형 회귀 모델은 주어진 데이터에 가장 잘 맞는 직선을 찾아내어 예측을 수행하며, 모델의 성능은 주로 평균 제곱 오차(Mean Squared Error)를 통해 평가됩니다.

 

    Scikit-learn은 파이썬에서 머신러닝 작업을 수행하기 위한 많은 기능을 제공하는 도구입니다. Scikit-learn의 선형 회귀 모델은 간단하게 사용할 수 있으며, 다양한 옵션을 통해 모델을 조정할 수 있습니다. 이제 Scikit-learn을 사용하여 선형 회귀 모델을 구축하는 방법을 살펴보겠습니다.

 

    먼저, Scikit-learn을 설치해야 합니다. 파이썬의 패키지 관리자인 pip를 사용하여 다음과 같이 설치할 수 있습니다. (단, Google의 Colaboratory를 이용하면 별도의 설치 작업이 필요하지 않습니다.)

 

pip install scikit-learn

   

    선형 회귀 모델을 사용하기 위해 필요한 라이브러리를 임포트 합니다.

 

from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

   

    이제 사용할 데이터를 준비해야 합니다. Scikit-learn에서 제공하는 데이터세트(dataset)인 당뇨병 데이터세트(diabetes dataset)를 사용해 보겠습니다. 당뇨병 데이터세트는 442명의 환자를 대상으로 측정한 10가지 생리적 변수(나이, 성별, 체중, 혈압 등)와 1년 후의 질병 진행 지표로 구성되어 있습니다.

 

import numpy as np
from sklearn import datasets

diabetes_X, diabetes_y = datasets.load_diabetes(return_X_y=True)

   

    데이터를 학습용과 테스트용으로 나누는 것이 중요합니다. Scikit-learn의 train_test_split 함수를 사용하여 데이터를 나눌 수 있습니다. 아래 코드에서 'test_size=0.2'란 테스트 데이터세트를 전체 데이터세트의 20%로 설정한다는 뜻입니다. 또한, 'random_state=42'는 코드의 재현성을 확보하기 위한 설정입니다. 만약 'random_state'가 특정 숫자로 정의되어 있지 않으면, 코드를 실행할 때마다 학습 데이터세트와 테스트 데이터세트의 데이터가 달라집니다. 'random_state'의 숫자는 0 이상의 정수로 아무 숫자를 사용해도 괜찮습니다.

 

# 학습용 데이터와 테스트용 데이터 분리
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

   

    이제 선형 회귀 모델을 만들고 학습시킬 차례입니다. Scikit-learn의 LinearRegression 클래스를 사용하여 모델을 초기화하고 fit 메서드를 사용하여 모델을 학습시킵니다.

 

# 선형 회귀 모델 초기화
model = LinearRegression()

# 모델 학습
model.fit(X_train, y_train)

   

    모델 학습이 완료되면, 테스트 데이터를 사용하여 예측을 수행하고 성능을 평가할 수 있습니다.

 

# 테스트 데이터 예측
y_pred = model.predict(X_test)

# 평균 제곱 오차 계산
mse = mean_squared_error(y_test, y_pred)

   

     위와 같이 선형 회귀 모델을 구축하고 예측을 수행한 뒤 평균 제곱 오차를 계산하여 모델의 성능을 평가할 수 있습니다.


    선형 회귀 모델은 다양한 실제 사례에 적용될 수 있습니다. 예를 들어, 주택 가격 예측, 매출 예측, 고객 선호도 예측 등 다양한 예측 문제에 적용할 수 있습니다. Scikit-learn을 사용하면 간편하게 선형 회귀 모델을 구축하고 데이터를 분석할 수 있으며, 다른 머신러닝 알고리즘과 함께 활용하여 더 복잡한 예측 모델을 구축할 수도 있습니다.


    이처럼 Scikit-learn을 활용하여 선형 회귀 모델을 구축하는 방법과 실제 데이터에 적용하는 방법을 알아보았습니다. 데이터 분석과 예측 모델링은 데이터 기반 의사 결정에 중요한 역할을 할 수 있으며, Scikit-learn을 사용하면 보다 쉽고 효율적으로 모델을 개발할 수 있습니다.

 

머신러닝 모델 소개 시리즈

2023.07.04 - [인공지능, 머신러닝, 딥러닝] - 머신러닝 모델 소개 (1) - 선형 회귀 모델 (Linear Regression)

2023.07.10 - [인공지능, 머신러닝, 딥러닝] - 머신러닝 모델 소개 (2) - 서포트벡터머신 (Support Vector Machine, SVM)

2023.07.10 - [인공지능, 머신러닝, 딥러닝] - 머신러닝 모델 소개 (3) - KNN (K-Nearest Neighbor)

2023.07.10 - [인공지능, 머신러닝, 딥러닝] - 머신러닝 모델 소개 (4) - 랜덤 포레스트 (Random Forest)

2023.07.10 - [인공지능, 머신러닝, 딥러닝] - 머신러닝 모델 소개 (5) - 에이다부스트 (AdaBoost)

2023.07.11 - [인공지능, 머신러닝, 딥러닝] - 머신러닝 모델 소개 (6) - 다층 퍼셉트론 (Multilayer Perceptron)

반응형