회귀(Regression) 모델
연속적인 값을 예측하는 문제를 해결하는 데 사용됨
데이터의 특성과 목적에 따라 적절한 회귀 모델을 선택
- 선형 회귀(Linear Regression) : 기본적인 선형 관계를 모델링
- 다항 회귀(Polynomial Regression) : 비선형 관계를 모델링
- 리지 회귀(Ridge Regression) : 과적합 방지를 위해 L2 정규화 적용
- 라쏘 회귀(Lasso Regression) : 가중치를 조정하여 불필요한 변수를 제거
선형 회귀(Linear Regression)
종속 변수(y)와 하나 이상의 독립 변수(x) 간의 선형 관계를 모델링하는 기법
- 단순 선형 회귀 : 하나의 독립 변수와 종속 변수 간의 관계를 모델링
𝑦 = β₀ + β₁𝑥 + Ⲉ - 다중 선형 회귀 : 여러 개의 독립 변수와 종속 변수 간의 관계를 모델링
𝑦 = β₀ + β₁𝑥₁ + β₂𝑥₂+ ••• + β𝒏𝑥𝒏 + Ⲉ
y : 종속 변수 (목표 값)
𝑥₁, 𝑥₂, •••, 𝑥𝒏 : 독립 변수
β₀ : 절편 (Intercept)
β₁ + β₂+ ••• + β𝒏 : 회귀 계수 (Regression Coefficients)
Ⲉ : 오차항 (Error Term)
Scikit-learn을 활용한 선형 회귀 모델 구현
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
# 데이터 생성
X = np.array([[1, 1], [2, 2], [3, 3], [4, 4], [5, 5], [6, 6]])
y = np.array([1, 2, 3, 4, 5, 6])
# 데이터 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 모델 생성 및 학습
model = LinearRegression()
model.fit(X_train, y_train)
# 예측 및 평가
y_pred = model.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print(f'MSE: {mse}, R^2 Score: {r2}')
"""
MSE:1.5777218104420236e-30, R^2 Score:1.0
"""
다항 회귀(Polynomial Regression)
독립 변수와 종속 변수 간의 비선형 관계를 모델링하는 기법
독립 변수의 다항식을 사용하여 모델링
𝑦 = β₀ + β₁𝑥 + β₂𝑥²+ ••• + β𝒏𝑥ⁿ + Ⲉ
Scikit-learn을 활용한 다항 회귀 모델 구현
from sklearn.preprocessing import PolynomialFeatures
# 데이터 생성
X = np.array([[1], [2], [3], [4], [5], [6]])
y = np.array([1, 4, 9, 16, 25, 36])
# 다항 특징 생성 (차수 2)
poly = PolynomialFeatures(degree=2)
X_poly = poly.fit_transform(X)
# 데이터 분할 및 학습
X_train, X_test, y_train, y_test = train_test_split(X_poly, y, test_size=0.2, random_state=42)
model = LinearRegression()
model.fit(X_train, y_train)
# 예측 및 평가
y_pred = model.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print(f'MSE: {mse}, R^2 Score: {r2}')
"""
MSE: 4.30175712378333e-29, R^2 Score: 1.0
"""
리지 회귀 (Ridge Regression)
선형 회귀에 L2 정규화(Regularization)를 적용하여 과적합(Overfitting)을 방지하는 기법
리지 회귀의 손실 함수
여기서 λ값이 클수록 모델의 가중치가 작아지며, 과적합을 방지할 수 있음
Scikit-learn을 활용한 리지 회귀 모델 구현
from sklearn.linear_model import Ridge
# 데이터 생성
X = np.array([[1, 1], [2, 2], [3, 3], [4, 4], [5, 5], [6, 6]])
y = np.array([1, 2, 3, 4, 5, 6])
# 데이터 분할 (훈련 데이터와 테스트 데이터)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 리지 회귀 모델 생성 및 학습
model = Ridge(alpha=1.0)
model.fit(X_train, y_train)
# 예측 및 평가
y_pred = model.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print(f'MSE: {mse}, R^2 Score: {r2}')
"""
MSE: 0.07644628099173564, R^2 Score: 0.6942148760330574
"""
라쏘 회귀 (Lasso Regression)
선형 회귀에 L1 정규화(Regularization)를 적용하여 가중치를 0으로 만들고 불필요한 변수를 제거하는 기법
특징 선택(Feature Selection)에도 유용하게 사용됨
*L1 정규화 : 일부 회귀 계수를 0으로 만들어 특징 선택을 수행 - 모델의 해석 가능성을 높이고, 불필요한 특징을 제거하는 데 유용
라쏘 회귀의 손실 함수
Scikit-learn을 활용한 라쏘 회귀 모델 구현
from sklearn.linear_model import Lasso
# 데이터 생성
X = np.array([[1, 1], [2, 2], [3, 3], [4, 4], [5, 5], [6,6]])
y = np.array([1, 2, 3, 4, 5, 6])
# 데이터 분할 (훈련 데이터와 테스트 데이터)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 라쏘 회귀 모델 생성 및 학습
model = Lasso(alpha=0.01)
model.fit(X_train, y_train)
# 예측 및 평가
y_pred = model.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print(f'MSE: {mse}, R^2 Score: {r2}')
"""
MSE: 0.0005919999999999797, R^2 Score: 0.9976320000000001
"""
'⊢MachineLearning' 카테고리의 다른 글
데이터 전처리 실습 흐름/코드 정리 (0) | 2025.03.06 |
---|---|
데이터 전처리(Data Cleaning) (0) | 2025.03.01 |
Kaggle과 Kaggle 데이터셋 다운로드 (0) | 2025.02.17 |
혼동행렬을 활용한 분류 성능 지표 (1) | 2025.02.02 |
titanic 데이터셋 분석 및 모델 학습 (0) | 2025.01.29 |