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)