【问题标题】:Does scikit learn's fit_transform also transform my original dataframe?scikit learn 的 fit_transform 是否也会转换我的原始数据框?
【发布时间】:2015-09-24 15:02:22
【问题描述】:

我正在使用 scikit learning 的 StandardScaler() 并注意到在我应用 transform(xtrain) 或 fit_transform(xtrain) 后,它也会更改我的 xtrain 数据框。这应该发生吗?如何避免 StandardScaler 更改我的数据框? (我尝试过使用 copy=False)

xtrain.describe()    #everything ok here
scalar = StandardScaler()
xtrain2 = scalar.fit_transform(xtrain)   

在这个阶段,我希望 xtrain 不会发生变化,而 xtrain2 将是 xtrain 的缩放版本。但是当我在 2 个数据帧上运行 describe() 时,我发现它们都是相同的,并且都被缩放了。这是为什么呢?

我遇到同样的问题:

scalekey = scalar.fit(xtrain)
xtrain2 = scalekey.transform(xtrain)

【问题讨论】:

  • 你使用的是什么版本的 sklearn、numpy 和 pandas docs 声明 copy=True 的默认参数应该意味着它返回一个副本而不是就地执行缩放
  • 我无法使用 pandas 0.16.2、python 3.3.4 64 位、numpy 1.9.2 和 sklearn 0.16.1 重现您的错误
  • @EdChum,我遇到了 Jason 用 pandas 0.14.x 和 sklearn 0.15.x 描述的问题。这是库之间的交叉交互之一,显然已在更高版本中修复(如交叉验证问题)。
  • @EdChum,我在 Anaconda 2.2.0(64 位)中使用 sklearn 0.15.2、pandas 0.15.2、numpy 1.9.2、Python 2.7.9。感谢您在下面的解决方案,它有效。我开始认为这是因为我的 xtrain 是我原始数据帧的视图,所以转换会影响它.. xtrain, xtest = dfX[idx], dfX[idx==False]
  • 嗨,我查看了我的 df 的一部分,但我仍然无法重现您的问题,我会尝试升级 pandas 和 sklearn,另一件要尝试的事情是 xtrain2 = scalar.fit_transform(xtrain.values) 是否修改了 df 或不是

标签: python pandas scikit-learn


【解决方案1】:

您可以复制并传递它,以免修改您的 df:

xtrain2 = xtrain.copy()
scalar.fit_transform(xtrain2) 

docs 声明 StandardScaler 的默认参数是 copy=True,因此它不应该修改您的 df。

【讨论】:

    【解决方案2】:

    考虑在 pandas 和 scikit-learn 中升级到 0.16.x 或更高版本。包作者不断改进每个包对待另一个包的方式。

    【讨论】:

      猜你喜欢
      • 2014-03-26
      • 2016-06-18
      • 2015-03-07
      • 1970-01-01
      • 2023-03-11
      • 2017-11-29
      • 1970-01-01
      • 2015-10-12
      • 2023-04-11
      相关资源
      最近更新 更多