データフィッティング CVXPY

データフィッティング

データフィッティングの最小化問題の一例として、線形回帰を考えます。

線形回帰では、データポイントに最もよくフィットする直線を見つけることが目的です。

この問題は、最小二乗法を用いて解くことができます。

解法

以下に、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を使用して線形回帰問題を解き、データポイントに最もよくフィットする直線を見つけることができました。