Ch.3 再生核 Hilbert 空間(問題31~45)

In [ ]:
# 第 3 章のプログラムは,事前に下記が実行されていることを仮定する。
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import style
style.use("seaborn-ticks")

38

In [ ]:
def H(j, x):
    if j == 0:
        return 1
    elif j == 1:
        return 2 * x
    elif j == 2:
        return -2 + 4 * x**2
    else:
        return 4 * x - 8 * x**3
In [ ]:
cc = np.sqrt(5) / 4
a = 1/4         ##


def phi(j, x):  ###
    return np.exp(-(cc - a) * x**2) * H(j, np.sqrt(2 * cc) * x)


color = ["b", "g", "r", "k"]
x = np.linspace(-2, 2, 100)
plt.plot(x, phi(0, x), c=color[0], label="j = 0")
plt.ylim(-2, 8)
plt.ylabel("phi")
for i in range(0, 3):
    plt.plot(x, phi(i, x), c=color[i + 1], label="j = %d" % i)
plt.title("Characteristic function of Gauss Kernel")

42

In [ ]:
K = np.zeros((m, m))
for i in range(m):
    for j in range(m):
        K[i, j] = k(x[i], x[j])
    values, vectors = np.linalg.eig(K)
    lam = values / m
    alpha = np.zeros((m, m))
    for i in range(m):
        alpha[:, i] = vectors[:, i] * np.sqrt(m) / (values[i] + 10e-16)


def F(y, i):
    S = 0
    for j in range(m):
        S = S + alpha[j, i] * k(x[j], y)
        return S