Pythonで学ぶ多項式回帰の実装方法|scikit-learnを使った完全ガイド
多項式回帰とは
多項式回帰(Polynomial Regression)は、線形回帰の一種であり、独立変数 x と従属変数 y の関係を n 次多項式としてモデル化する手法です。通常の線形回帰では直線でしか近似できませんが、多項式回帰を用いることで、x の値とそれに対応する y の条件付き平均 E(y|x) との間にある非線形な関係を柔軟に捉えることができます。
この記事では、Python と scikit-learn を使って、温度と圧力のデータに対して多項式回帰を実装する手順を、コード例とともにわかりやすく解説します。
ステップ1:必要なライブラリのインポート
まず、数値計算用の NumPy、グラフ描画用の Matplotlib、データ操作用の pandas をインポートします。
# ライブラリのインポート
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
ステップ2:データセットの読み込みと分割
次に、CSV ファイルからデータを読み込み、特徴量 X(温度)と目的変数 y(圧力)に分割します。
# データセットのインポート
datas = pd.read_csv('data.csv')
datas
# データセットを2つのコンポーネントに分割
X = datas.iloc[:, 1:2].values
y = datas.iloc[:, 2].values
iloc[:, 1:2] とすることで X は 2 次元配列として保持され、scikit-learn のモデルにそのまま渡せる形式になります。
ステップ3:線形回帰モデルの構築
比較の基準として、まずシンプルな線形回帰モデルをデータに適合させます。
# 線形回帰をデータセットに適用
from sklearn.linear_model import LinearRegression
lin = LinearRegression()
lin.fit(X, y)
ステップ4:多項式回帰モデルの構築
PolynomialFeatures クラスを使って特徴量を多項式に変換し、その上で線形回帰を適用します。ここでは次数を 4 に設定しています。
# 多項式回帰をデータセットに適用
from sklearn.preprocessing import PolynomialFeatures
poly = PolynomialFeatures(degree = 4)
X_poly = poly.fit_transform(X)
poly.fit(X_poly, y)
lin2 = LinearRegression()
lin2.fit(X_poly, y)
fit_transform() によって、元の特徴量から x, x², x³, x⁴ の各項が生成されます。多項式回帰は本質的には「変換後の特徴量に対する線形回帰」であるため、この仕組みにより非線形な曲線を近似できるのです。
ステップ5:結果の可視化
まず、線形回帰の結果を散布図と予測直線で可視化します。
# 線形回帰の結果を可視化
plt.scatter(X, y, color = 'blue')
plt.plot(X, lin.predict(X), color = 'red')
plt.title('Linear Regression')
plt.xlabel('Temperature')
plt.ylabel('Pressure')
plt.show()
続いて、多項式回帰の結果を可視化します。予測時にも poly.fit_transform() で同じ変換を行う点に注意してください。
# 多項式回帰の結果を可視化
plt.scatter(X, y, color = 'blue')
plt.plot(X, lin2.predict(poly.fit_transform(X)), color = 'red')
plt.title('Polynomial Regression')
plt.xlabel('Temperature')
plt.ylabel('Pressure')
plt.show()
2つのグラフを比較すると、直線しか引けない線形回帰に対して、多項式回帰はデータの曲率に沿った滑らかな曲線でフィッティングできていることが確認できます。
ステップ6:新しい値の予測
最後に、温度 110.0 のときの圧力を両モデルで予測してみます。
# 線形回帰による新しい結果の予測
lin.predict([[110.0]])
# 多項式回帰による新しい結果の予測
lin2.predict(poly.fit_transform([[110.0]]))
注意: scikit-learn の新しいバージョンでは、単一の値で予測する場合も入力を 2 次元配列([[110.0]])にする必要があります。1 次元のまま渡すとエラーになるためご留意ください。
まとめ
多項式回帰は、PolynomialFeatures で特徴量を高次に変換したうえで線形回帰を適用するというシンプルな手法ながら、非線形なデータ傾向を高い精度でモデリングできます。ただし、次数を上げすぎると過学習(オーバーフィッティング)を起こしやすいため、次数の選択には交差検証などを用いて慎重に検討することが重要です。
-
Pythonの内部動作を解説:インタプリタとメモリ上のオブジェクト配置の仕組み
本記事では、Pythonの内部動作について詳しく解説し、Pythonインタプリタがさまざまなオブジェクトに対してどのようにメモリ上の領域を割り当てているのかを見ていきます。 Pythonはどのような言語か Pythonは、Javaと同じくオブジェクト指向のプログラミング言語です。インタプリタを使ってコードを実行するため、「インタプリタ型言語」と呼ばれています。Pythonはミニマリズムとモジュール性を重視する設計思想を持っており、コードの可読性を高めながら、処理時間とメモリ使用量(時間計算量・空間計算量)を最小限に抑えることを目指しています。 また、Pythonの標準的な実装は「CPytho
-
Pythonで学ぶロジスティック回帰:基礎から実装・結果の解釈まで徹底解説
ロジスティック回帰とは ロジスティック回帰(Logistic Regression)は、二値の結果(合格/不合格、はい/いいえなど)を予測するための統計手法です。金融、医療、犯罪学をはじめとする社会科学など、幅広い分野で長年にわたり活用されている実績あるアプローチです。 本記事では、Pythonを使ってロジスティック回帰を実装する方法を解説します。なお、同じ処理はRなどの他の言語でも実装可能です。 必要なライブラリのインストール サンプルプログラムでは、以下のライブラリを使用します。 NumPy:数値配列や行列の定義に使用 Pandas:データの読み込み・操作・加工に使用 Statsmod