カーネルメソッド matplotlib

カーネルメソッド

カーネルメソッドは、データを高次元空間にマッピングすることで、高次元空間上での計算を低次元空間上で行うことで計算効率を向上させる手法の一つです。

以下に、ガウスカーネルを用いたカーネルメソッドの具体的な例を示します。

まず、必要なライブラリをインポートします。

1
2
import numpy as np
import matplotlib.pyplot as plt

次に、カーネル関数を定義します。
ここでは、ガウスカーネルを使用します。

1
2
def kernel(x, y):
return np.exp(-0.5*(x - y)**2 / 2)

次に、目的関数を定義します。

1
2
def f(x):
return 2 * x + 5 * np.cos(x)

次に、データを生成します。

1
2
3
4
5
6
7
np.random.seed(seed=4)
n = 13
m = 100
X = np.linspace(0, 10, m)
y_truth = f(X)
x = 0.5 + 8.5 * np.random.rand(n)
y = f(x)

次に、カーネルマトリックスを計算します。

1
K = np.array([[kernel(x[i], x[j]) for j in range(n)] for i in range(n)])

次に、カーネルメソッドによる予測を行います。

1
2
3
4
5
6
7
8
c = np.linalg.inv(K) @ y
y_pred = []
for i in range(m):
sum = 0
for j in range(n):
sum += c[j] * kernel(x[j], X[i])
y_pred.append(sum)
y_pred = np.array(y_pred)

最後に、予測結果をグラフに表示します。

1
2
3
4
5
6
fig, ax = plt.subplots()
ax.scatter(x, y, label="data")
ax.plot(X, y_pred, color="red", label="predict")
ax.plot(X, y_truth, label="ground truth")
ax.legend()
plt.show()

このコードは、ガウスカーネルを用いたカーネルメソッドの具体的な例を示しています。

結果解説

カーネルメソッドの例題で生成されるグラフは、データ点予測値真の値を表示したものです。

データ点:

青い点で表示されています。
これは、元のデータ点を表しています。

予測値:

赤い実線で表示されています。
これは、カーネルメソッドによる予測値を表しています。

真の値:

青い実線で表示されています。
これは、真の値(この場合は、カーネルメソッドが予測しようとしている関数の値)を表しています。

このグラフは、カーネルメソッドがどのようにデータを高次元空間にマッピングし、その高次元空間上での計算を低次元空間上で行っているかを視覚的に示しています。

また、カーネルメソッドがどの程度真の値を正確に予測できているかも示しています。