sklearn中的归一化方法StandardScaler中的fit、transform和fit_transform

StandardScaler类

常用的数据归一化方式:减去平均值,然后通过标准差映射到均至为0的空间内。系统会记录每个输入参数的平均数和标准差,以便数据可以还原。

sklearn.preprocessing.StandardScaler能够轻松的实现上述功能,得到的是一个均值为0,方差为1的正态分布的结果

其中包含的方法有:

  • fit(X[, y])Compute the mean and std to be used for later scaling.
    • 计算用于后续缩放的平均值和标准差
  • transform(X[, y, copy])Perform standardization by centering and scaling
    • 通过居中和缩放执行标准化
  • fit_transform(X[, y])Fit to data, then transform it.
    • 直接计算平均值和std,并执行转换
  • get_params([deep])Get parameters for this estimator.
    • 获取此估计器的参数
  • inverse_transform(X[, copy])Scale back the data to the original representation
    • 将数据缩小到原始表示
  • partial_fit(X[, y])Online computation of mean and std on X for later scaling.
    • 在线计算X上的平均值和标准值,以便以后缩放
  • set_params(**params)Set the parameters of this estimator.
    • 设置此估计器的参数

引入StandardScaler类:

from sklearn.preprocessing import StandardScaler

fit

使用fit函数可以计算数据的平均值和std,用于后续transformer,一般和transformer一起使用

transform

transform函数的作用是根据类中保存的均值和标准差,对数据进行变换
在使用transformer前要保证类中已保存了均值和标准差数据

fit_transform

fit_transform方法是fit和transform的结合,fit_transform(X_train) 意思是找出X_train的均值和标准差,并应用在X_train上
对于X_test,可以直接使用transform方法。因为此时StandardScaler已经保存了X_train的均值和标准差

使用方法

随机生成一组数据

import numpy as np

df_data = np.arange(20).reshape(4, 5)
print(df_data)
print(df_data[0])
print(df_data[:,0])

输出结果为

[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]
 [15 16 17 18 19]]
 
[0 1 2 3 4]

[ 0  5 10 15]

对比使用fit_transformer和分开使用fit、transform的结果

1、使用fit_transformer

scaler = StandardScaler()
train_data = df_data
data = scaler.fit_transform(train_data)
print(data)

结果

[[-1.34164079 -1.34164079 -1.34164079 -1.34164079 -1.34164079]
 [-0.4472136  -0.4472136  -0.4472136  -0.4472136  -0.4472136 ]
 [ 0.4472136   0.4472136   0.4472136   0.4472136   0.4472136 ]
 [ 1.34164079  1.34164079  1.34164079  1.34164079  1.34164079]]

2、分开使用fit、transform

scaler = StandardScaler()
train_data = df_data
scaler.fit(train_data)
data = scaler.transform(train_data)
print(data)

结果

[[-1.34164079 -1.34164079 -1.34164079 -1.34164079 -1.34164079]
 [-0.4472136  -0.4472136  -0.4472136  -0.4472136  -0.4472136 ]
 [ 0.4472136   0.4472136   0.4472136   0.4472136   0.4472136 ]
 [ 1.34164079  1.34164079  1.34164079  1.34164079  1.34164079]]
[[-1.41421356 -0.70710678  0.          0.70710678  1.41421356]]

探索fit_transformer的变换方式

1、只取第一行数据进行变换

scaler = StandardScaler()
train_data = df_data[0]
data = scaler.fit_transform(train_data.reshape(-1, 1)).reshape(1, 5)
print(data)

结果

[[-1.41421356 -0.70710678  0.          0.70710678  1.41421356]]

2、只取第一列数据进行变换(转置后取第一行)

scaler = StandardScaler()
train_data = df_data.T
train_data = train_data[0]
scaler.fit(train_data.reshape(-1, 1))
data = scaler.fit_transform(train_data.reshape(-1, 1)).reshape(4, 1)
print(data)

结果

[[-1.34164079]
 [-0.4472136 ]
 [ 0.4472136 ]
 [ 1.34164079]]

结论:在实验过程中,使用fit_transform时,需要将数据reshape(-1,1),即为一列数据;同时对比结果可知,fit_transformer对数据按列进行归一化(fit和transformer同理)

你可能感兴趣的:(sklearn,python,机器学习)