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

Joel Nothman joel.nothman at gmail.com
Wed Jul 26 18:04:58 EDT 2017


The difference is the functional form versus the context manager. you can't
add extra parameters to the function, only to the context manager.

On 27 Jul 2017 12:56 am, "Andreas Mueller" <t3kcit at gmail.com> wrote:

> Hm, it would be nice to do this in a way that relies less on pytest, but I
> guess that would be tricky.
> One way would be to use assert_raise_message to make clear what the
> expected error is.
> But that would make the current test more strict - not necessarily that
> bad, I guess?
>
> It looks like all asserts in unittest have a "msg" argument... apart from
> assertRaises:
> https://docs.python.org/2/library/unittest.html#
> unittest.TestCase.assertRaises
>
> That has been fixed in Python 3.3, though:
> https://docs.python.org/3/library/unittest.html#
> unittest.TestCase.assertRaises
>
> So maybe we should just do a backport for assert_raises and
> assert_raises_regex?
>
>
> On 07/25/2017 07:58 PM, Joel Nothman wrote:
>
> 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(
>>>>>
>>>>>
> _______________________________________________
> 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/20170727/e04b43f3/attachment-0001.html>


More information about the scikit-learn mailing list