<jupyter_start><jupyter_text>ガウス基底* 非線形回帰モデルの一種。ガウス分布の重ね合わせで回帰する$$y_i = w_0 +  \sum_{j=1}^m w_j  \phi _j (x_i) +  \varepsilon _i $$* ガウス分布$$ \phi _j (x) = e ^ {  - \frac{ (x-  \mu _j) ^2}{2 \sigma ^2} } = exp ( - \frac{ (x-  \mu _j) ^2}{2 \sigma ^2} )$$    * μ : 平均    * σ : 分散* 量子力学で粒子の存在確率を回帰するとか<jupyter_code>def gauss(x, u, s) :
    return np.exp(-(x-u)**2 / (2.0 * (s ** 2)))

x = np.arange(-3.0, 3.0, 0.05)
y = gauss(x, 1.0, 0.5)
y2 = gauss(x, 0.5, 1.0)
y3 = gauss(x, 0.0, 1.5)

plt.plot(x, y,"r", label="avr={} σ={}".format(1.0, 0.5))
plt.plot(x, y2,"b", label="avr={} σ={}".format(0.5, 1.0))
plt.plot(x, y3,"g", label="avr={} σ={}".format(0.0, 1.5))

plt.ylabel("gauss(x)")
plt.title("Gauss Basis")
plt.grid(True)
plt.legend()
plt.show()<jupyter_output><empty_output><jupyter_text>ガウスカーネル* サポートベクターマシン (SVM) で、データを分別するための関数* RBF (Radial Basis Function) 動径基底関数 とも呼ばれる$$K(u,v) = exp ( - \frac{ || \overrightarrow{u} -  \overrightarrow{v} || ^2}{2 \sigma ^2} )$$* n次元空間のガウス分布の重ね合わせで、データ分類の境界を表現する* 下記は、3次元空間で高さが0.5以上と以下で境界線を作ったときの例<jupyter_code>def kernel(u, v, s) :
    diff = u - v
    return np.exp( -1.0 * np.inner(diff, diff) / (2.0 * (s**2)))

def probability(u, vx, vy, s) :
    vals = []
    for v in np.c_[vx.ravel(),vy.ravel()] :
        vals.append(kernel(u,v,s))
        
    return np.array(vals).reshape(vx.shape)

vx,vy = np.meshgrid(np.linspace(-10,10,num=200), np.linspace(-10,10,num=200))

p = probability(np.array([ 5.0, 0.0]), vx, vy, 2.5)
z = p

# 2d
area = z.copy()
area[z>=0.5] = 1
area[z<0.5] = 0
fig, ax = plt.subplots()
heatmap = ax.pcolor(vx, vy, area, cmap=plt.cm.gray)

# 3d
fig = plt.figure()
ax = Axes3D(fig)
ax.plot_surface(vx, vy, z, cmap=plt.cm.coolwarm, linewidth=0, antialiased=True)

plt.show()<jupyter_output><empty_output><jupyter_text>* ガウス分布を重ね合わせることで、任意の境界を作ることができる (下記は、うさちゃん、あるいはかえるくん)<jupyter_code>vx,vy = np.meshgrid(np.linspace(-10,10,num=200), np.linspace(-10,10,num=200))

p1 = probability(np.array([ 5.0, 0.0]), vx, vy, 1.0)
p2 = probability(np.array([ 0.0, 5.0]), vx, vy, 2.0)
p3 = probability(np.array([-5.0, 0.0]), vx, vy, 3.0)
p4 = probability(np.array([ 0.0,-5.0]), vx, vy, 4.0)
z = 0.6*p1 + 0.9*p2 + 0.6*p3 + 1.0*p4

# 2d
area = z.copy()
area[z>=0.5] = 1
area[z<0.5] = 0
fig, ax = plt.subplots()
heatmap = ax.pcolor(vx, vy, area, cmap=plt.cm.gray)

# 3d
fig = plt.figure()
ax = Axes3D(fig)
ax.plot_surface(vx, vy, z, cmap=plt.cm.coolwarm, linewidth=0, antialiased=True)

plt.show()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.2354368932038835, 'fraction_numerical': 0.061488673139158574, 'mean_word_length': 4.026422764227642, 'pattern_counts': {'":': 0, '<': 15, '<?xml version=': 0, '>': 15, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '3', 'dir': 'jupyter-structured-clean-dedup', 'id': '529003', 'license': 'MIT', 'n_tokens_mistral': 1461, 'n_tokens_neox': 1385, 'n_words': 225, 'path': 'Gauss_Basis.ipynb', 'repo_name': 'kagyuu/jupyter', 'size': '2472'}