SVM with RBF kernel Gamma Factor

SVM with RBF kernel Gamma Factor
Author

Nipun Batra

Published

April 25, 2023

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import cm
%matplotlib inline
X = np.array([
    [0, 0],
    [-1, 0],
    [1, 0],
    [0, 1],
    [0, -1],
    [-2, 0],
    [2, 0],
    [0, -2],
    [0, 2]
])
y = np.array([1, 1, 1, 1, 1, -1, -1, -1, -1])
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=cm.Paired)
plt.gca().set_aspect('equal')

import pandas as pd

df = pd.DataFrame(X, columns=['x1', 'x2'])
df['y'] = y
df
x1 x2 y
0 0 0 1
1 -1 0 1
2 1 0 1
3 0 1 1
4 0 -1 1
5 -2 0 -1
6 2 0 -1
7 0 -2 -1
8 0 2 -1
from sklearn.metrics.pairwise import rbf_kernel
import seaborn as sns

gamma = 0.1  # parameter for RBF kernel
K = rbf_kernel(X, gamma=gamma)
sns.heatmap(K, annot=True, cmap=cm.viridis)
<AxesSubplot:>

gammas = [0.01, 0.1, 1]
fig, axes = plt.subplots(1, 3, figsize=(16, 4))
for ax, gamma in zip(axes.ravel(), gammas):
    K = rbf_kernel(X, gamma=gamma)
    # Annotate to 1 decimal digit and use min = 0.0 and max =1.0
    sns.heatmap(K, annot=True, cmap=cm.viridis, ax=ax, fmt='.1f', vmin=0.0, vmax=1.0)
    ax.set_title('gamma = {}'.format(gamma))

# Compare with the linear kernel
from sklearn.metrics.pairwise import linear_kernel, polynomial_kernel

K = linear_kernel(X)
sns.heatmap(K, annot=True, cmap=cm.viridis, fmt='.1f')
<AxesSubplot:>

# Compare with the polynomial kernel
K = polynomial_kernel(X, degree=2)
sns.heatmap(K, annot=True, cmap=cm.viridis, fmt='.1f')
<AxesSubplot:>