はじめに
機械学習の回帰モデルといえば、以下が有名です。
- 線形回帰
- ランダムフォレスト
- XGBoost
一方で、ベイズ最適化を実装する場合、「ガウス過程回帰(Gaussian Process Regression:GPR)」がよく利用されます。
なぜ GPR が選ばれるのか
理由は単純ですが重要です:
予測値だけでなく「予測の不確実性(どれくらい自信があるか)」まで推定できるから
これは、他の機械学習モデル(XGBoost など)では実現しにくい大きな特徴です。
記事の構成
この記事では以下を解説します。
- ガウス過程回帰とは何か(直感的理解)
- 数学的背景(カーネル関数、共分散行列)
- 通常の回帰との違い
- ベイズ最適化での役割
- 製造業・CAE での活用例
- Python による実装
ベイズ最適化について詳しく知りたい方は、関連記事「ベイズ最適化とは?少ない実験回数で最適条件を見つける手法を解説」もあわせてご覧ください。
ガウス過程回帰(GPR)とは
基本的な定義
ガウス過程回帰(GPR)は、データから未知の値を確率分布として予測する回帰モデルです。
従来の回帰モデル(線形回帰、XGBoost など)は、「与えられた入力に対して、出力値は 1 つ」という点予測を行います。
一方、ガウス過程回帰は、「入力に対して、出力値は確率分布として存在する」という考え方に基づいています。
具体例で理解する
例えば、射出成形における金型温度と部品強度の関係を調べるケースを想定します。
| 金型温度(℃) | 強度(MPa) |
|---|---|
| 100 | 150 |
| 150 | 220 |
| 200 | 260 |
通常の回帰モデル:
170℃ → 強度は「確実に235 MPa」ガウス過程回帰:
170℃ → 強度は「平均235 MPa 、ばらつき±8 MPa の確率分布」つまり、「170℃での強度は 227~243 MPa のどれかである可能性が高い」という、不確実性を含めた予測ができます。
ガウス過程回帰の最大の特徴
予測値と予測の不確実性(信頼区間)
ガウス過程回帰は以下の 2 つを同時に出力します。
- 予測値(平均): μ(中心的な予測)
- 予測のばらつき(標準偏差): σ(不確実性の大きさ)

ガウス過程回帰の仕組み
① 訓練データからのパターン学習
ガウス過程は、訓練データから 「条件と性能の関係パターン」 を学習します。
単なる平均を取るのではなく、データ間の「類似性」をカーネル関数で数値化します。
② カーネル関数の役割
カーネル関数は、2 つのデータポイント間の相似度を測定します。
例:RBF(放射基底関数)カーネル
K(x₁, x₂) = exp(-γ |x₁ - x₂|²)- x₁ と x₂ が近いほど → K の値は大きい(強い相関)
- x₁ と x₂ が遠いほど → K の値は小さい(弱い相関)
よく使われるカーネル関数
| カーネル名 | 式 | 適用場面 |
|---|---|---|
| RBF(放射基底) | K = exp(-γ|x₁-x₂|²) | 一般的、滑らかな関数向け |
| Matérn | ν に応じて滑らかさを調整 | 現象が粗い場合 |
| 線形 | K = x₁·x₂ | 線形関係が強い場合 |
| 多項式 | K = (x₁·x₂ + c)^d | 非線形だが複雑でない場合 |

③ 共分散行列の計算
ガウス過程は、訓練データ間の共分散(相互関係)を行列で表現します。
Σ = [K(x₁,x₁) K(x₁,x₂) K(x₁,x₃)]
[K(x₂,x₁) K(x₂,x₂) K(x₂,x₃)]
[K(x₃,x₁) K(x₃,x₂) K(x₃,x₃)]この共分散行列から、未知点での予測値と不確実性が計算されます。
ガウス過程回帰とベイズ最適化の役割分担
ベイズ最適化内でのプロセス
ベイズ最適化では、ガウス過程回帰は以下の役割を担います。

