【发布时间】: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