chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
import numpy as np
|
||||
|
||||
|
||||
class SigmoidalFeature(object):
|
||||
"""
|
||||
Sigmoidal features
|
||||
|
||||
1 / (1 + exp((m - x) @ c)
|
||||
"""
|
||||
|
||||
def __init__(self, mean, coef=1):
|
||||
"""
|
||||
construct sigmoidal features
|
||||
|
||||
Parameters
|
||||
----------
|
||||
mean : (n_features, ndim) or (n_features,) ndarray
|
||||
center of sigmoid function
|
||||
coef : (ndim,) ndarray or int or float
|
||||
coefficient to be multplied with the distance
|
||||
"""
|
||||
if mean.ndim == 1:
|
||||
mean = mean[:, None]
|
||||
else:
|
||||
assert mean.ndim == 2
|
||||
if isinstance(coef, int) or isinstance(coef, float):
|
||||
if np.size(mean, 1) == 1:
|
||||
coef = np.array([coef])
|
||||
else:
|
||||
raise ValueError("mismatch of dimension")
|
||||
else:
|
||||
assert coef.ndim == 1
|
||||
assert np.size(mean, 1) == len(coef)
|
||||
self.mean = mean
|
||||
self.coef = coef
|
||||
|
||||
def _sigmoid(self, x, mean):
|
||||
return np.tanh((x - mean) @ self.coef * 0.5) * 0.5 + 0.5
|
||||
|
||||
def transform(self, x):
|
||||
"""
|
||||
transform input array with sigmoidal features
|
||||
|
||||
Parameters
|
||||
----------
|
||||
x : (sample_size, ndim) or (sample_size,) ndarray
|
||||
input array
|
||||
|
||||
Returns
|
||||
-------
|
||||
output : (sample_size, n_features) ndarray
|
||||
sigmoidal features
|
||||
"""
|
||||
if x.ndim == 1:
|
||||
x = x[:, None]
|
||||
else:
|
||||
assert x.ndim == 2
|
||||
assert np.size(x, 1) == np.size(self.mean, 1)
|
||||
basis = [np.ones(len(x))]
|
||||
for m in self.mean:
|
||||
basis.append(self._sigmoid(x, m))
|
||||
return np.asarray(basis).transpose()
|
||||
Reference in New Issue
Block a user