회귀 모델이란?
회귀 모델은 머신러닝의 지도학습 중 하나로, 연속적인 수치 데이터를 예측하는데 사용된다.
즉, 입력데이터(feature) 에 따라 연속적인 출력 값(lable) 을 예측하는 모델이다
예를들어 주택가격예측, 주식시장의 변동 예측, 기온 예측 등이 회귀 문제에 해당
회귀 모델의 주요 특징
- 연속 데이터 예측 : 출력값은 이산적인 아닌 연속적인 값이다.
- 입출력 관계 : 독립변수(입력)와 종속변수(출력) 간의 관계를 수학적으로 모델링
- 손실 함수 : 일반적으로 예측 값과 실제 값 간의 차이를 최소화 하기 위해 평균제곱오차(MSE) 또는 평균절대오차(MAE) 를 사용한다
회귀 모델의 평가 지표
1. 평균 제곱 오차 (MSE)
- 예측 값과 실제 값의 차이를 제곱하여 평균을 구함
2. 평균 절대 오차 (MAE)
- 절대 오차를 평균
3. R^2 (결정 계수)
- 모델이 데이터를 얼마나 잘 설명하는지를 나타냄
- 값이 1에 가까울수록 모델성능이 더 좋음
회귀 모델의 종류
1. 선형 회귀 (Linear Regression)
- 독립변수(입력)와 종속변수(출력) 사이의 선형 관계를 모델링하여 연속적인 값을 예측하는데 사용
- 데이터를 기반으로 직선을 학습하여 데이터를 가장 잘 설명하는 모델을 만드는 것이 목표
1. 선형 회귀의 기본 아이디어
선형 회귀의 핵심 아이디어는 독립변수(X) 와 종속변수(y) 간의 관계를 직선으로 표현하는 것
방정식으로 나타내면 다음과 같다
2. 선형 회귀의 유형
1. 단순 선형 회귀
- 하나의 독립 변수와 하나의 종속 변수 간의 선형 관계를 모델링
- ex) 학생의 공부 시간에 따른 시험 점수 예측
2. 다중 선형 회귀
- 여러 개의 독립 변수를 사용하여 종속 변수를 모델링
- ex) 집의 면적, 위치, 방 개수 등을 기반으로 집값 예측
3. 선형 회귀의 목표 : 비용 함수 최소화
선형 회귀 모델의 목표는 데이터에 가장 적합한 직선을 찾는 것.
이를 위해 비용 함수(Cost Function) 을 최소화 한다.
일반적으로 MSE 를 사용
4. 가중치와 절편 계산
선형 회귀는 가중치(w) 와 절편(b)를 최적화하여 비용 함수(MSE) 를 최소화
일반적으로 두가지 방법을 사용
1. 정규 방정식(Noraml Equation)
- 데이터를 기반으로 직접 계산하여 최적의 w와 b를 구함
2. 경사 하강법(Gradient Descent)
- 초기 값을 설정하고, 비용 함수를 점진적으로 감소시키면서 최적의 값으로 수렴
5. 선형 회귀의 가정
선형 회귀는 다음과 같은 가정을 따른다
- 선형성 (Linearity) : 독립 변수와 종속 변수 간의 관계가 선형적이어야 함
- 독립성 (Independence) : 관측치들 간에 독립적이어야 함
- 등분산성 (Homoscedasticity) : 오류의 분산이 일정해야 함
- 정규성 (Mormality) : 오류가 정규 분포를 따라야 함
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'Mean Squared Error: {mse}')
print(f'R^2 Score: {r2}')
6. 선형 회귀의 한계
- 비선형 데이터에 부적합 : 독립 변수와 종속 변수 간의 관계가 선형이 아닐 경우 성능이 떨어짐
- 이상치에 민감 : 이상치가 모델의 성능에 큰 영향을 미침
- 다중 공선성 문제 : 독립 변수들 간에 강한 상관관계가 있으면 모델의 해석력이 떨어질 수 있음
2. 다항 회귀
- 입력 데이터와 출력데이터 간의 비선형 관계를 모델링하는데 사용
- 독립변수의 다항식 항을 포함하여 데이터를 적합시키기 때문에,
선형 회귀로 해결할 수 없는 곡선 형태의 데이터를 처리할 수 있음
1. 다항 회귀의 기본 아이디어
선형 회귀의 형태를 유지하면서 독립 변수에 다항식 항을 추가하여 비선형 데이터를 모델링
2. 다항 회귀의 장점과 단점
장점
- 비선형 관계 모델링 : 데이터의 곡선 형태를 효과적으로 학습
- 확장성 : 다항식의 차수를 증가시켜 복잡한 패턴을 학습 가능
단점
- 과적합(Overfitting) : 다항식 차수를 너무 높게 설정하면 학습 데이터에 과도하게 학습하여 일반화 성능 저하
- 해석력 부족 : 고차 다항식일수록 결과 해석이 얼려움
- 데이터 스케일 민감도 : 다항식 변환 후 특성 값이 매우 커질 수 있으므로 정규화 필요
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
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)
- 선형 회귀의 변형으로 규제(Regularization) 을 추가하여 모델의 과적합을 방지하는 기법
- 모델의 복잡도를 조정함으로써, 더 일반화된 모델을 학습하도록 함
- 주요 아이디어는 가중치(w) 값이 너무 커지는 것을 억제하여 모델의 안정성과 예측성능을 높이는것
1. 리지 회귀의 동기
선형 회귀는 데이터에 최적화된 직선을 학습하지만, 다음과 같은 경우 문제가 발생할 수 있음
- 과적합 : 학습 데이터에 과도하게 적합하여 새로운 데이터에 대한 예측 성능이 떨어짐
- 다중 공선성 : 독립 변수들 간의 상관관계가 높을때, 가중치 값이 비정상적으로 커지며 불안정해짐
릿지 회귀는 이러한 문제를 해결하기 위해, 가중치의 크기(L2) 를 제어하여 모델이 지나치게 복잡해지지 않도록 함
2. 릿지 회귀의 수식
- 릿지회귀는 선형회귀의 손실 함수에 L2 정규화 항을 추가함
3. 릿지 회귀의 장점과 단점
장점
- 과적합 방지 : 규제를 통해 모델 복잡도를 조정
- 안정성 : 다중 공선성 문제 해결, 가중치 값 안정화
- 모든 특성 활용 : 모든 입력 특성을 유지하며 성능 개선
단점
- 모든 특성 사용 : 불필요한 특성을 제거하지 못함 (특성 선택 불가능)
- 규제 강도 선택 필요 : 람다값을 올바르게 선택해야 최적 성능 발휘
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
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}')
4. 라쏘 회귀 (Lasso Regression)
- 라쏘 회귀는 릿지회귀와 유사한 규제방법을 사용, 그러나 규제의 방식이 다름
- 라쏘회귀는 L1 정규화를 사용하여, 모델의 가중치 중 일부를 0으로 만드는 특성이 있음
- 이로인해 특성선택을 자연스럽게 할 수 있어, 중요하지 않은 특성을 자동으로 제거하는 효과가 있음
1. 라쏘 회귀의 동기
라쏘 회귀는 선형회귀의 과적합을 방지하고, 특성 선택을 통해 모델을 간소화하는데 사용
릿지회귀가 가중치 크기를 제어하는 반면, 라쏘회귀는 가중치의 절댓값 합을 최소화하는 방식으로 작동
- 라쏘회귀는 모델의 복잡도를 줄이고, 중요하지 않은 특성을 자동으로 0으로 만들기 때문에, 특히 고차원데이터 에서 유용
2. 라쏘 회귀의 수식
라쏘 회귀는 선형 회귀의 손실 함수에 L1 정규화 항을 추가함
- 여기서 람다는 규제강도 하이퍼파라미터로, 람다가 커질수록 가중치가 더 작아지고, 0에 가까운 값들이 많이 발생함
3. 라쏘 회귀의 장점과 단점
장점
- 특성 선택 : 중요하지 않은 특성을 자동으로 제거하므로 해석이 쉬워짐
- 과적합 방지 : 규제를 통해 모델이 과적합되지 않도록 방지
- 고차원 데이터에서 효과적 : 많은 특성이 있는 데이터에서 유용
단점
- 과소적합 : 람다가 너무 커지면 중요한 특성까지 제거되어 모델이 과소적합 될수있음
- 특성 간 상관관계 : 라쏘회귀는 다중 공선성 문제가 있을 때, 어떤 특성을 선택하고 어떤 특성을 제거할지 명확하지 않을 수 있음
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
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}')
'AI > ML' 카테고리의 다른 글
[ML] 지도학습 - 분류모델 (나이브 베이즈) (0) | 2024.12.29 |
---|---|
[ML] 지도학습 - 분류모델 (KNN) (0) | 2024.12.29 |
[ML] 지도학습 - 분류모델 (SVM) (0) | 2024.12.29 |
[ML] 지도학습 - 분류모델 (로지스틱 회귀) (3) | 2024.12.29 |
[ML] 머신러닝 이란? ( Machine Learning ) (4) | 2024.12.28 |