Python での多項式回帰の例

WBOY
リリース: 2023-06-10 09:17:50
オリジナル
1957 人が閲覧しました

多項式回帰は、回帰問題で一般的に使用される手法で、モデルがターゲット値をより正確に予測できるように、多項式データをデータに適合させることによってモデルを構築します。 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 ライブラリのクラスと PolynomialFeature クラス。

  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)
ログイン後にコピー

Polynomial features クラスを使用して独立変数 x を多項式に変換し、LinearRegression クラスを使用して多項式データを処理します。モデルをトレーニングするには、fit メソッドを使用します。

  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)
ログイン後にコピー

ここでは、データを DataFrame 形式に読み取るために pandas ライブラリが使用されています。次に、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))
ログイン後にコピー

Polynomial features クラスを使用してデータを 2 次多項式に変換し、LinearRegression クラスを使用して多項式データを処理します。次に、fit メソッドを使用してモデルをトレーニングします。最後に、predict メソッドを使用してモデルの結果を予測します。

  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 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート