【问题标题】:Sklearn scaling: scales the original data as wellSklearn 缩放:也缩放原始数据
【发布时间】:2019-07-31 09:23:30
【问题描述】:

我正在尝试使用 Sklearn MinMaxScaler 仅缩放特定的 Numpy 列,但是,缩放会影响其他未用于拟合或在转换过程中的数据。

这是一个简单的例子:

# lib import 
import numpy as np
from sklearn.preprocessing import MinMaxScaler

# original np array 
original = np.array([[1, 2, 3], [4, 5, 6]])

>>> print(original)
[[1 2 3]
 [4 5 6]]        

# make a copy of the original array 
copy = original

# minmax scaler 
minmax_scaler = MinMaxScaler(feature_range=(0, 1))

# fit and transform only 2nd and 3rd positions 
copy[:,1:] = minmax_scaler.fit_transform(copy[:,1:])


>>> print(copy)
[[1 0 0]
 [4 0 1]]

>>> print(original)
[[1 0 0]
 [4 0 1]]

为什么原始数组值也会被缩放?

【问题讨论】:

    标签: python numpy scikit-learn


    【解决方案1】:

    这行不通 -

    copy = original
    

    在 Python 中,赋值语句不会复制对象,它们会在目标和对象之间创建绑定。当我们使用 = 运算符时,我们认为这会创建一个新对象;好吧,事实并非如此。

    它只创建一个共享原始对象引用的新变量。有时我们想要使用可变对象,为此我们寻找一种方法来创建这些对象的“真实副本”或“克隆”。

    您需要使用“深拷贝”或“浅拷贝”

    # importing copy module 
    import copy 
    
    # initializing list 1  
    original = [1, 2, [3,5], 4] 
    
    
    # using copy for shallow copy   
    copy1 = copy.copy(original)  
    
    # using deepcopy for deepcopy   
    copy2 = copy.deepcopy(original) 
    

    您可以在互联网上阅读有关浅拷贝和深拷贝之间差异的更多信息。多篇文章可供选择。

    【讨论】:

      猜你喜欢
      • 2018-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-18
      • 1970-01-01
      • 1970-01-01
      • 2016-12-13
      相关资源
      最近更新 更多