Python sci kit发现TransformerMixin具有奇怪的适合转换行为

Python sci kit发现TransformerMixin具有奇怪的适合转换行为,python,scikit-learn,Python,Scikit Learn,继承自TransformerMixin的fit\u transform方法不会将y变量传递给transform方法。 这里有一个最小的例子 class UslessPrint(BaseEstimator, TransformerMixin): def __init__(self): pass def fit(self, X, y=None): print(y) return self def transform(self,

继承自
TransformerMixin
fit\u transform
方法不会将
y
变量传递给
transform
方法。 这里有一个最小的例子

class UslessPrint(BaseEstimator, TransformerMixin):
    def __init__(self):
        pass
    def fit(self, X, y=None):
        print(y)
        return self
    def transform(self, X, y=None):
        print(y)
        return X

usless = mc.UslessPrint()
usless.fit_transform([[1, 2], [2, 1]], [0, 1])
输出为:

[0, 1]
None
而不是预期的

[0, 1]
[0, 1]

这种行为是正常的,还是一个bug。

这是
TransformerMixin
的预期行为,而不是bug

sklearn.Base.TransformerMixin
fit\u transform
在其
transform
中不使用
y

发件人:

如您所见,
TransformerMixin
仅将
X
传递给
transform
,将
y
保留为代码中的
None

class TransformerMixin(object):
    """Mixin class for all transformers in scikit-learn."""

    def fit_transform(self, X, y=None, **fit_params):
        """Fit to data, then transform it.
        Fits transformer to X and y with optional parameters fit_params
        and returns a transformed version of X.
        Parameters
        ----------
        X : numpy array of shape [n_samples, n_features]
            Training set.
        y : numpy array of shape [n_samples]
            Target values.
        Returns
        -------
        X_new : numpy array of shape [n_samples, n_features_new]
            Transformed array.
        """
        # non-optimized default implementation; override when a better
        # method is possible for a given clustering algorithm
        if y is None:
            # fit method of arity 1 (unsupervised transformation)
            return self.fit(X, **fit_params).transform(X)
        else:
            # fit method of arity 2 (supervised transformation)
            return self.fit(X, y, **fit_params).transform(X)