A ship in harbor is safe, but that is not what ships are built for.

STUDY/Machine Learning

Ch02. 단순 선형 회귀(Simple Linear Regression)

플리피나리 2025. 2. 6. 18:56
반응형

단순 선형 회귀식(Simple Linear Regression)

정의

하나의 독립 변수(입력 변수, x)를 사용하여 종속 변수(출력 변수, y)를 예측하는 선형 회귀 모델

목적

주어진 데이터셋에서 최적의 회귀 계수( \(b_1\) )와 절편( \(b_0\) )을 찾아서, 새로운 x 값이 주어졌을 때 y 값을 예측하는 것

 

$$ \hat y = b_0 + b_1X_1 $$

  • \( \hat y\) : Dependent variable(종속변수) → 예측하려는 값
  • \(X_1\) : Independent variable(독립변수)
  • \(b_0\) : Constant
  • \(b_1\) : Slope coefficient(기울기)

 

최소 제곱법(Ordinary Least Squares)

  • 최적의 \( b_0 \) 과 \( b_1 \) 을 결정하는 방법
  • 잔차(residual)가 최소가 되도록 잡는 방법
  • \( SUM(y_i - \hat{y_i})^2 \) 이 최소가 되도록 기울기와 상수 설정
  • \( y_i \) 는 실제값, \( \hat{y_i} \) 는 예상값

 

Simple Linear Regression with Python

Importing the libraries

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

 

Importing the dataset

dataset = pd.read_csv('Salary_Data.csv')
X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, -1].values

Tip) 종속 변수 X의 value는 이중배열로 오는 것을 알 수 있다. 이는 이후 새로운 X 값을 넣어 예측하고자 할 때 이중 배열 형태로 넣어줘야 한다는 것을 알 수 있다.

 

Splitting the dataset into the Training set and Test set

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

Tip) test_size 매개변수는 전체 dataset에서 얼마나 test set으로 사용할 지 설정하는 역할이고, random_state 매개변수는 데이터 분할 시 랜덤성을 제어하는 역할을 한다. 여기서는 test_size=0.2로 전체 데이터셋의 20퍼센트를 test set으로 사용하고, random_state=0으로 값을 고정해 매번 같은 방식으로 데이터를 섞고, 동일한 train/test set을 유지하도록 한다.

 

Training the Simple Linear Regression model on the Training set

from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X_train, y_train)

주어진 training dataset을 이용해 훈련시켜(fit) 최적의 기울기와 상수를 찾아낸다.

 

Predicting the Test set results

y_pred = regressor.predict(X_test)

훈련된 모델을 통해 test dataset의 결과가 나온 걸 확인할 수 있다.

 

Visualising the Training set results

plt.scatter(X_train, y_train, color='red')
plt.plot(X_train, regressor.predict(X_train), color='blue')
plt.title('Salary vs Experience (Training set)')
plt.xlabel('Years of Experience')
plt.ylabel('Salary')
plt.show()

Tip) 빨간색 점산도는 training dataset에서의 X값과 실제 y값, 파란색 선은 training dataset을 통해 학습시킨 단순선형회귀 그래프(예측)이다.

 

Visualising the Test set results

plt.scatter(X_test, y_test, color='red')
plt.plot(X_test, y_pred, color='blue')
plt.title('Salary vs Experience (Test set)')
plt.xlabel('Years of Experience')
plt.ylabel('Salary')
plt.show()

Tip) 빨간색 점산도는 test dataset에서의 X값과 실제 y값, 파란색 선은 test dataset 을 통해 학습시킨 단순선형회귀 그래프(예측)이다. 이때 X_train이나 X_train으로 예측한 y의 값은 모두 파란색 simple linear regression 모델 위에 존재하기 때문에 plt.plot(X_train, regressor.predict(X_train), color='blue')과 plt.plot(X_test, y_pred, color='blue') 모두 같은 결과를 나타낸다.

 

 

한계

1. 선형 관계 가정 : 데이터가 선형 관계가 아닐 경우 부정확한 예측한다.

2. 이상치에 민감 : 데이터에 이상치가 많을 경우 회귀선이 영향을 많이 받는다.

3. 단일 변수만 사용 : 현실 세계에서는 한 문제에 대해 보통 여러 요인들이 작용한다.

반응형