How do I alter my code to pass this test? Could my estimator trip up on any further tests?
I have attached the relevant .py files if you require a bigger picture. This particular snippet comes from the OptimalKernel.py file.
Many thanks,
Sam Barnett
Sqizer, that has the ultimate goal of modifying a kernel for use with the sklearn.svm package. When given an input data array X, Sqizer.transform(X) X using the modified version of the kernel. Here is the code for the class so far:class Sqizer(BaseEstimator, TransformerMixin):
def __init__(self, C=1.0, kernel='rbf', degree=3, gamma=1,
coef0=0.0, cut_ord_pair=(2,1)):
self.C = C
self.kernel = kernel
self.degree = degree
self.gamma = gamma
self.coef0 = coef0
self.cut_ord_pair = cut_ord_pair
def fit(self, X, y=None):
# 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 self
def transform(self, X):
X = check_array(X, warn_on_dtype=True)
"""Returns Gram matrix corresponding to X, once sqized."""
def kPolynom(x,y):
return (self.coef0+self.gamma*np.inner (x,y))**self.degree
def kGauss(x,y):
return np.exp(-self.gamma*np.sum(np.square (x-y)))
def kLinear(x,y):
return np.inner(x,y)
def kSigmoid(x,y):
return np.tanh(self.gamma*np.inner(x,y ) +self.coef0)
def kernselect(kername):
switcher = {
'linear': kPolynom,
'rbf': kGauss,
'sigmoid': kLinear,
'poly': kSigmoid,
}
return switcher.get(kername, "nothing")
cut_off = self.cut_ord_pair[0]
order = self.cut_ord_pair[1]
from SeqKernel import hiSeqKernEval
def getGram(Y):
gram_matrix = np.zeros((Y.shape[0], Y.shape[0]))
for row1ind in range(Y.shape[0]):
for row2ind in range(X.shape[0]):
gram_matrix[row1ind,row2ind] = \
hiSeqKernEval(Y[row1ind],Y[row2ind ],kernselect(self.kernel),\
cut_off ,order)
return gram_matrix
return getGram(X)However, when I run the
check_estimatormethod onSqizer, I get an error with the following check:# raises error on malformed input for transform if hasattr(X, 'T'): # If it's not an array, it does not have a 'T' property assert_raises(ValueError, transformer.transform, X.T)How do I alter my code to pass this test? Could my estimator trip up on any further tests?
I have attached the relevant .py files if you require a bigger picture. This particular snippet comes from the OptimalKernel.py file.
Many thanks,
Sam Barnett