Machine learning 为什么不是';我的自定义转换器不能转换测试集吗?

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]

我正在尝试构建一个自定义的转换器来标准化代码。如果我在训练集上使用fit_变换,它会正常工作,但只有在测试中应用变换函数时,它才会返回NaNs。我在下面提到了代码。代码的输入是一个数据帧。假设一个随机的3*3数据帧,整数值在(0,4)范围内。我的转换返回的输出是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显示您的代码请不要使用评论空间发布代码-根据需要编辑和更新您的文章我如何向您显示代码?没有在评论部分添加我的评论@木吉加