Python 缩放数据的正确方法
我正在使用TensorFlow创建一个简单的DNN模型。 当我对数据进行培训时,我将按以下方式缩放所有列车数据: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
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]