scikit-learn数据预处理——数据标准化之线性变换
sklearn.preprocessing包提供了几个常用的函数和类,用于常见的数据预处理操作。
在讲标准化之前需要强调的一点是scikit-learn对于数据集的要求是[n_sample*n_feature],即每一行代表一个样本,每一列代表一个特征。
1.标准正态分布
scikit-learn有提供的直接将数据处理成标准正态分布(均值为0,标准差为1)的函数:preprocessing.scale
import numpy as np
from sklearn import preprocessing
X_train = np.array([[ 1., -1., 2.],
[ 2., 0., 0.],
[ 0., 1., -1.]])
X_scaled = preprocessing.scale(X_train)
print(X_scaled)
[[ 0. -1.22474487 1.33630621]
[ 1.22474487 0. -0.26726124]
[-1.22474487 1.22474487 -1.06904497]]
preprocessing.scale函数中参数axis表示计算平均值和标准差的轴。 如果为axis=0(默认为0),则对每个特征执行标准化,如果为axis=1,则按照样本执行标准化(逐行)。
import numpy as np
from sklearn import preprocessing
X_train = np.array([[ 1., -1., 2.],
[ 2., 0., 0.],
[ 0., 1., -1.]])
X_scaled = preprocessing.scale(X_train,axis=1)
print(X_scaled)
[[ 0.26726124 -1.33630621 1.06904497]
[ 1.41421356 -0.70710678 -0.70710678]
[ 0. 1.22474487 -1.22474487]]
2.线性缩放
标准化方法是将数据缩放到给定的最小值和最大值之间,通常在0到1之间,或者将每个特征的最大绝对值缩放到单位大小。 这可以分别使用MinMaxScaler或MaxAbsScaler来实现。
import numpy as np
from sklearn import preprocessing
X_train = np.array([[ 1., -1., 2.],
[ 2., 0., 0.],
[ 0., 1., -1.]])
min_max_scaler = preprocessing.MinMaxScaler()#相当于构建一个转换器
X_train_minmax = min_max_scaler.fit_transform(X_train)
print(X_train_minmax)
结果:
[[0.5 0. 1. ]
[1. 0.5 0.33333333]
[0. 1. 0. ]]
特征变换的范围由参数feature指定,默认为(0,1),注意: MinMaxScaler没有axis这个参数,默认就是逐列进行标准化。
min_max_scaler = preprocessing.MinMaxScaler(feature_range=(0,2))
MaxAbsScaler将每个特征的最大绝对值缩放到一定范围,默认为[-1,1]。函数中参数axis表示计算平均值和标准差的轴。 如果为axis=0(默认为0),则对每个特征执行标准化,如果为axis=1,则按照样本执行标准化(逐行)。
X_train = np.array([[ 1., -1., 2.],
[ 2., 0., 0.],
[ 0., 1., -1.]])
max_abs_scaler = preprocessing.MaxAbsScaler()
X_train_maxabs = max_abs_scaler.fit_transform(X_train)
print(X_train_maxabs)
[[ 0.5 -1. 1. ]
[ 1. 0. 0. ]
[ 0. 1. -0.5]]
3.稀疏数据的线性变换
稀疏数据是指,数据框中绝大多数数值缺失或者为零的数据。对稀疏数据进行线性变换时,推荐使用MaxAbsScaler和maxabs_scale。另外,Scaler和StandardScaler可以接受scipy.sparse矩阵作为输入,但是需要设置参数(with_mean = False)。对稀疏数据可以使用tranform方法,但是不能使用RobustScaler方法。
4.含异常值的数据的线性变换
如果数据中包含许多异常值,可以使用robust_scale和RobustScaler方法。
本文的内容来自scikit-learn官方文档:https://scikit-learn.org/stable/modules/preprocessing.html