728x90
반응형
반응형
머신러닝에서 **회귀(Regression)**란 연속적인 값을 예측하는 알고리즘을 의미합니다. 특히, 회귀는 데이터 간의 관계를 찾고 미래 값을 예측하는 데 사용됩니다. 회귀는 크게 **선형 회귀(Linear Regression)**와 **비선형 회귀(Non-Linear Regression)**로 나뉩니다.
🎯 1. 선형 회귀(Linear Regression)란?
선형 회귀는 X(독립 변수)와 Y(종속 변수) 사이의 관계가 직선 형태로 나타나는 회귀 분석 방법입니다. 즉, 데이터가 직선 형태로 정렬될 때, 선형 회귀를 사용하여 적절한 직선을 찾을 수 있습니다.
🔹 선형 회귀의 수학적 표현
선형 회귀의 기본 수식은 다음과 같습니다.
Y=aX+bY = aX + b
Y=aX+b
- YYY : 예측값 (종속 변수)
- XXX : 입력 데이터 (독립 변수)
- aaa : 기울기 (회귀 계수)
- bbb : 절편 (y절편, y축과의 교차점)
🔹 선형 회귀의 예제
📌 예제: 공부 시간에 따른 시험 점수 예측
- 공부 시간(시간, X)과 시험 점수(점수, Y)의 관계를 예측하는 문제를 생각해봅시다.
공부 시간 (X) 시험 점수 (Y)
1 | 50 |
2 | 55 |
3 | 60 |
4 | 65 |
5 | 70 |
- 위 데이터에서 선형 회귀를 사용하면 "공부 시간이 많을수록 시험 점수가 높아진다"는 관계를 찾을 수 있습니다.
- 이를 그래프로 나타내면 직선이 그려지며, 주어진 X 값에 대해 Y 값을 예측할 수 있습니다.
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
# 데이터 생성
X = np.array([1, 2, 3, 4, 5]).reshape(-1, 1) # 공부 시간 (X)
Y = np.array([50, 55, 60, 65, 70]) # 시험 점수 (Y)
# 선형 회귀 모델 생성 및 학습
model = LinearRegression()
model.fit(X, Y)
# 예측
Y_pred = model.predict(X)
# 시각화
plt.scatter(X, Y, color='blue', label="실제 데이터")
plt.plot(X, Y_pred, color='red', label="선형 회귀 예측")
plt.xlabel("공부 시간")
plt.ylabel("시험 점수")
plt.title("선형 회귀 예제")
plt.legend()
plt.show()
🎯 2. 비선형 회귀(Non-Linear Regression)란?
비선형 회귀는 X와 Y 사이의 관계가 직선이 아닌 곡선 형태를 보이는 경우 적용됩니다. 즉, 데이터가 비선형적인 패턴을 가질 때 선형 회귀로는 정확한 예측을 할 수 없으므로 비선형 회귀를 사용해야 합니다.
🔹 비선형 회귀의 예제
📌 예제: 약 복용량에 따른 치료 효과 예측
- 환자가 특정 약을 복용할 때, 일정 용량까지는 효과가 증가하지만 일정 용량을 초과하면 효과가 둔화되는 경우가 있습니다.
- 이런 경우 선형 회귀로는 정확한 예측이 어렵기 때문에 비선형 회귀 모델이 필요합니다.
약 용량 (X) 치료 효과 (Y)
1 | 5 |
2 | 20 |
3 | 50 |
4 | 70 |
5 | 78 |
6 | 80 |
7 | 81 |
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import make_pipeline
# 데이터 생성
X = np.array([1, 2, 3, 4, 5, 6, 7]).reshape(-1, 1) # 약 복용량
Y = np.array([5, 20, 50, 70, 78, 80, 81]) # 치료 효과
# 다항 회귀 (비선형 회귀)
model_poly = make_pipeline(PolynomialFeatures(degree=2), LinearRegression())
model_poly.fit(X, Y)
# 예측
X_range = np.linspace(1, 7, 100).reshape(-1, 1)
Y_pred = model_poly.predict(X_range)
# 시각화
plt.scatter(X, Y, color='blue', label="실제 데이터")
plt.plot(X_range, Y_pred, color='red', label="비선형 회귀 예측")
plt.xlabel("약 복용량")
plt.ylabel("치료 효과")
plt.title("비선형 회귀 예제")
plt.legend()
plt.show()
🎯 3. 선형 회귀와 비선형 회귀 비교
비교 항목 선형 회귀 (Linear Regression) 비선형 회귀 (Non-Linear Regression)
데이터 관계 | 직선 관계 | 곡선 관계 |
예제 | 공부 시간 vs. 성적 | 약 복용량 vs. 치료 효과 |
공식 | Y=aX+bY = aX + bY=aX+b | Y=aX2+bX+cY = aX^2 + bX + cY=aX2+bX+c |
사용 라이브러리 | LinearRegression() | PolynomialFeatures() |
🎯 4. 언제 선형 회귀를 쓰고, 언제 비선형 회귀를 써야 할까?
- 선형 회귀
- 데이터가 직선 형태를 보일 때
- X가 증가할수록 Y도 증가하는 일정한 패턴이 있을 때
- 예: 공부 시간과 성적, 광고비와 매출액
- 비선형 회귀
- 데이터가 곡선 형태를 보일 때
- X가 증가해도 Y의 변화율이 일정하지 않을 때
- 예: 약 복용량과 치료 효과, 인구 증가율 예측
🎯 5. 결론
- 선형 회귀는 데이터를 직선으로 예측하는 모델이며, 비선형 회귀는 곡선 형태의 데이터를 예측할 때 사용됩니다.
- 데이터를 시각화하여 관계를 먼저 분석한 후, 선형 또는 비선형 회귀를 선택하는 것이 중요합니다.
- 파이썬에서는 LinearRegression()을 사용하여 선형 회귀를 적용할 수 있으며, 비선형 회귀의 경우 PolynomialFeatures()를 활용하여 다항 회귀를 적용할 수 있습니다.
728x90
반응형
'AI > 이론' 카테고리의 다른 글
134. [Python] [Machine Learning] : 의사결정나무(Decision Tree) (2) | 2025.01.31 |
---|---|
133. [Python] [Machine Learning] : Support Vector Machine (0) | 2025.01.31 |
131. [Python] [Machine Learning] : 성능 평가 방법과 종류 (0) | 2025.01.31 |
129. [Python] [Machine Learning] : K-NN 알고리즘 (0) | 2025.01.28 |
128. [Python] [Machine Learning] : Logistic Regression(분류) (0) | 2025.01.28 |