一.标准化
描述
为了避免某一个动态范围过大的特征列对计算结果造成影响,同时可以提升模型精度,标准化的实质是对样本集的每个特征列减去该特征列均值进行中心化,再除以标准差进行缩放
实例
-
scale()函数
import numpy as np from sklearn import preprocessing as pp d = np.array([[1., -5., 8.],[2., -3., 0.], [0., -1., 1.]]) # 对数据集d做标准化 d_scaled = pp.scale(d) # 标准化以后的数据集,各特征列的均值为0 d_scaled.mean(axis=0) # 标准化以后的数据集,各特征列的标准差为1 d_scaled.std(axis=0)
-
StandardScaler类
import numpy as np from sklearn import preprocessing as pp X_train = np.array([[1., -5., 8.], [2., -3., 0], [0., -1., 1.]]) scaler = pp.StandardScaler().fit(X_train) # 训练集各特征列的均值 scaler.mean_ # 训练集各特征列的标准差 scaler.scale_ # 标准化训练集 scaler.transform(X_train) X_test = [[-1., 1., 0.]] # 使用训练集的缩放标准来标准化测试集 scaler.transform(X_test)
二.归一化
描述
用数据集各个特征的最小值进行中心化后,再按极差(最大值-最小值)进行缩放,即数据减去特征列的最小值,并且会被收敛到区间[0, 1]内,这个过程就是归一化
实例
- MinMaxScaler类
x_train = np.array([[1., -5., 8.], [2., -3., 0.], [0., -1., 1.]]) # 默认数据压缩范围为[0, 1] scaler = pp.MinMaxScaler().fit(X_train) scaler.transform(x_train) # 设置数据压缩范围为[-2, 2] scaler = pp.MinMaxScaler(feature_range=(-2, 2)) scaler = scaler.fit(x_train) scaler.transform(x_train)
三.正则化
描述
正则化是将每个数据样本的范数单位化,是对数据集的行操作
用法和参数
- normalize()函数使用参数norm指定I1范式或I2范式,默认使用I2范式
- I1范式可以理解为单个样本各元素的绝对值之和为1
- I2范式可理解为单个样本各元素的平方和的算术根为1,相当于样本向量的模
实例
-
normalize()
import numpy as np from sklearn import preprocessing as pp x_train = np.array([[1., -5., 8], [2., -3., 0.], [0., -1., 1.]]) # 使用I2范式正则化,每行的范数为1 pp.normalize(x_train) # 使用I1范式正则化,每行的范数为1 pp.normalize(x_train, norm='l1')
四.离散化
描述
离散化是将连续特征划分为离散特征值
实例
- Binarizer类
- KbinsDiscretizer类
import numpy as np from sklearn import preprocessing as pp x = np.array([[-2, 5, 11], [7, -1, 9], [4, 3, 7]]) # 指定二值化阈值为5 bina = pp.Binarizer(threshold=5) bina.transform(x) # 三个特征列离散化为2段、2段、3段 est = pp.KBinsDiscretizer(n_bins=[2, 2, 3], encode='ordinal').fit(x) est.transform(x)
五.特征编码
描述
用来把n个标称型特征转换为0到n-1的整数编码。
实例
- OrdinalEncoder类
import numpy as np from sklearn import preprocessing as pp x = [ ['male', 'firefox', 'vscode'], ['female', 'chrome', 'vim'], ['male', 'safari', 'pycharme'] ] oenc = pp.OrdinalEncoder().fit(x) oenc.transform(x)
- OneHotEncoder类
import numpy as np from sklearn import preprocessing as pp x = [ ['male', 'firefox', 'vscode'], ['female', 'chrome', 'vim'], ['male', 'safari', 'pycharme'] ] ohenc = pp.OneHotEncoder().fit(x) ohenc.transform(x).toarray()
六.缺失值补全
描述
缺失值补全可以基于一个特征列的非缺失值来插补该特征列中的缺失值,也就是单变量插补
实例
-
SimpleImputer类
import numpy as np from sklearn.impute import SimpleImputer # 首列有缺失值 x = np.array([[3, 2], [np.nan, 3], [4, 6], [8, 4]]) # 默认插补均值,当前均值为5 simp = SimpleImputer().fit(x) simp.transform(x) # 中位数插补,当前中位数是4 simp = SimpleImputer(strategy='median').fit(x) simp.transform(x) # 插补0 simp = SimpleImputer(strategy='constant', fill_value=0).fit(x) simp.transform(x)