データフィッティング
データフィッティングの最小化問題の一例として、線形回帰を考えます。
線形回帰では、データポイントに最もよくフィットする直線を見つけることが目的です。
この問題は、最小二乗法を用いて解くことができます。
解法
以下に、CVXPYを使用して線形回帰問題を解く例を示します。
まず、必要なライブラリをインポートし、データを生成します。
[Google Colaboratory ]
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| import numpy as np import cvxpy as cp import matplotlib.pyplot as plt
np.random.seed(1) n = 50 x = np.linspace(0, 10, n) y = 3 * x + 5 + np.random.normal(0, 2, n)
plt.scatter(x, y) plt.xlabel('x') plt.ylabel('y') plt.show()
|
[実行結果]
次に、CVXPYを使用して最小二乗問題を定式化し、解きます。
[Google Colaboratory ]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| a = cp.Variable() b = cp.Variable()
objective = cp.Minimize(cp.sum_squares(a * x + b - y))
problem = cp.Problem(objective)
result = problem.solve()
print("a:", a.value) print("b:", b.value)
|
[実行結果]
最後に、フィットした直線をプロットします。
[Google Colaboratory ]
1 2 3 4 5
| plt.scatter(x, y) plt.plot(x, a.value * x + b.value, color='red') plt.xlabel('x') plt.ylabel('y') plt.show()
|
[実行結果]
この例では、CVXPYを使用して線形回帰問題を解き、データポイントに最もよくフィットする直線を見つけることができました。