from _api_doc_utils import *KernelBasis
Kernel feature transformer against the training basis
1 Where it fits
Group: Transforms
KernelBasis stores a training design and transforms new rows into kernel similarities against that basis. For a Gaussian kernel, the transformed feature for training row \(j\) is
\[ \phi_j(x) = \exp\{-\|x-x_j\|^2/(2h^2)\}. \]
The resulting feature matrix can be fed into any downstream regression estimator.
2 Python API
Constructor: cm.KernelBasis
Use KernelBasis(kernel='gaussian', bandwidth=0.5, coef0=1.0, degree=2.0). fit(x) stores training rows. transform(x) returns kernel features. summary() reports the chosen kernel and basis dimensions.
print(inspect.signature(cm.KernelBasis))(kernel='gaussian', bandwidth=0.5, coef0=1.0, degree=2.0)
cls = cm.KernelBasis
display(HTML(html_table(["Public method"], public_methods(cls))))| Public method |
|---|
fit(self, /, x) |
fit_transform(self, /, x) |
summary(self, /) |
transform(self, /, x) |
3 Minimal example
rng=np.random.default_rng(23)
x=rng.normal(size=(80,2)); y=np.sin(x[:,0])+rng.normal(scale=.1,size=80)
basis=cm.KernelBasis(kernel="gaussian", bandwidth=0.8); z=basis.fit_transform(x)
reg=cm.Ridge(penalty=0.1); reg.fit(z,y)
print(basis.summary())
print(reg.predict(basis.transform(x[:3]))){'kernel': 'gaussian', 'n_train': 80, 'n_features': 2, 'bandwidth': 0.8, 'coef0': 1.0, 'degree': 2.0, 'diagonal': array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])}
[ 0.53255368 -0.02676873 0.27494531]
4 summary() contract
The table below is generated by fitting the live class in this repository and then inspecting summary(). Shapes are shown because most values are plain NumPy arrays or scalars.
rng=np.random.default_rng(123); x=rng.normal(size=(50,2)); model=cm.KernelBasis(kernel='gaussian',bandwidth=.8); model.fit(x)
summary = model.summary()
display(HTML(html_table(["summary() key", "shape"], summary_shape_rows(summary))))| summary() key | shape |
|---|---|
kernel |
() |
n_train |
() |
n_features |
() |
bandwidth |
() |
coef0 |
() |
degree |
() |
diagonal |
(50,) |