[scikit-learn] Fwd: Custom transformer failing check_estimator test

Joel Nothman joel.nothman at gmail.com
Tue Jul 25 19:58:35 EDT 2017


One advantage of moving to pytest is that we can put messages into
pytest.raises, and we should emphasise this in moving the check_estimator
assertions to pytest. But I'm also not sure how we do the deprecation of
nosetests for check_estimator in a way that is friendly to our
contribbers...

On 26 July 2017 at 06:31, Andreas Mueller <t3kcit at gmail.com> wrote:

> Indeed, it makes sure that the transform is applied to data with the same
> number of samples as the input.
> PR welcome to provide a better error message on this!
>
> On 07/25/2017 08:15 AM, Sam Barnett wrote:
>
> Apologies: I've since worked out what the problem was and have resolved
> this issue. This was what I was missing in my code:
>
>
>         # 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`')
>
>
> On Tue, Jul 25, 2017 at 9:41 AM, Sam Barnett <sambarnett95 at gmail.com>
> wrote:
>
>> This is the Traceback I get:
>>
>>
>> AssertionErrorTraceback (most recent call last)
>> <ipython-input-5-166b8f0141db> in <module>()
>> ----> 1 check_estimator(OK.Sqizer)
>>
>> /Users/Sam/anaconda/lib/python2.7/site-packages/sklearn/util
>> s/estimator_checks.pyc in check_estimator(Estimator)
>>     253     check_parameters_default_constructible(name, Estimator)
>>     254     for check in _yield_all_checks(name, Estimator):
>> --> 255         check(name, Estimator)
>>     256
>>     257
>>
>> /Users/Sam/anaconda/lib/python2.7/site-packages/sklearn/utils/testing.pyc
>> in wrapper(*args, **kwargs)
>>     353             with warnings.catch_warnings():
>>     354                 warnings.simplefilter("ignore", self.category)
>> --> 355                 return fn(*args, **kwargs)
>>     356
>>     357         return wrapper
>>
>> /Users/Sam/anaconda/lib/python2.7/site-packages/sklearn/utils/estimator_checks.pyc
>> in check_transformer_general(name, Transformer)
>>     578     X = StandardScaler().fit_transform(X)
>>     579     X -= X.min()
>> --> 580     _check_transformer(name, Transformer, X, y)
>>     581     _check_transformer(name, Transformer, X.tolist(), y.tolist())
>>     582
>>
>> /Users/Sam/anaconda/lib/python2.7/site-packages/sklearn/utils/estimator_checks.pyc
>> in _check_transformer(name, Transformer, X, y)
>>     671         if hasattr(X, 'T'):
>>     672             # If it's not an array, it does not have a 'T'
>> property
>> --> 673             assert_raises(ValueError, transformer.transform, X.T)
>>     674
>>     675
>>
>> /Users/Sam/anaconda/lib/python2.7/unittest/case.pyc in assertRaises(self,
>> excClass, callableObj, *args, **kwargs)
>>     471             return context
>>     472         with context:
>> --> 473             callableObj(*args, **kwargs)
>>     474
>>     475     def _getAssertEqualityFunc(self, first, second):
>>
>> /Users/Sam/anaconda/lib/python2.7/unittest/case.pyc in __exit__(self,
>> exc_type, exc_value, tb)
>>     114                 exc_name = str(self.expected)
>>     115             raise self.failureException(
>> --> 116                 "{0} not raised".format(exc_name))
>>     117         if not issubclass(exc_type, self.expected):
>>     118             # let unexpected exceptions pass through
>>
>> AssertionError: ValueError not raised
>>
>>
>> On Tue, Jul 25, 2017 at 12:54 AM, Joel Nothman <joel.nothman at gmail.com>
>> wrote:
>>
>>> what is the failing test? please provide the full traceback.
>>>
>>> On 24 Jul 2017 10:58 pm, "Sam Barnett" <sambarnett95 at gmail.com> wrote:
>>>
>>>> Dear scikit-learn developers,
>>>>
>>>> I am developing a transformer, named 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) should have as its
>>>> output the Gram matrix for 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.
>>>>
>>>> ...
>>>
>>> [Message clipped]
>>> _______________________________________________
>>> scikit-learn mailing list
>>> scikit-learn at python.org
>>> https://mail.python.org/mailman/listinfo/scikit-learn
>>>
>>>
>>
>
>
> _______________________________________________
> scikit-learn mailing listscikit-learn at python.orghttps://mail.python.org/mailman/listinfo/scikit-learn
>
>
>
> _______________________________________________
> scikit-learn mailing list
> scikit-learn at python.org
> https://mail.python.org/mailman/listinfo/scikit-learn
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/scikit-learn/attachments/20170726/06cb2a63/attachment-0001.html>


More information about the scikit-learn mailing list