如果原始数据不服从高斯分布,在预测时表现可能不好。在实践中,我们经常进行标准化(z-score 特征减去均值/标准差)。
1.1 标准正态分布(均值为0,方差为1) Scale函数的使用 对列进行z-score
from sklearn import preprocessing
import numpy as np
#1、数据标准化
X = np.array([[ 1., -1., 2.],
[ 2., 0., 0.],
[ 0., 1., -1.]])
X_scaled = preprocessing.scale(X)
X_scaled
"""
输出标准化的结果:
array([[ 0. , -1.22474487, 1.33630621],
[ 1.22474487, 0. , -0.26726124],
[-1.22474487, 1.22474487, -1.06904497]])
"""
X_scaled.mean(axis=0) #用于计算均值和标准偏差的轴。如果为0,独立规范每个特征,否则(如果为1)标准化每个样品。
"""
输出归一化后的均值:
array([ 0., 0., 0.])
"""
X_scaled.std(axis=0)
"""
输出标准化后的标准差:
array([ 1., 1., 1.])
"""
1.2 预处理模块StandardScaler
其实现Transformer API以计算训练集上的平均值和标准偏差,以便以后能够在测试集上重新应用相同的变换。
#StandardScaler()的参数
"""
StandardScaler() 的参数with_mean 默认为True 表示使用密集矩阵,使用稀疏矩阵则会报错 ,with_mean= False 适用于稀疏矩阵
with_std 默认为True 如果为True,则将数据缩放为单位方差(单位标准偏差)
copy 默认为True 如果为False,避免产生一个副本,并执行inplace缩放。 如果数据不是NumPy数组或scipy.sparse CSR矩阵,则仍可能返回副本
"""
scaler = preprocessing.StandardScaler().fit(X)
scaler
"""
输出:
StandardScaler(copy=True, with_mean=True, with_std=True)
"""
#StandardScaler()的属性
scaler.mean_
"""
输出X(原数据)每列的均值:
array([ 1. , 0. , 0.33333333])
"""
scaler.scale_
"""
输出X(原数据)每列的标准差(标准偏差):
array([ 0.81649658, 0.81649658, 1.24721913])
"""
scaler.var_
"""
输出X(原数据)每列的方差:
array([ 0.66666667, 0.66666667, 1.55555556])
"""
#StandardScaler()的方法
scaler.transform(X)
"""
输出X(原数据)标准化(z-score):
rray([[ 0. , -1.22474487, 1.33630621],
[ 1.22474487, 0. , -0.26726124],
[-1.22474487, 1.22474487, -1.06904497]])
"""
# StandardScaler().fit(X) 输入数据用于计算以后缩放的平均值和标准差
# StandardScaler().fit_transform(X)输入数据,然后转换它
scaler.get_params() #获取此估计量的参数
"""
输出:
{'copy': True, 'with_mean': True, 'with_std': True}
"""
scaler.inverse_transform(scaler.t