>백엔드 개발 >파이썬 튜토리얼 >Python의 다항식 회귀 예제

Python의 다항식 회귀 예제

WBOY
WBOY원래의
2023-06-10 09:17:501953검색

다항식 회귀는 회귀 문제에 흔히 사용되는 방법으로, 모델이 목표 값을 보다 정확하게 예측할 수 있도록 데이터에 다항식을 맞춰 모델을 구축합니다. Python은 다항 회귀 모델을 쉽게 구현할 수 있는 풍부한 데이터 처리 및 기계 학습 라이브러리를 제공합니다. 이 기사에서는 Python에서 다항식 회귀를 구현하는 방법을 소개하고 다항식 회귀를 기반으로 한 예제를 제공합니다.

1. 다항식 회귀의 원리

다항식 회귀의 원리는 비교적 간단합니다. 즉, 독립변수의 값을 다항식 함수를 통해 설명하는 것입니다. 즉:

$y = b_0 + b_1x_1 + b_2x_2^2 + ... + b_nx_n^n$

여기서 $y$는 종속 변수이고 $b_0, b_1, b_2, ... , b_n$은 회귀계수 $x_1, x_2, ..., x_n$은 독립변수입니다. 다항식 회귀는 모델의 유연성을 향상시킬 수 있으므로 높은 수준의 피팅이 필요한 문제에 자주 사용됩니다.

2. Python은 다항식 회귀를 구현합니다

Python에서는 scikit-learn 라이브러리를 통해 다항식 회귀를 구현할 수 있습니다. scikit-learn 라이브러리는 Python에서 일반적으로 사용되는 기계 학습 라이브러리로, 데이터를 처리하고 모델을 구축하기 위한 다양한 모델과 도구를 제공합니다.

간단한 다항식 회귀 구현 단계는 다음과 같습니다.

  1. 필요한 라이브러리 가져오기
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures

여기에서는 numpy 라이브러리, matplotlib 라이브러리 및 sklearn 라이브러리의 LinearRegression 클래스 및 PolynomialFeatures 클래스를 가져옵니다.

  1. 데이터 준비
# 创建数据
x = np.linspace(-10, 10, num=50).reshape(-1, 1) # 自变量数据
y = np.sin(x) + np.random.randn(50, 1) * 0.2 # 因变量数据

numpy 라이브러리의 linspace 함수를 사용하여 -10부터 10까지 등간격 독립변수 데이터 50개를 생성하고, sin 함수를 사용하여 종속변수 데이터를 생성합니다. 결과를 더욱 사실적으로 만들기 위해 임의의 노이즈도 추가됩니다.

  1. 훈련 모델
# 使用多项式模型拟合数据
poly_reg = PolynomialFeatures(degree=5) # degree表示多项式的次数
x_poly = poly_reg.fit_transform(x)
lin_reg = LinearRegression()
lin_reg.fit(x_poly, y)

PolynomialFeatures 클래스를 사용하여 독립 변수 x를 다항식으로 변환한 다음 LinearRegression 클래스를 사용하여 다항식 데이터를 처리합니다. 모델을 훈련하려면 적합 방법을 사용하세요.

  1. 시각화된 결과
# 可视化结果
plt.scatter(x, y)
plt.plot(x, lin_reg.predict(poly_reg.fit_transform(x)), color='red')
plt.show()

여기서는 matplotlib 라이브러리를 사용하여 결과를 시각화합니다. 원시 데이터는 산점도를 통해 표시되고 다항식 회귀 곡선이 그래프에 표시됩니다.

3. 다항식 회귀의 예

예를 들어보세요: 자동차의 속도와 제동 시간을 기반으로 주행 거리를 예측합니다. 우리는 이 문제를 해결하기 위해 Udacity에서 제공하는 데이터 세트를 사용합니다. 데이터 세트에는 자동차 속도, 제동 시간 및 해당 주행 거리가 포함됩니다.

  1. 필요한 라이브러리 및 데이터 가져오기
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures

# 读入数据
data = pd.read_csv('data/car.csv')

여기에서는 csv 파일에 저장된 자동차 데이터 세트를 읽습니다.

  1. 데이터 전처리
# 提取特征和目标
X = data.iloc[:, :-1].values
y = data.iloc[:, -1].values

# 将刹车时间转为2维数据
X = X.reshape(-1, 1)

# 划分训练集和测试集
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 0)

여기서 pandas 라이브러리는 데이터를 DataFrame 형식으로 읽는 데 사용됩니다. 그런 다음 iloc 방법을 사용하여 열별로 특징과 목표를 추출하고 reshape 함수를 사용하여 제동 시간을 2차원 데이터로 변환합니다. 마지막으로 train_test_split 함수를 사용하여 데이터 세트를 훈련 세트와 테스트 세트로 비례적으로 나눕니다.

  1. 모델 학습 및 테스트
# 训练模型
poly_reg = PolynomialFeatures(degree = 2)
X_poly = poly_reg.fit_transform(X_train)
lin_reg = LinearRegression()
model = lin_reg.fit(X_poly, y_train)

# 可视化结果
plt.scatter(X_train, y_train, color='red')
plt.plot(X_train, lin_reg.predict(poly_reg.fit_transform(X_train)), color='blue')
plt.title('Car distance prediction')
plt.xlabel('Speed + Brake Time')
plt.ylabel('Distance')
plt.show()

# 测试模型
y_pred = model.predict(poly_reg.fit_transform(X_test))

PolynomialFeatures 클래스를 사용하여 데이터를 2차 다항식으로 변환한 다음 LinearRegression 클래스를 사용하여 다항식 데이터를 처리합니다. 그런 다음 적합 방법을 사용하여 모델을 훈련합니다. 마지막으로 예측 방법을 사용하여 모델 결과를 예측합니다.

  1. 평가 모델
# 计算评估指标
from sklearn.metrics import mean_squared_error, r2_score
rmse = np.sqrt(mean_squared_error(y_test, y_pred))
r2 = r2_score(y_test, y_pred)

print('Root Mean Squared Error: ', rmse)
print('R2 Score: ', r2)

sklearn 라이브러리의mean_squared_error 함수와 r2_score 함수는 각각 RMSE(제곱평균제곱근)와 결정계수(R2)인 평가 지표를 계산하는 데 사용됩니다.

위의 단계를 통해 다항식 회귀 모델을 사용하여 자동차의 주행 거리를 예측할 수 있습니다.

요약

이 글에서는 다항식 회귀의 원리와 Python에서의 구현을 소개합니다. 자동차 데이터의 예측 사례를 통해 모델 구축 및 결과 예측에 있어 다항식 회귀의 장점을 확인할 수 있습니다. 물론 다항식 회귀에는 과적합 및 기타 문제와 같은 몇 가지 단점도 있습니다. 따라서 실제 적용에서는 실제 상황에 따라 적절한 회귀 방법과 매개변수를 선택하는 것이 필요합니다.

위 내용은 Python의 다항식 회귀 예제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.