회귀기법이란?
- 회귀 모델은 연속적인 값을 예측하는 문제를 다루는 기법입
주요 회귀 모델
- 선형 회귀, 다항 회귀, 리지 회귀, 라쏘 회귀.
선형 회귀
선형 회귀는 종속 변수와 독립 변수 간의 선형 관계를 모델링합니다.
1. 선형 회귀 (Linear Regression)
차이점:
- 선형 회귀는 종속 변수와 독립 변수 간의 선형 관계를 모델링합니다.
- 단순 선형 회귀는 하나의 독립 변수와 하나의 종속 변수 간의 관계를 모델링하며, 다중 선형 회귀는 여러 독립 변수와 하나의 종속 변수 간의 관계를 모델링합니다.
장점:
- 구현이 간단하고 해석이 쉬워 빠른 초기 분석에 유용합니다.
- 수학적으로 간단하고 계산 비용이 적어 빠릅니다.
단점:
- 선형 관계만을 가정하므로, 실제 데이터가 비선형 관계일 경우 모델 성능이 떨어질 수 있습니다.
- 과적합 문제를 해결하기 위한 정규화 기능이 없어서 다수의 특성이 있을 때 과적합 위험이 존재합니다.
사용 용도:
- 독립 변수와 종속 변수 간의 관계가 선형적일 때 사용합니다.
- 예시: 주택 가격 예측, 간단한 수학적 모델링, 경제 지표 분석 등.
import numpy as np
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'Mean Squared Error: {mse}')
print(f'R^2 Score: {r2}')
단순 선형 회귀 vs 다중 선형 회귀
예시:
주택 가격(y)을 예측하는 모델에서, 단순 선형 회귀는 면적(x)만을 고려하지만, 다중 선형 회귀는 면적(x1), 방 개수(x2), 층수(x3) 등 여러 요인을 고려합니다.
다항 회귀
다항 회귀는 비선형 관계를 모델링하며, 독립 변수의 다항식을 사용합니다.
- 수식
예시:
학생의 시험 점수(y)를 예측할 때, 공부 시간(x1), 수면 시간(x2), 운동 시간(x3) 등 여러 요인을 고려하면서도 각 요인의 영향력을 균형 있게 조절하여 더 안정적인 예측을 할 수 있습니다.
2. 다항 회귀 (Polynomial Regression)
차이점:
- 다항 회귀는 비선형 관계를 모델링하기 위해 독립 변수의 다항식을 사용합니다.
- 기본적으로 선형 회귀를 확장한 모델로, 비선형 함수의 곡선 형태를 모델링할 수 있습니다.
장점:
- 비선형 관계를 다항식으로 모델링하여 선형 회귀의 한계를 극복할 수 있습니다.
- 적절한 차수를 선택하면 복잡한 관계도 모델링할 수 있습니다.
단점:
- 차수가 높을수록 모델이 복잡해지고 과적합(overfitting)의 위험이 커집니다.
- 모델이 너무 복잡하면 일반화 성능이 떨어질 수 있습니다.
사용 용도:
- 비선형 관계를 모델링해야 할 때 유용합니다.
- 예시: 주식 가격 예측, 물리학적 모델링, 경제 변수 간의 비선형 관계 분석 등.
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
# 데이터 생성
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'Mean Squared Error: {mse}')
print(f'R^2 Score: {r2}')
리지 회귀
3. 리지 회귀 (Ridge Regression)
리지 회귀는 선형 회귀의 일종으로, L2 정규화를 통해 회귀 계수의 크기를 제어하여 과적합을 방지.
- 수식
차이점:
- 리지 회귀는 선형 회귀에 L2 정규화(패널티)를 추가하여 모델의 복잡도를 줄이는 방법입니다.
- 회귀 계수의 크기를 제한하여 과적합을 방지합니다.
장점:
- 과적합을 방지하면서 모델의 복잡도를 제어할 수 있습니다.
- 다수의 특성이 있을 때 성능이 향상됩니다.
단점:
- L2 정규화는 계수를 0으로 만드는 특징 선택을 수행하지 않으므로, 특징 선택에 적합하지 않습니다.
- 모델 해석이 선형 회귀보다 복잡할 수 있습니다.
사용 용도:
- 다수의 독립 변수가 있을 때 과적합을 방지하고 모델 안정성을 높이기 위해 사용합니다.
- 예시: 고차원의 데이터, 예측 정확도가 중요한 모델에서 유용합니다.
from sklearn.linear_model import Ridge
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 = 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'Mean Squared Error: {mse}')
print(f'R^2 Score: {r2}')
라쏘 회귀
라쏘 회귀는 L1 정규화를 사용하여 특징 선택을 수행합니다.
- 수식
예시:
고객의 구매 금액(y)을 예측할 때, 나이(x1), 소득(x2), 과거 구매 이력(x3), 웹사이트 방문 횟수(x4) 등 다양한 특징 중에서 가장 중요한 특징만을 자동으로 선택하여 모델을 단순화할 수 있습니다.
4. 라쏘 회귀 (Lasso Regression)
차이점:
- 라쏘 회귀는 L1 정규화(패널티)를 사용하여 회귀 계수의 절대값 합을 최소화합니다.
- 일부 회귀 계수를 0으로 만들어 특징 선택을 수행할 수 있습니다.
장점:
- L1 정규화를 통해 특징 선택이 가능하여, 불필요한 변수 제거에 유용합니다.
- 과적합 방지와 함께 중요한 특성만을 선택하여 모델의 해석 가능성을 높일 수 있습니다.
단점:
- L1 정규화의 강도가 너무 크면 모델 성능이 저하될 수 있습니다.
- 특징 선택이 자동으로 되기 때문에, 모든 변수가 중요한 경우에는 성능이 떨어질 수 있습니다.
사용 용도:
- 변수 선택이 중요한 경우, 예를 들어 많은 변수를 다룰 때 불필요한 변수를 제거하고 모델을 간단화하려는 경우 사용합니다.
- 예시: 특성 선택을 통해 모델을 해석 가능하고 간단하게 만들 때, 또는 고차원 데이터에서 중요한 특성을 선택할 때 유용합니다.
from sklearn.linear_model import Lasso
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 = Lasso(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'Mean Squared Error: {mse}')
print(f'R^2 Score: {r2}')
'[Machine Learning]' 카테고리의 다른 글
[Machine Learning] Ensemble Learning 간단 정리 (0) | 2024.12.11 |
---|---|
[Machine Learning] Unsupervised Learning 정리 (0) | 2024.12.10 |
[Machine Learing] SVM, KNN, Naive Bayes, Decision Tree 정리 (2) | 2024.12.09 |
[Machine Learning] Data cleaning 과 Data Preprocessing 정리 (2) | 2024.12.05 |