使用scikit-learn进行初步的数据预处理

对于机器学习来说,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')
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值