重要なポイント
ガウス過程回帰がなければ、ベイズ最適化は次の判断ができません。
- 「どこが有望か」→ 予測値で判定
- 「どこがまだ試していないか」→ 不確実性で判定
この 2 つの情報を組み合わせることで、「効率的な探索」が実現します。
通常の回帰モデルとの詳細比較
機能比較表
| 項目 | 線形回帰 | XGBoost | ランダムフォレスト | ガウス過程回帰 |
|---|---|---|---|---|
| 予測値 | 〇 | 〇 | 〇 | 〇 |
| 予測の不確実性(信頼区間) | × | × | × | 〇 |
| 少ないデータでの性能 | △ | △ | △ | ◎ |
| 大量データ(>10000件)での効率性 | ◎ | ◎ | ◎ | △ |
| 計算速度 | ◎ | 〇 | 〇 | △ |
| 設計変数が多い場合(>20個) | 〇 | ◎ | ◎ | △ |
| ベイズ最適化への適応性 | × | △ | △ | ◎ |
各モデルが得意な場面
ガウス過程回帰が最適な場面:
- データが 10~1000 件程度(少なめ)
- 各データを取得するコストが高い(実験、CAE 解析、実機試験)
- 予測の不確実性が重要(ベイズ最適化など)
- 設計変数が 5~15 個程度
XGBoost が最適な場面:
- データが数万件以上
- 予測精度を最大化したい
- 計算速度が重要
- 非線形関係が複雑
線形回帰が適している場面:
- 関係が単純にほぼ線形
- 解釈可能性が重要
- 実装の簡潔さを優先
ガウス過程回帰が得意な理由:詳細メカニズム
① 少ないデータでも信頼できる予測
ガウス過程は、先験分布(事前分布)を利用します。
つまり、「少ないデータでも、関数の滑らかさなどの一般的な仮定に基づいて推定」できます。
対比として、XGBoost などの従来法は、十分なデータがないと過学習に陥りやすい傾向があります。
② 不確実性の定量化
ガウス過程は、訓練データから遠い領域で自動的に不確実性を増大させます。
訓練データが豊富な領域 → σ が小さい(自信あり)
訓練データが少ない領域 → σ が大きい(自信なし)③ 数学的厳密性
ガウス過程は、ベイズ統計に基づく厳密な確率モデルです。
そのため、「この不確実性は何を意味するか」を数学的に解釈できます。
ベイズ最適化との関係:詳細
なぜベイズ最適化では GPR が使われるのか
ベイズ最適化の獲得関数(次に試すべき条件を決定する関数)は、以下の情報を必要とします。
- μ(予測値の平均):有望な領域を特定
- σ(予測のばらつき):未探索の領域を特定
獲得関数の具体例
期待改善(Expected Improvement, EI)
EI(x) = E[max(f(x) - f_best, 0)] × P(f(x) > f_best)- f(x):点 x での予測値
- f_best:現在の最高性能
- P(f(x) > f_best):改善する確率
これを計算するには、μ と σ が必須です。
ガウシアン過程下位信頼度境界(Lower Confidence Bound, LCB)
LCB(x) = μ(x) - κ × σ(x)κ は「どれだけ悲観的に見るか」を制御するパラメータです。
製造業での活用例
事例 1:樹脂成形の最適化
背景: 射出成形部品の強度にばらつきがあり、最適な金型温度と射出圧力を見つけたい。
探索対象(入力)
- 金型温度:80~180℃
- 射出圧力:0.5~3.0 MPa
評価指標(出力)
- 降伏強度(MPa)
- ターゲット:250 MPa 以上
実施方法: ガウス過程回帰をサロゲートモデルとしたベイズ最適化
プロセス:
- 初期実験 10 回で訓練データ取得
- ガウス過程で全条件領域を予測
- 獲得関数で有望な条件を選定(5 回)
- 追加実験を実施し、結果を学習
- ステップ 2~4 を 3~4 サイクル繰り返す
結果:
- 従来の直交表実験(L18:18 回)比で 25 回の実験で最適条件を発見
- 最適条件での強度:265 MPa(従来の経験則:240 MPa)
- 試行効率(性能改善 / 試行数):有意に向上

