[업무 지식]/Statistics

[다항회귀] 비선형 관계 회귀

에디터 윤슬 2024. 11. 12. 15:18

다항회귀란

  • 독립변수와 종속변수간의 관계가 선형이 아닐 때 사용
  • 독립변수의 다항식을 사용하여 종속 변수를 예측
  • 데이터가 곡선적 경향을 따를 때 사용
  • 비선형 관계를 모델링
  • 고차 다항식의 경우 과적합 위험

파이썬 실습

1. 데이터 생성

from sklearn.preprocessing import PolynomialFeatures

# 예시 데이터 생성
np.random.seed(0)
X = 2 - 3 * np.random.normal(0, 1, 100)
y = X - 2 * (X ** 2) + np.random.normal(-3, 3, 100)
X = X[:, np.newaxis]
print(X.shape)
print(y.shape)
(100, 1)
(100,)



np.random.seed(0): 난수 생성기의 시드를 고정하여 실행할 때마다 동일한 결과를 얻을 수 있도록 합니다.
X: 평균이 0이고 표준편차가 1인 정규 분포에서 난수를 생성하고, 이를 변환하여 독립 변수로 사용합니다.

y=X−2X**2+ϵ 형태의 비선형 관계를 가지며, 여기서 ϵ은 잡음입니다.
X[:, np.newaxis]: X를 열 벡터로 변환하여 다차원 배열로 만듭니다.

 

2. 다항회귀변환

polynomial_features = PolynomialFeatures(degree=2)
X_poly = polynomial_features.fit_transform(X)

PolynomialFeatures(degree=2): 2차 다항식으로 변환하는 객체를 생성합니다. 이 객체는 입력 데이터에 대해 새로운 피처들을 생성합니다.
fit_transform(X): X에 대해 다항식 항을 추가하여 변환된 데이터를 반환합니다. 예를 들어, X가 입력되면 [1,X,X**2]가 출력됩니다.

 

3. 모델 학습

model = LinearRegression()
model.fit(X_poly, y)

LinearRegression(): 선형 회귀 모델을 생성합니다.
model.fit(X_poly, y): 변환된 독립 변수(X_poly)와 종속 변수(y)를 사용하여 모델을 학습시킵니다.

 

4. 예측

y_poly_pred = model.predict(X_poly)

학습된 모델을 사용하여 예측값을 계산합니다.

 

5. 모델 평가

mse = mean_squared_error(y, y_poly_pred)
r2 = r2_score(y, y_poly_pred)
print("평균 제곱 오차(MSE):", mse)
print("결정 계수(R2):", r2)

출력 예시:
평균 제곱 오차(MSE): 9.849905364705736
결정 계수(R²): 0.9782775579376984


평균 제곱 오차(MSE): 실제 값과 예측 값 간의 차이를 제곱한 후 평균한 값입니다. 값이 작을수록 모델이 더 정확하다는 의미입니다.
결정 계수(R²): 모델이 데이터를 얼마나 잘 설명하는지를 나타냅니다. 값이 클수록 좋은 모델입니다.

 

6. 시각화

plt.scatter(X, y, s=10)
sorted_zip = sorted(zip(X, y_poly_pred))
X, y_poly_pred = zip(*sorted_zip)
plt.plot(X, y_poly_pred, color='m')
plt.title('polynomial regression')
plt.xlabel('area')
plt.ylabel('price')
plt.show()


plt.scatter(): 실제 데이터를 파란색 점으로 표시합니다.
정렬된 X 값에 따른 예측값: zip()과 sorted()를 사용해 X와 예측값(y_poly_pred)을 정렬한 후 그래프에 그립니다.
빨간색 선은 학습된 다항 회귀 모델의 예측값을 나타냅니다.