标准化(中心化)scale
sklearn.preprocessing.
scale
(X, axis=0, with_mean=True, with_std=True, copy=True)
X | 用来标准化的数据(数组或者稀疏矩阵) |
axis | 0表示对一列去做相同的操作,1表示对一行去做相同的操作 |
with_mean | 要均值中心化(true) |
with_std | 要方差规模化(true) |
标准化的过程为两步:去均值的中心化(均值变为0);方差的规模化(方差变为1)。
from sklearn import preprocessing
import numpy as np
# 创建一组特征数据,每一行表示一个样本,每一列表示一个特征
x = np.array([[1., -1., 2.],
[2., 0., 0.],
[0., 1., -1.]])
# 将每一列特征标准化为标准正太分布,注意,标准化是针对每一列而言的
x_scale = preprocessing.scale(x)
x_scale
>>> array([[ 0. , -1.22474487, 1.33630621],
[ 1.22474487, 0. , -0.26726124],
[-1.22474487, 1.22474487, -1.06904497]])
# 可以查看标准化后的数据的均值与方差,已经变成0,1了
x_scale.mean(axis=0)
>>> array([ 0., 0., 0.])
x_scale.std(axis=0)
>>> array([ 1., 1., 1.])
# axis=1表示对每一行去做这个操作,axis=0表示对每一列做相同的这个操作
x_scale.mean(axis=1)
>>> array([ 0.03718711, 0.31916121, -0.35634832])
归一化
标准化是依照特征矩阵(每一列是用同一个特征的不同取值)的列处理数据,其通过求z-score的方法,将样本的每个特征的值转换到同一量纲下。
归一化是依照特征矩阵(每一行是不同特征的取值)的行处理数据,其目的在于样本向量在点乘运算或其他核函数计算相似性时,拥有统一的标准,也就是说都转化为“单位向量”。
sklearn.preprocessing.
normalize
(X, norm=’l2’, axis=1, copy=True, return_norm=False)
Normalization各个样本归一化为norm为1的正态分布
函数 normalize 提供了一个简单的方法来操作类似数组的数据集,使用l1或l2范式(norm参数