Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python StandardScaler无法正确缩放_Python_Pandas_Scikit Learn_Theano_Sklearn Pandas - Fatal编程技术网

Python StandardScaler无法正确缩放

Python StandardScaler无法正确缩放,python,pandas,scikit-learn,theano,sklearn-pandas,Python,Pandas,Scikit Learn,Theano,Sklearn Pandas,我正在尝试使用StandardScaler来缩放神经网络的特征 假设神经网络具有以下特征: 1.0 2.0 3.0 4.0 5.0 6.0 4.0 11.0 12.0 etc ... 当我将StandardScaler应用于所有行时,第一行的结果如下: ['-0.920854068785', '-0.88080603151', '-0.571888559111'] 当我尝试将StandardScaler应用于仅由第一行组成的第一行矩阵时,我得到了完全不同的结果 ['0.0',

我正在尝试使用StandardScaler来缩放神经网络的特征

假设神经网络具有以下特征:

1.0  2.0   3.0
4.0  5.0   6.0
4.0  11.0  12.0
etc ...
当我将StandardScaler应用于所有行时,第一行的结果如下:

['-0.920854068785', '-0.88080603151', '-0.571888559111']
当我尝试将StandardScaler应用于仅由第一行组成的第一行矩阵时,我得到了完全不同的结果

['0.0', '0.0', '0.0']
显然,神经网络不会以这种方式工作,因为行不同。有没有什么方法可以使用标准的scaller,这样我每次都能得到相同的结果,对于相同的输入行

以下是代码和输出:

from sklearn.preprocessing import StandardScaler
import numpy as np
sc = StandardScaler()

#defining the (big) matrix
AR = np.array([[1.0,2.0,3.0],[4.0,5.0,6.0],[4.0,11.0,12.0],[42.0,131.0,1121.0],[41.0,111.0,121.0]])
AR = sc.fit_transform(AR)
print "fited data from big array:"
m=0
for row in AR: 
    m = m + 1
    if m==1:print [str(m) for m in row]

#defining the (small) matrix
AR1 = np.array([[1.0,2.0,3.0]])
AR1 = sc.fit_transform(AR1)
print "fited data from small array"
for row in AR1: 
     print [str(m) for m in row]
输出为:

fited data from big array:
['-0.920854068785', '-0.88080603151', '-0.571888559111']
fited data from small array
['0.0', '0.0', '0.0']
StandardScaler将按平均值移动数据,并按标准对其进行缩放,因为您只向其传递一行,每列的平均值是值本身,值将移动到零。看更多

在您的情况下,您应该使scaler适合所有数据,并且对于每一行,您可以使用transform来获得结果

sc.fit(data) # this will compute mean and std on all rows
scaled_row = sc.transform(row) # apply shift to a single row 
StandardScaler将按平均值移动数据,并按标准对其进行缩放,因为您只向其传递一行,每列的平均值是值本身,值将移动到零。看更多

在您的情况下,您应该使scaler适合所有数据,并且对于每一行,您可以使用transform来获得结果

sc.fit(data) # this will compute mean and std on all rows
scaled_row = sc.transform(row) # apply shift to a single row 

像StandardScaler一样,所有估计器都有可以访问的类变量,并且可以打印值。 如果使用StandardScaler,因为要打印平均值,您应该执行以下操作:

定标器=标准定标器 scaler.fitmy\u输入\u数组 打印scaler.mean u以获取每列的平均值 打印scaler.var以获取每列的方差 您可以在中找到所有此类变量的列表

注:StandardScaler的目的是将平均值设为0,并对其进行缩放,而不是查找平均值或方差


这样做是为了使您的输入成为其他函数/算法可以工作的理想输入,并且您可以获得更好的精度。

与StandardScaler一样,所有估计器都有可以访问的类变量,并且可以打印值。 如果使用StandardScaler,因为要打印平均值,您应该执行以下操作:

定标器=标准定标器 scaler.fitmy\u输入\u数组 打印scaler.mean u以获取每列的平均值 打印scaler.var以获取每列的方差 您可以在中找到所有此类变量的列表

注:StandardScaler的目的是将平均值设为0,并对其进行缩放,而不是查找平均值或方差


这样做是为了使您的输入成为其他函数/算法可以工作的理想输入,并且您可以获得更好的精度。

从中,拟合变换的输入是[n_样本,n_特征]。它在列上缩放。每列中只有一个值,因此得到0。是的,每列上只有一个值。但结果必须是一样的。否则神经网络的输入就不一样了,但结果也不一样,因为你要拟合不同的数据。也许你是想叫fit_transformAR和Transformar1 transform/fit_transform谢谢,我在labelencoder和OnHotEncoder中都用错了。很高兴能帮上忙。请考虑将下面的答案标记为正确的,因为它本质上是相同的。从输入到FITTY变换是[NS-样本,NS-特征]。它在列上缩放。每列中只有一个值,因此得到0。是的,每列上只有一个值。但结果必须是一样的。否则神经网络的输入就不一样了,但结果也不一样,因为你要拟合不同的数据。也许你是想叫fit_transformAR和Transformar1 transform/fit_transform谢谢,我在labelencoder和OnHotEncoder中都用错了。很高兴能帮上忙。请考虑将下面的最佳答案标记为正确,因为它本质上说的是同一件事。