事例 2:CAE 解析のパラメータ最適化
背景: 金属板の深絞り成形 CAE 解析において、メッシュサイズと時間刻み幅を最適化したい。
探索対象(入力)
- メッシュサイズ:1~5 mm
- 時間刻み幅:0.001~0.01 秒
評価指標(出力)
- シミュレーション精度(実験値との差)
- 計算時間
ガウス過程の利点:
- 各 CAE 解析に 2 時間かかるため、試行回数を最小化したい
- 精度と計算時間の 2 つの目的が相互矛盾するため、パレート解を探索したい
- 不確実性を考慮して、自信度の低い領域を優先探索したい
結果の予測例: 初期 6 回の解析後、ガウス過程が以下を予測
- 条件 A:精度 98%、計算時間 3 時間、不確実性:小
- 条件 B:精度 96%、計算時間 2 時間、不確実性:大
→ ベイズ最適化は条件 B を次に評価する可能性が高い(未探索領域)
事例 3:材料配合設計
背景: 樹脂に複数の添加剤を混合するとき、強度と耐久性のバランスを取りたい。
探索対象(入力)
- 難燃剤 A 添加率:0~10 wt%
- 難燃剤 B 添加率:0~10 wt%
- 可塑剤添加率:0~5 wt%
評価指標(出力)
- 曲げ強度(MPa)
- 耐衝撃性(kJ/m²)
- 燃焼性(LOI 値)
ガウス過程の優位性: 配合試験は 1 回数日かかるため、回数を極力削減したい。
従来の方法(経験則 + 直交表)では、意味のある最適条件の発見に 60~80 回必要だったが、ベイズ最適化(ガウス過程サロゲートモデル)では 40 回程度で収束。
Python による実装例
基本的な使い方
python
from sklearn.gaussian_process import GaussianProcessRegressor
from sklearn.gaussian_process.kernels import RBF, ConstantKernel as C
import numpy as np
# 訓練データ準備
X_train = np.array([
[100, 1.0],
[150, 1.5],
[200, 2.0]
]) # [金型温度, 射出圧力]
y_train = np.array([150, 220, 260]) # 強度(MPa)
# カーネル設定:定数×RBF
kernel = C(1.0, (1e-3, 1e3)) * RBF(1.0, (1e-2, 1e2))
# ガウス過程モデル生成
model = GaussianProcessRegressor(
kernel=kernel,
n_restarts_optimizer=10,
alpha=1e-6
)
# 訓練
model.fit(X_train, y_train)
# 予測:170℃、1.8MPa の場合
X_test = np.array([[170, 1.8]])
mean, std = model.predict(X_test, return_std=True)
print(f"予測強度: {mean[0]:.1f} MPa")
print(f"不確実性(標準偏差): {std[0]:.1f} MPa")
print(f"95% 信頼区間: [{mean[0]-1.96*std[0]:.1f}, {mean[0]+1.96*std[0]:.1f}] MPa")出力例:
予測強度: 235.3 MPa
不確実性(標準偏差): 8.2 MPa
95% 信頼区間: [219.3, 251.3] MPaより実践的な実装例:ベイズ最適化への統合
python
from sklearn.gaussian_process import GaussianProcessRegressor
from sklearn.gaussian_process.kernels import Matern
import numpy as np
import matplotlib.pyplot as plt
def objective_simulation(x):
"""実際の実験またはCAE解析をシミュレート"""
# 金型温度と射出圧力から強度を計算(仮想モデル)
temp, pressure = x
strength = (
250 * np.exp(-((temp - 150) / 30)**2) +
50 * pressure +
np.random.normal(0, 5) # ノイズ
)
return strength
# ステップ1: 初期訓練データ(ランダムサンプリング)
n_init = 8
X_train = np.random.uniform([80, 0.5], [200, 3.0], (n_init, 2))
y_train = np.array([objective_simulation(x) for x in X_train])
# ステップ2: ガウス過程モデル定義
kernel = Matern(nu=2.5)
gp = GaussianProcessRegressor(
kernel=kernel,
alpha=1e-6,
normalize_y=True,
n_restarts_optimizer=5
)
# ステップ3: ベイズ最適化ループ
n_iterations = 5
for iteration in range(n_iterations):
# 訓練
gp.fit(X_train, y_train)
# グリッド上で予測
x_grid = np.linspace([80, 0.5], [200, 3.0], 50)
mu, sigma = gp.predict(x_grid, return_std=True)
# 獲得関数(LCB: Lower Confidence Bound)
kappa = 2.576 # 95%信頼度
lcb = mu - kappa * sigma
# 最高の獲得関数値を持つ点を選択
idx_best = np.argmax(lcb)
x_next = x_grid[idx_best]
# 新しい点を評価
y_next = objective_simulation(x_next)
# 訓練データに追加
X_train = np.vstack([X_train, x_next])
y_train = np.append(y_train, y_next)
print(f"反復 {iteration+1}: 評価点 {x_next}, 強度 {y_next:.1f} MPa")
# 最適条件
best_idx = np.argmax(y_train)
print(f"\n最適条件: 金型温度 {X_train[best_idx, 0]:.1f}℃, 射出圧力 {X_train[best_idx, 1]:.2f} MPa")
print(f"最高強度: {y_train[best_idx]:.1f} MPa")ガウス過程回帰のメリット・デメリット
メリット
| メリット | 説明 |
|---|---|
| 少ないデータでも有効 | 10~100 件程度のデータで信頼できる予測が可能 |
| 予測の不確実性を定量化 | σ で「自信の度合い」を数値化 |
| ベイズ最適化と相性抜群 | 獲得関数の計算に μ と σ が必須 |
| 数学的厳密性 | 確率論に基づくため解釈が明確 |
| カーネル関数の選択 | 問題に応じて最適なカーネルを組み合わせ可能 |
デメリット
| デメリット | 説明 |
|---|---|
| 計算量が多い | O(n³) の計算複雑度により、データが増えると遅くなる |
| 大量データには不向き | 1 万件以上では XGBoost など他の手法が効率的 |
| 設計変数が多いと性能低下 | 20 個以上の変数では効果が落ちやすい |
| カーネル選択が難しい | 不適切なカーネル選択で精度が低下 |
よくある質問
Q1:ガウス過程回帰と XGBoost の違いは?
A:主な違いは以下の通りです。
- ガウス過程回帰:予測の不確実性を出力、少ないデータに強い、計算が遅い
- XGBoost:予測精度を最大化、大量データに対応、高速
ベイズ最適化を実装するなら GPR、単なる予測精度を求めるなら XGBoost を選びます。
Q2:ガウス過程回帰はベイズ最適化以外でも使われる?
A:はい、様々な場面で利用されています。
- 時系列予測(例:株価予測)
- センサーデータの補間
- 空間統計(Kriging)
- 信頼区間が必要な工学的予測
ただし、製造業での活用は、ベイズ最適化のサロゲートモデルとしての利用が最も多いです。
Q3:カーネル関数はどのように選べばよい?
A:以下の流れで選択します。
- まず RBF を試す:最も汎用的
- データが粗い(尖ったピークがある)場合は Matérn
- 線形関係が強い場合は線形カーネル
- 複数を試して交差検証で比較
ガウス過程回帰の計算プロセス(詳細)
ステップ 1:共分散行列の計算
訓練データ X_train に対して、カーネル K を使い共分散行列 Σ を計算:
Σ = K(X_train, X_train) + α Iα はノイズ項、I は単位行列。
ステップ 2:チョレスキー分解
数値的安定性のため、共分散行列をチョレスキー分解:
Σ = L L^Tステップ 3:未知点での予測
新しい点 x_* での予測値 μ_* と分散 σ²_* :
μ_* = k_*^T Σ^(-1) y_train
σ²_* = k(x_*, x_*) - k_*^T Σ^(-1) k_*ここで k_* = K(X_train, x_*) はクロスカーネル。

