对于机器学习来说,sklearn具有非常丰富且方便的算法模型库,现在我们将使用sklearn中的preprocessing
库来对数据进行初步的预处理。
1.Z-Score标准化(尽量使均值为0,方差为1)
标准化即将数据按比例进行缩放,使其落入一个限定的区间。特点是使得不同量纲之间的特征具有可比性,同时不改变原始数据的分布。属于无量纲化处理。
公式
需要计算特征的均值和标准差,使用sklearn中preprocessing库中的StandardScaler类对特征进行标准化代码如下:
from sklearn.preprocessing import StandardScaler
ss = StandardScaler()
# data 即为标准化后返回的数据
data = ss.fit_transform(train_data)
特点:
1.标准化后不会改变原始数据的分布,即不会影响各自特征对目标函数的权重。
2.在样本数据大的情况下比较稳定,适用于嘈杂的现代大数据场景。
2.区间缩放法
顾名思义,将数据进行伸缩变换到[0, 1]
或者是[-1, 1]
范围内进行处理,也是属于无量纲化处理。
最小最大值标准化(MinMaxScaler)
使用sklearn中preprocessing
库中的MinMaxScaler
类对特征进行标准化代码如下:
from sklearn.preprocessing import MinMaxScaler
# 使用 MinMaxScaler 对数据进行缩放
# MinMaxScaler(feature_range = (0, 1), copy = True)
# 其中 feature_range: tuple(min, max), default = (0, 1)
# 即可以自行指定最小最大值范围,因此也称最小最大值标准化
mms = MinMaxScaler()
data = mms.fit_transform(data)
绝对值最大标准化
使用sklearn中preprocessing
库中的MaxAbsScaler
类对特征进行标准化代码如下:
from preprocessing import MaxAbsScaler
# 通过除以最大值,将数据缩放至[-1, 1]
# 这意味着数据以0为中心或者含有非常多的0,即稀疏数据
mas = MaxAbsScaler()
train_data = mas.fit_transform(data)
特点:
1.对不同特征维度数据进行伸缩变换,达到归一。
2.改变了原始数据的分布,即各特征对目标函数的权重影响是一致的。
3.可对方差特别小的数据增强其稳定性,也可以维持稀疏矩阵中多为0的样本条目。
4.可以提高迭代求解的收敛速度和精度。
5.最小值和最大值容易受噪声点影响,鲁棒性差。
3.正则化
奥卡姆剃刀定律:如无需要,勿增实体。因此模型越复杂,越容易出现过拟合。之前以最小化损失函数(经验风险最小化)为目标,后来以最小化损失函数和模型复杂度(结构风险最小化)为目标。所以,通过降低模型的复杂度来防止模型过拟合的规则称为正则化。
- 机器学习中最常见的无外乎就是
L1正则化
和L2正则化
。 - 对于线性回归模型而言,使用L1正则化的模型称为
Lasso回归
,使用L2正则化的模型称为岭回归(Ridge 回归)
。 - 在一般回归模型分析中,w一般称为回归系数,而使用正则化项就是对回归系数进行处理。
- L1正则化是指权值向量w中各个元素的绝对值之和,通常表示为||w||1
- L2正则化是指权值向量w中各个元素的平方和然后再求平方根,通常表示为||w||2
- L1正则使得带有L1正则的模型在拟合过程中,部分参数权值降为0,可以产生稀疏权值矩阵,进而用来进行特征选择。
- L2正则即使带有L2正则的模型在拟合的过程中,不断的让权值变小,因此加入有数据发生偏移(噪声点)也不会对结果造成什么影响,即抗干扰能力强。
- L1正则之所以一定程度上可以防止过拟合,是因为当L1的正则化系数很小时,得到的最优解会很小,可以达到和L2正则化类似的效果。
使用sklearn中preprocessing
库中的normalize
类对特征进行标准化代码如下:
from preprocessing import normalize
# data 为被正则的数据集,norm 参数选择为 l1, l2
# 即选择L1正则还是L2正则
train_data = normalize(data, norm = 'l2')