sklearn StandardScaler为所有输入返回全零

时间:2019-07-14 15:57:38

标签: python-3.x numpy scikit-learn

我正在将用户输入设置为1行8列的矩阵,然后功能缩放这些值,以便可以使用矩阵中的值预测得到的错误

  

ValueError:找到的数组为暗3。预期的StandardScaler <= 2

我尝试了

  matrix = q.fit_transform(matrix[:, np.newaxis]) 

但是它返回-Found数组,其值为暗3。StandardScaler预期为<= 2。

 R = int(input("Enter the number of rows:")) 
 C = int(input("Enter the number of columns:")) 


 print("Enter the entries in a single line (separated by space): ") 

 entries = list(map(float, input().split())) 

 matrix = np.array(entries).reshape(R, C) 
 print(matrix)

 matrix = q.fit_transform(matrix)

我希望获得StandardScale结果,但返回

[0.000000000000000000e+00   0.000000000000000000e+00     
0.000000000000000000e+00    0.000000000000000000e+00     
0.000000000000000000e+00    0.000000000000000000e+00     
0.000000000000000000e+00    0.000000000000000000e+00]

1 个答案:

答案 0 :(得分:0)

我认为您误解了StandardScaler的逻辑。每个数据点均值减去并用标准偏差归一化。因此,如果数据点的数量为1,则该值为零。

来自Documentation

  

样本x的标准得分计算如下:

     

z =(x-u)/ s

     

其中,u是训练样本的平均值;如果是,则为零   with_mean = False,并且s是训练的标准偏差   样本,如果with_std = False,则为一个。

因此,如果您只有一个数据点,那么标准分数将始终为全零。

from sklearn.preprocessing import StandardScaler
data = [[1, 2, 3, 1, 3, 2, 1]]
scaler = StandardScaler()
print(scaler.fit_transform(data))

# [[0. 0. 0. 0. 0. 0. 0.]]