Sklearn之数据预处理

1. sk.preprocessing 预处理模块

对于连续特征的处理

1.1 无量纲化

使不同规格数据转换成同一规格,包括标准化和区间缩放法

1.1.1 标准化

标准化前提是其特征值服从正态分布。因此将其标准化后转换成标准正态分布。

使用原因:部分机器学习算法求解目标函数时,要求特征的均值为0,方差为1.(如:SVM的RFB内核、线性模型的L1和L2正则化)如果某个特征的方差比其他特征的方差大几个数量级别,如:3000:2等,会造成方差大的特征在算法中占据主导地位,使得机器学习效果不佳。

缺点:当特征明显不遵从高斯正态分布时,标准化出来的效果较差。
还要注意,均值和标准差受离群点的影响很大,所以如果有很多异常值,使用RobustScaler或robust_scaler 的效果更好。
scale和 StandardScaler都能接受 scipy.sparse 作为输入,但参数必须设置: with_mean=False。Or会报错: ValueError ,因为默认的中心化会破坏稀疏性,并且此时内存一般会炸,然后崩溃------>dead。
实际应用中,经常忽略特征数据的分布形状,移除每个特征均值,划分离散特征的标准差,从而等级化,进而实现数据中心化。

标准化需要计算特征均值和标准差,直接调用sklearn.preprocessing.StandardScaler即可

from sklearn.preprocessing import StandardScaler
#标准化,返回值为标准化后的数据
StandardScaler().fit_transform(iris.data)

1.1.2 区间缩放法

区间缩放法最典型的是最大最小缩放,使用sklearn.preproccessing.MinMaxScaler类对数据进行区间缩放到一固定区间如(0,1)。

使用原因:对于方差非常小的属性可以增强其稳定性。有时数据集的标准差非常非常小,有时数据中有很多很多零(稀疏数据)需要保存住0元素。
维持稀疏矩阵中为0的条目。

缺点
当数据出现新的最大最小值时,需要重来一遍。
若数值集中且某个数值很大,则规范化后各值接近于0,并且将会相差不大。(如:100、101、102、108、20001)

from sklearn.preprocessing import MinMaxScaler
 
#区间缩放,返回值为缩放到[0, 1]区间的数据
MinMaxScaler().fit_transform(iris.data)

1.2 归一化(normalize )

无纲量化是对数据的列进行处理,而归一化则是对数据的行进行处理,即转化为“单位向量”。

使用原因:正则化的过程是将每个样本缩放到单位范数(每个样本的范数为1),如果后面要使用如二次型(点积)或者其它核方法计算两个样本之间的相似性这个方法会很有用。

使用preproccessing.Normalizer类对数据进行归一化

1 from sklearn.preprocessing import Normalizer
2 
3 #归一化,返回值为归一化后的数据
4 Normalizer().fit_transform(iris.data)

比较好的参考详情附链接:https://www.cnblogs.com/jasonfreak/p/5448385.html
https://www.bbsmax.com/A/kvJ3gpaAJg/

⚠️注意:不要看中文翻译的规范化标准化归一化什么的词汇,翻译过来很容易混淆,建议按照sklearn 的英文词汇走

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值