当前位置:   article > 正文

手把手教你用sklearn做特征工程_sklearn rfe xgb

sklearn rfe xgb

前言

博主最近参加了几个kaggle比赛,发现做特征工程是其中很重要的一部分,而sklearn是做特征工程(做模型调算法)最常用也是最好用的工具没有之一,因此将自己的一些经验做一个总结分享给大家,希望对大家有所帮助

目录

1. 什么是特征工程?
2. 数据预处理
3. 特征选择
4. 降维

1. 什么是特征工程?

有这么一句话在业界广泛流传,数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。那特征工程到底是什么呢?顾名思义,其本质是一项工程活动,目的是最大限度地从原始数据中提取特征以供算法和模型使用。


特征工程主要分为三部分:
1. 数据预处理 对应的sklearn包:sklearn-Processing data
1. 特征选择 对应的sklearn包: sklearn-Feature selection
1. 降维 对应的sklearn包: sklearn-Dimensionality reduction


本文中使用sklearn中的IRIS(鸢尾花)数据集来对特征处理功能进行说明导入IRIS数据集的代码如下:

 1 from sklearn.datasets import load_iris
 2 
 3 #导入IRIS数据集
 4 iris = load_iris()
 5 
 6 #特征矩阵
 7 iris.data
 8 
 9 #目标向量
10 iris.target
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

2. 数据预处理

通过特征提取,我们能得到未经处理的特征,这时的特征可能有以下问题:

  • 不属于同一量纲:即特征的规格不一样,不能够放在一起比较。无量纲化可以解决这一问题。
  • 信息冗余:对于某些定量特征,其包含的有效信息为区间划分,例如学习成绩,假若只关心“及格”或不“及格”,那么需要将定量的考分,转换成“1”和“0”表示及格和未及格。二值化可以解决这一问题。
  • 定性特征不能直接使用:通常使用哑编码的方式将定性特征转换为定量特征,假设有N种定性值,则将这一个特征扩展为N种特征,当原始特征值为第i种定性值时,第i个扩展特征赋值为1,其他扩展特征赋值为0。哑编码的方式相比直接指定的方式,不用增加调参的工作,对于线性模型来说,使用哑编码后的特征可达到非线性的效果。
  • 存在缺失值:填充缺失值
  • 信息利用率低:不同的机器学习算法和模型对数据中信息的利用是不同的,之前提到在线性模型中,使用对定性特征哑编码可以达到非线性的效果。类似地,对定量变量多项式化,或者进行其他的数据变换,都能达到非线性的效果。

我们使用sklearn中的preproccessing库来进行数据预处理。

2.1 无量纲化

无量纲化使不同规格的数据转换到同一规格

2.1.1 标准化(也叫Z-score standardization)(对列向量处理)

将服从正态分布的特征值转换成标准正态分布,标准化需要计算特征的均值和标准差,公式表达为:



使用preproccessing库的StandardScaler类对数据进行标准化的代码如下:

1 from sklearn.preprocessing import StandardScaler
2 
3 #标准化,返回值为标准化后的数据
4 StandardScaler().fit_transform(iris.data)
  • 1
  • 2
  • 3
  • 4
2.1.2 区间缩放(对列向量处理)

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/412072
推荐阅读
相关标签
  

闽ICP备14008679号