다항회귀란
- 독립변수와 종속변수간의 관계가 선형이 아닐 때 사용
- 독립변수의 다항식을 사용하여 종속 변수를 예측
- 데이터가 곡선적 경향을 따를 때 사용
- 비선형 관계를 모델링
- 고차 다항식의 경우 과적합 위험
파이썬 실습
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)을 정렬한 후 그래프에 그립니다.
빨간색 선은 학습된 다항 회귀 모델의 예측값을 나타냅니다.
'[업무 지식] > Statistics' 카테고리의 다른 글
[피어슨 상관계수] 상관관계 (0) | 2024.11.12 |
---|---|
[스플라인 회귀] 여러 구간에 다항식 적용하는 모델링 (0) | 2024.11.12 |
[회귀 - 범주형] 다중선형회귀에서의 범주형 변수 (0) | 2024.11.12 |
[분산팽창요인] VIF(Variance Inflation Factor) (0) | 2024.11.12 |
[선형회귀] Regression (0) | 2024.11.12 |