Machine learning 为什么不是';我的自定义转换器不能转换测试集吗?
我正在尝试构建一个自定义的转换器来标准化代码。如果我在训练集上使用fit_变换,它会正常工作,但只有在测试中应用变换函数时,它才会返回NaNs。我在下面提到了代码。代码的输入是一个数据帧。假设一个随机的3*3数据帧,整数值在(0,4)范围内。我的转换返回的输出是NAN数组,其中行=传递的测试数据的行,列=测试数据列数的两倍,NAN像这样无处不在Machine learning 为什么不是';我的自定义转换器不能转换测试集吗?,machine-learning,scikit-learn,Machine Learning,Scikit Learn,我正在尝试构建一个自定义的转换器来标准化代码。如果我在训练集上使用fit_变换,它会正常工作,但只有在测试中应用变换函数时,它才会返回NaNs。我在下面提到了代码。代码的输入是一个数据帧。假设一个随机的3*3数据帧,整数值在(0,4)范围内。我的转换返回的输出是NAN数组,其中行=传递的测试数据的行,列=测试数据列数的两倍,NAN像这样无处不在 array([[nan, nan, nan, nan, nan, nan], [nan, nan, nan, nan, nan, nan]
array([[nan, nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan, nan]])
这是我的自定义转换器代码:
from sklearn.base import TransformerMixin, BaseEstimator
class smooth_score(TransformerMixin):
def __init__(self):
pass
def fit(self, X, y=None):
self.mean = np.mean(X)
self.std = np.std(X)
return self
def transform(self, X):
X = (X - self.mean) / self.std
return np.array(X)
以下是您的代码的修改版本:
将熊猫作为pd导入
将numpy作为np导入
从sklearn.base导入TransformerMixin
班级平滑分数(TransformerMixin):
定义初始化(自):
通过
def配合(自身、X、y=无):
self.mean=np.mean(X,轴=(0,1))
self.std=np.std(X,轴=(0,1))
回归自我
def变换(自,X):
X=(X-自我平均值)/自我标准
返回X
df=pd.DataFrame([[1,2,3],[4,5,6],[7,8,9])
tf.拟合(df.值)
new=tf.transform(df.values)
其中new
是:
array([[-1.54919334, -1.161895 , -0.77459667],
[-0.38729833, 0. , 0.38729833],
[ 0.77459667, 1.161895 , 1.54919334]])
np.std()
和np.mean()
在每个轴上工作,因此如果要计算所有轴上的值(即获取单个数字,而不是1D向量),则需要指定所有轴-因此axis=(0,1)
参数。这将解决您的维度问题np.std()
和np.mean()
将不适用于熊猫数据,因此df.values
将获取基础numpy数组。或者,您可以使用X.mean().mean()
和X.std().std()
其中X
是数据帧(双mean()
和std()
不是错误!)self.std==0
,这也会给你NaN
以下是您的代码的修改版本:
将熊猫作为pd导入
将numpy作为np导入
从sklearn.base导入TransformerMixin
班级平滑分数(TransformerMixin):
定义初始化(自):
通过
def配合(自身、X、y=无):
self.mean=np.mean(X,轴=(0,1))
self.std=np.std(X,轴=(0,1))
回归自我
def变换(自,X):
X=(X-自我平均值)/自我标准
返回X
df=pd.DataFrame([[1,2,3],[4,5,6],[7,8,9])
tf.拟合(df.值)
new=tf.transform(df.values)
其中new
是:
array([[-1.54919334, -1.161895 , -0.77459667],
[-0.38729833, 0. , 0.38729833],
[ 0.77459667, 1.161895 , 1.54919334]])
np.std()
和np.mean()
在每个轴上工作,因此如果要计算所有轴上的值(即获取单个数字,而不是1D向量),则需要指定所有轴-因此axis=(0,1)
参数。这将解决您的维度问题np.std()
和np.mean()
将不适用于熊猫数据,因此df.values
将获取基础numpy数组。或者,您可以使用X.mean().mean()
和X.std().std()
其中X
是数据帧(双mean()
和std()
不是错误!)self.std==0
,这也会给你NaN
请不要使用评论空间发布代码-根据需要编辑和更新您的帖子如何显示代码?没有在评论部分添加我的评论@mujjigacan您可以通过调用Transformer显示您的代码请不要使用评论空间发布代码-根据需要编辑和更新您的文章我如何向您显示代码?没有在评论部分添加我的评论@木吉加