结合sklearn进行特征工程

本文详细介绍了如何使用sklearn进行特征工程,包括数据预处理(无量纲化、缺失值处理)、特征构建(统计量构造、离散化、哑编码、特征交叉)、特征选择(过滤法、包装法、嵌入法)以及特征提取(PCA、LDA)。通过实例展示了各种方法的代码实现,如标准化、归一化、区间缩放、缺失值填充、特征选择等。
摘要由CSDN通过智能技术生成

1 前言

该篇博客主要涉及到sklearn.feature_selection 以及其他相关模型,主要介绍了如何利用sklearn进行特征工程,特征工程在机器学习中占有工程师的大部分精力,目前也有很多成熟的方法和理论,但是结合实际业务背景选择特征仍然是提升模型性能的关键点。sklearn.feature_selection是一个强大的特征处理工具包,磨刀不误砍柴工,熟练使用工具是重中之重!以下是特征工程的概要图。

特征工程

2 数据预处理

  1. 不属于同一量纲:即特征的规格不一样,不能够放在一起比较。无量纲化可以解决这一问题。
  2. 缺失值处理:包括缺失值删除及补充。

导入数据集,sklearn具有自动生成数据集工具包例如sklearn.dataset.make_classification,也有标准数据集比如sklearn.dataset.load_boston,sklearn.dataset.load_iris,下面是鸢尾花IRIS数据的下载程序

from sklearn.datasets import load_iris

#导入IRIS数据集
iris = load_iris()
#特征矩阵
dataset = iris.data

#目标向量
labels = iris.target

print "特征矩阵\n",dataset[:5,:]
print '标签\n',set(labels)
特征矩阵
[[ 5.1  3.5  1.4  0.2]
 [ 4.9  3.   1.4  0.2]
 [ 4.7  3.2  1.3  0.2]
 [ 4.6  3.1  1.5  0.2]
 [ 5.   3.6  1.4  0.2]]
标签
set([0, 1, 2])

2.1 数据无量纲化

无量纲化使不同规格的数据转换到同一规格。常见的无量纲化方法有标准化和区间缩放法。标准化的前提是特征值服从正态分布,标准化后,其转换成标准正态分布。区间缩放法利用了边界值信息,将特征的取值区间缩放到某个特定的范围,例如[0, 1]等。

2.1.1 标准化

标准化需要计算每个特征的均值和标准差,公式表达为:
x=xX¯S

使用preproccessing库的StandardScaler类对数据进行标准化的代码如下:
标准化之后的数据范围在[-1,1]之间

至于为什么用.fit_transform(),可参考http://www.cnblogs.com/jasonfreak/p/5448462.html

from sklearn.preprocessing import StandardScaler

#标准化,返回值为标准化后的数据,矩阵形式,下面只显示了前10行数据
StandardScaler().fit_transform(dataset)[:10,:]
array([[-0.90068117,  1.03205722, -1.3412724 , -1.31297673],
       [-1.14301691, -0.1249576 , -1.3412724 , -1.31297673],
       [-1.38535265,  0.33784833, -1.39813811, -1.31297673],
       [-1.50652052,  0.10644536, -1.2844067 , -1.31297673],
       [-1.02184904,  1.26346019, -1.3412724 , -1.31297673],
       [-0.53717756,  1.95766909, -1.17067529, -1.05003079],
       [-1.50652052,  0.80065426, -1.3412724 , -1.18150376],
       [-1.02184904,  0.80065426, -1.2844067 , -1.31297673],
       [-1.74885626, -0.35636057, -1.3412724 , -1.31297673],
       [-1.14301691,  0.10644536, -1.2844067 , -1.4444497 ]])

2.1.2 归一化处理

标准化与归一化的区别
简单来说,
标准化是依照特征矩阵(每一列是用同一个特征的不同取值)的列处理数据,其通过求z-score的方法,将样本的每个特征的值转换到同一量纲下。
归一化是依照特征矩阵(每一行是不同特征的取值)的行处理数据,其目的在于样本向量在点乘运算或其他核函数计算相似性时,拥有统一的标准,也就是说都转化为“单位向量”。

规则为 L2 范数的归一化公式如下:
x=xj=1mx2j

使用preproccessing库的Normalizer类对数据进行归一化的代码如下:

from sklearn.preprocessing import Normalizer

#归一化,返回值为归一化后的数据的符号与原数据符号相同
Normalizer().fit_transform(dataset)[:10,:]
array([[ 0.80377277,  0.55160877,  0.22064351,  0.0315205 ],
       [ 0.82813287,  0.50702013,  0.23660939,  0.03380134],
       [ 0.80533308,  0.54831188,  0.2227517 ,  0.03426949],
       [ 0.80003025,  0.53915082,  0.26087943,  0.03478392],
       [ 0.790965  ,  0.5694948 ,  0.2214702 ,  0.0316386 ],
       [ 0.78417499,  0.5663486 ,  0.2468699 ,  0.05808704],
       [ 0.78010936,  0.57660257,  0.23742459,  0.0508767 ],
       [ 0.80218492,  0.54548574,  0.24065548,  0.0320874 ],
       [ 0.80642366,  0.5315065 ,  0.25658935,  0.03665562],
       [ 0.81803119,  0.51752994,  0.25041771,  0.01669451]])

2.1.3 区间缩放法

区间缩放法的思路有多种,常见的一种为利用两个最值进行缩放,公式表达为:

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

墨岚❤️

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值