Python 缩放数据的正确方法

Python 缩放数据的正确方法,python,tensorflow,machine-learning,scikit-learn,scale,Python,Tensorflow,Machine Learning,Scikit Learn,Scale,我正在使用TensorFlow创建一个简单的DNN模型。 当我对数据进行培训时,我将按以下方式缩放所有列车数据: X_scaler = preprocessing.StandardScaler() X_standard = X_scaler.fit_transform(X_train) 但是当我使用模型检查点时,我必须再次缩放输入。因此,我正在缩放单个样本,如下所示: X_scaler = preprocessing.StandardScaler() X_standard = X_scaler

我正在使用TensorFlow创建一个简单的DNN模型。 当我对数据进行培训时,我将按以下方式缩放所有列车数据:

X_scaler = preprocessing.StandardScaler()
X_standard = X_scaler.fit_transform(X_train)
但是当我使用模型检查点时,我必须再次缩放输入。因此,我正在缩放单个样本,如下所示:

X_scaler = preprocessing.StandardScaler()
X_standard = X_scaler.transform(X_test)
[[11.000000 61.000000 134217728.000000 ... 0.000000 46596.313072
  272756.723290]
 [1.000000 87.000000 134217728.000000 ... 16.449219 13925.136928
  289477.942990]
 [16.000000 73.000000 2097152.000000 ... 19567.666016 50885.644772
  305358.707758]]
但是单个样本的缩放给了我
[[0.0000000.0000000.0000000.0000000.000000]]

有人能向我解释我做错了什么,我怎样才能正确地缩放吗? 我的列车数据是一个csv文件,内部如下所示:

X_scaler = preprocessing.StandardScaler()
X_standard = X_scaler.transform(X_test)
[[11.000000 61.000000 134217728.000000 ... 0.000000 46596.313072
  272756.723290]
 [1.000000 87.000000 134217728.000000 ... 16.449219 13925.136928
  289477.942990]
 [16.000000 73.000000 2097152.000000 ... 19567.666016 50885.644772
  305358.707758]]
我的单个测试样本相同,但只是数组中的一个元素:

[[57.000000 14.000000 2097152.000000 5.000000 3.000000 3.000000 0.000000
  262.000000 81788928.000000 1001.000000 527593.000000 349181.000000
  182.000000 11.000000 0.349954 0.701496 95.800000 2.280000 1.790000
  13141380.000000 3166248.000000 19.420000 25.400000 100.740000
  31004.910000 2.000000 1000000000.000000 93.370000 3.030000 3.540000
  11483952.000000 3923548.000000 25.470000 40.370000 186.790000
  49280.940000 18.000000 3700000000.000000 750.371094 17519.000000
  27508.000000 18915.000000 149477.500000 2080774.000000 189943.000000
  0.000325 5.376465 350.303954 370104.379128]]

在调用
X\u test
上的transform之前,您正在实例化另一个
X\u scalar
?您将替换安装在
X\u列
上的第一个
X\u标量
,因此它不能正确缩放。删除第二个
X\u scaler=preprocessing.StandardScaler()
。我不认为这是问题所在,因为第一个scaler是我创建的模型,第二个scaler是我使用这个创建的模型ckpt,再次缩放输入并将其输入到模型中。不,您的模型是根据以特定方式缩放的数据进行训练的(通过您的第一个
X\u标量
),因此它期望在预测过程中以相同的方式缩放输入。即,您需要将第一个
X_标量
也应用于您的测试数据。此外,即使不是这样,您也要在第二个
X_标量
方法安装任何东西之前调用
.transform
方法。这是否意味着必须通过
X\u scaler=preprocessing.StandardScaler()
在列车和模型之间,在会话中以某种方式将其保存在TF中?特洛伊,我认为你错了,我认为scaler方法是在样本之间进行缩放,而不是在特性之间进行缩放,因此如果我使用以下代码:
X\u test=[[3,1,…1,1]]X\u scaler=preprocessing.StandardScaler()X\u test\u test=X\u scaler.fit\u transform(X\u test)print(X\u test\u test)
本身再次给我0s:
[[0.0000000.0000000.0000000.0000000.0000000.0000000.000000]