Created
January 25, 2017 16:07
-
-
Save nkt1546789/733e376a5c63b52b183cc548d3124bd3 to your computer and use it in GitHub Desktop.
Nonlinear data transformer using Gaussian kernel.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import numpy as np | |
class GaussianTransformer(object): | |
def __init__(self, sigma=1.0, b=100, random_state=1): | |
self.sigma = sigma | |
self.b = 100 | |
self.random_state = random_state | |
def fit(self, X): | |
b = np.min([X.shape[0], self.b]) | |
r = np.random.RandomState(self.random_state) | |
idx = r.permutation(X.shape[0]) | |
self.Xce = X[idx[:b]] | |
self.Xce2 = np.c_[np.sum(self.Xce**2, axis=1)] | |
return self | |
def fit_transform(self, X): | |
self.fit(X) | |
return self.transform(X) | |
def transform(self, X): | |
X2 = np.c_[np.sum(X**2, axis=1)] | |
dist2 = X2 + self.Xce2.T - 2*X.dot(self.Xce.T) | |
return np.exp(-dist2/(2*self.sigma**2)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment