Permalink
Switch branches/tags
Nothing to show
Find file Copy path
7cfc247 Sep 9, 2016
@vighneshbirodkar @TomDLT @kjacks21
191 lines (154 sloc) 5.42 KB
"""
This is a module to be used as a reference for building other modules
"""
import numpy as np
from sklearn.base import BaseEstimator, ClassifierMixin, TransformerMixin
from sklearn.utils.validation import check_X_y, check_array, check_is_fitted
from sklearn.utils.multiclass import unique_labels
from sklearn.metrics import euclidean_distances
class TemplateEstimator(BaseEstimator):
""" A template estimator to be used as a reference implementation .
Parameters
----------
demo_param : str, optional
A parameter used for demonstation of how to pass and store paramters.
"""
def __init__(self, demo_param='demo_param'):
self.demo_param = demo_param
def fit(self, X, y):
"""A reference implementation of a fitting function
Parameters
----------
X : array-like or sparse matrix of shape = [n_samples, n_features]
The training input samples.
y : array-like, shape = [n_samples] or [n_samples, n_outputs]
The target values (class labels in classification, real numbers in
regression).
Returns
-------
self : object
Returns self.
"""
X, y = check_X_y(X, y)
# Return the estimator
return self
def predict(self, X):
""" A reference implementation of a predicting function.
Parameters
----------
X : array-like of shape = [n_samples, n_features]
The input samples.
Returns
-------
y : array of shape = [n_samples]
Returns :math:`x^2` where :math:`x` is the first column of `X`.
"""
X = check_array(X)
return X[:, 0]**2
class TemplateClassifier(BaseEstimator, ClassifierMixin):
""" An example classifier which implements a 1-NN algorithm.
Parameters
----------
demo_param : str, optional
A parameter used for demonstation of how to pass and store paramters.
Attributes
----------
X_ : array, shape = [n_samples, n_features]
The input passed during :meth:`fit`
y_ : array, shape = [n_samples]
The labels passed during :meth:`fit`
"""
def __init__(self, demo_param='demo'):
self.demo_param = demo_param
def fit(self, X, y):
"""A reference implementation of a fitting function for a classifier.
Parameters
----------
X : array-like, shape = [n_samples, n_features]
The training input samples.
y : array-like, shape = [n_samples]
The target values. An array of int.
Returns
-------
self : object
Returns self.
"""
# Check that X and y have correct shape
X, y = check_X_y(X, y)
# Store the classes seen during fit
self.classes_ = unique_labels(y)
self.X_ = X
self.y_ = y
# Return the classifier
return self
def predict(self, X):
""" A reference implementation of a prediction for a classifier.
Parameters
----------
X : array-like of shape = [n_samples, n_features]
The input samples.
Returns
-------
y : array of int of shape = [n_samples]
The label for each sample is the label of the closest sample
seen udring fit.
"""
# Check is fit had been called
check_is_fitted(self, ['X_', 'y_'])
# Input validation
X = check_array(X)
closest = np.argmin(euclidean_distances(X, self.X_), axis=1)
return self.y_[closest]
class TemplateTransformer(BaseEstimator, TransformerMixin):
""" An example transformer that returns the element-wise square root..
Parameters
----------
demo_param : str, optional
A parameter used for demonstation of how to pass and store paramters.
Attributes
----------
input_shape : tuple
The shape the data passed to :meth:`fit`
"""
def __init__(self, demo_param='demo'):
self.demo_param = demo_param
def fit(self, X, y=None):
"""A reference implementation of a fitting function for a transformer.
Parameters
----------
X : array-like or sparse matrix of shape = [n_samples, n_features]
The training input samples.
y : None
There is no need of a target in a transformer, yet the pipeline API
requires this parameter.
Returns
-------
self : object
Returns self.
"""
X = check_array(X)
self.input_shape_ = X.shape
# Return the transformer
return self
def transform(self, X):
""" A reference implementation of a transform function.
Parameters
----------
X : array-like of shape = [n_samples, n_features]
The input samples.
Returns
-------
X_transformed : array of int of shape = [n_samples, n_features]
The array containing the element-wise square roots of the values
in `X`
"""
# Check is fit had been called
check_is_fitted(self, ['input_shape_'])
# Input validation
X = check_array(X)
# Check that the input is of the same shape as the one passed
# during fit.
if X.shape != self.input_shape_:
raise ValueError('Shape of input is different from what was seen'
'in `fit`')
return np.sqrt(X)