sklearn数据预处理:归一化、标准化、正则化

归一化

1、把数据编程(0,1)之间的小数
主要是为了数据处理方便提出来的,把数据映射到0-1范围内处理,更加便捷快速
2、把有量纲表达式变为无量纲表达式
归一化是一种简化计算方式,即将有量纲的表达式,经过变换,化为无量纲的表达式,成为纯量

  • 归一化算法有:
    1、线性变换
    y=(x-MinValue)/(MaxValue-MinValue)
    2、对数函数转换
    y = log10(x)
    3、反余切函数转换
    y = atan(x)*2/PI

标准化/规范化

数据的标准化是将数据按照比例缩放,使之落入一个小的特定区间。由于信用指标体系的各个指标度量单位是不同的,为了能够将指标参与评价计算,需要对指标进行规范处理,通过函数变换将其数值映射到某个数值区间。

标准化算法有:

1:z-score标准化(零-均值标准化)(常用
y = (x-X的均值)/X的标准差 = (x-mean)/std
优点:当X的最大值和最小值未知,或者孤立点左右了最大-最小规范化时,该方法有用
2.最小-最大规范化
y=( (x-MinValue) / (MaxValue-MinValue) )(new_MaxValue-new_MinValue)+new_minValue

代码实现

1、z-score

公式为:(X-mean)/std 计算时对每个属性/每列分别进行。

将数据按期属性(按列进行)减去其均值,并处以其方差。得到的结果是,对于每个属性/每列来说所有数据都聚集在0附近,方差为1。
实现时,有两种不同的方式:

  • 使用sklearn.preprocessing.scale()函数,可以直接将给定数据进行标准化。
import numpy as np
from sklearn.preprocessing import scale

X = np.array([[ 1., -1.,  2.], 
              [ 2.,  0.,  0.],
              [ 0.,  1., -1.]])

X_scaled = scale(X)
print(X_scaled)
[[ 0.         -1.22474487  1.33630621]
 [ 1.22474487  0.         -0.26726124]
 [-1.22474487  1.22474487 -1.06904497]]

print(X_scaled.mean(axis=0))
[0. 0. 0.]

print(X_scaled.mean(axis=1))
[ 0.03718711  0.31916121 -0.35634832]
  • 使用sklearn.preprocessing.StandardScaler类,使用该类的好处在于可以保存训练集中的参数(均值、方差)直接使用其对象转换测试集数据。
  • `在这里插入代码片
import numpy as np
from sklearn.preprocessing import scale,StandardScaler


X = np.array([[ 1., -1.,  2.], 
              [ 2.,  0.,  0.],
              [ 0.,  1., -1.]])
scaler = StandardScaler().fit(X)
print(scaler)

StandardScaler(copy=True, with_mean=True, with_std=True)

print(scaler.transform(X))
[[ 0.         -1.22474487  1.33630621]
 [ 1.22474487  0.         -0.26726124]
 [-1.22474487  1.22474487 -1.06904497]]

2、最小-最大规范化

将属性缩放到一个指定的最小和最大值(通过0-1)之间,这可以通过怕热processing.MinMaxScaler类实现
使用这种方法的目的包括:
1:对于方差非常小的属性可以增强其稳定性
2:维持稀疏矩阵中为0的条目

import numpy as np
from sklearn.preprocessing import MinMaxScaler
X_train = np.array([[ 1., -1.,  2.], 
                    [ 2.,  0.,  0.],
                    [ 0.,  1., -1.]])
min_max_scaler = MinMaxScaler()

print(min_max_scaler)

X_train_minmax = min_max_scaler.fit_transform(X_train)

print(X_train_minmax)

origin_data = min_max_scaler.inverse_transform(X_train_minmax)

print(origin_data)


#将相同的缩放应用到测试集数据中
X_test = np.array([-3., -1., 4.])
X_test_minmax = min_max_scaler.transform(X_test.reshape(1,-1))

print(X_test_minmax)

MinMaxScaler(copy=True, feature_range=(0, 1))
[[0.5        0.         1.        ]
 [1.         0.5        0.33333333]
 [0.         1.         0.        ]]
[[ 1. -1.  2.]
 [ 2.  0.  0.]
 [ 0.  1. -1.]]
[[-1.5         0.          1.66666667]]

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