【问题标题】:sklearn: Do you need to create a new instance of a transformer for each set of data?sklearn:你需要为每组数据创建一个新的transformer实例吗?
【发布时间】:2020-11-29 00:38:41
【问题描述】:

我是数据科学和 scikit-learn 的新手,所以如果这是一个基本问题,我深表歉意。当我们想在新数据集上训练时,是否需要创建 sklearn 类的新实例?比如我目前在做:

transformer = PowerTransformer()
transformed1 = transformer.fit_transform(data1.to_numpy())

transformer = PowerTransformer()
transformed2 = transformer.fit_transform(data2.to_numpy()) 
...

我想要转换多组数据,以便可以运行KNNImputer(再次使用这种重复声明方法)。

我读到.fit 方法在内部存储了用于拟合传入数据的 lambda,但是存储的 lambda 是否会在每次调用 .fit 时被覆盖,或者它们是否会受到新数据拟合的影响?

这样做会不会错:

transformer = PowerTransformer()
transformed1 = transformer.fit_transform(data1.to_numpy())
transformed2 = transformer.fit_transform(data2.to_numpy())
...

提前谢谢你!

【问题讨论】:

    标签: python pandas scikit-learn data-science


    【解决方案1】:

    不,这不会错,在这两种情况下,您首先要适应数据,然后再对其进行转换。每次使用 fit 它都会覆盖现有的。这是一个例子:

    a = np.array([[1, 3], 
                  [np.nan, 2], 
                  [5, 9]])
    
    c = np.array([[3, 4], 
                  [6, 12], 
                  [8, np.nan]])
    
    imp = SimpleImputer(strategy="mean")
    a1 = imp.fit_transform(a)
    c1 = imp.fit_transform(c)
    

    现在让我们看看输出:

    a1: array([[1., 3.],
               [3., 2.],
               [5., 9.]])
    
    c1: array([[ 3.,  4.],
               [ 6., 12.],
               [ 8.,  8.]])
    

    取两列的平均值(如 sklearn 文档所说)并估算平均值。这在 KNNImputer 中也应该同样有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-25
      • 1970-01-01
      • 2018-12-12
      • 1970-01-01
      • 1970-01-01
      • 2017-05-01
      • 2021-05-29
      • 1970-01-01
      相关资源
      最近更新 更多