ガウス過程回帰と他の確率的回帰手法との比較
ベイズ線形回帰
- 線形仮定で解釈可能性が高い
- 非線形関係には対応できない
- ガウス過程は線形回帰の非線形拡張
ガウス混合モデル(GMM)
- 離散的な成分を仮定
- ガウス過程は連続的な関数を仮定
- 異なるアプローチ
まとめ
ガウス過程回帰(GPR)は、予測値だけでなく、予測の不確実性まで推定できる強力な回帰モデルです。
主な特徴
- 少ないデータでも信頼できる予測(10~1000 件程度が得意)
- 予測の不確実性を定量化(σ で自信度を表現)
- ベイズ最適化の中核(獲得関数の計算に不可欠)
活躍する場面
- 実験 1 回に時間・コストがかかる問題
- CAE 解析が重い問題
- 材料開発やプロセス最適化
選択の判断基準
ガウス過程回帰を選ぶべき場合:
- データ件数:10~1000 件程度
- 各試行のコスト:高い(数時間以上)
- 予測の不確実性が必要:はい
- 設計変数:5~15 個程度
XGBoost を選ぶべき場合:
- データ件数:1,000 件以上
- 予測精度の最大化が目標
- 計算速度が重要
- 非線形関係が複雑
ベイズ最適化により効率的な最適化を実現したいなら、ガウス過程回帰は不可欠な要素となります。

