AI/이론

132.[Python] [Machine Learning] : 선형 회귀(Linear Regression)와 비선형 회귀(Non-Linear Regression)

천재단미 2025. 1. 31. 10:56
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
반응형
home top bottom
}