目录

一、    特征工程是什么?    2

①特征使用方案    3

②特征获取方案    4

③特征处理    4

1.    特征清洗    4

2.    数据预处理    4

3.    特征监控    4

二、    数据预处理    5

1.    无量纲化    5

1.1标准化    5

1.2区间缩放法    7

1.3归一化方法有两种    7

2.    对定量特征二值化    8

1.    为什么要对定量特征二值化?    8

2.    对定量特征二值化的方法    8

3.    对定性特征哑编码    8

1)    OneHotEncoder()热编码    8

2)    LabelEncoder()标签编码    8

4.    缺失值计算,处理缺失值    8

1)    删除包含缺失值的数据列(这种方法适用于数据列包含的缺失值太多的情况)    8

2)    填补缺失值    9

3)    拓展方法    9

5.    数据变换    9

6.    回顾    9

三、    特征选择    10

1.Filter过滤法    10

1.1方差选择法    10

1.2相关系数法    11

1.3卡方检验    12

1.4互信息法    12

2.Wrapper:包装法    12

2.1递归特征消除法    12

3.Embedder    13

3.1基于惩罚项的特征选择法    13

3.2基于树模型的特征选择法    13

4回顾    13

四、    降维    13

1.    主成分分析法(PCA)    14

2.    线性判别分析法(LDA)    14

3.    回顾    14

五、    总结    14

使用sklearn做单机特征工程

原文链接:https://www.cnblogs.com/jasonfreak/p/5448385.html

  1. 特征工程是什么?

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

①特征使用方案

  1. 要实现我们的目标需要哪些数据? ----基于业务理解,尽可能找出对因变量有影响的所有自变量。
  2. 可用性评估
    1. 获取难度
    2. 覆盖率
    3. 准确率

②特征获取方案

  1. 如何获取这些特征?
  2. 如何存储?

③特征处理

  1. 特征清洗
    1. 清洗异常样本
    2. 采样:数据不均衡、样本权重
  2. 数据预处理
    1. 单个特征:归一化、离散化、Dummy Coding、缺失值和数据变换(log,指数,Box-Cox)
    2. 多个特征:

      ❶降维(PCA、LDA)

      ❷特征选择

      1. Filter(思路:自变量和目标变量之间的关联;相关系数;卡方检验;信息增益;互信息)
      2. Wrapper(思路:通过目标函数(AUC/MSE)来决定是否加入一个变量;迭代:产生特征子集,评价(完全搜索、启发式搜索、随即搜索))
      3. Embedded(思路:学习器自身自动选择特征;正则好(L1,L2);决策树(熵,信息增益);深度学习)
    3. 衍生变量 ----对原始数据加工,生成有商业意义的变量
  3. 特征监控
    1. 特征有效性分析 ----特征重要性,权重
    2. 特征监控----监控重要特征----防止特征质量下降,影响模型效果

特征处理时特征工程的核心部分,sklearn提供了较为完整的特征处理方法,包括数据预处理,特征选择,降维等等。首次接触到sklearn,通常会被其丰富且方便的算法模型库吸引,但是这里介绍的特征处理库也十分强大。

年整理,包含4个特征(Sepal.Length(花萼长度)、Sepal.Width(花萼宽度)、Petal.Length(花瓣长度)、Petal.Width(花瓣宽度)),特征值都为正浮点数,单位为厘米。目标值为鸢尾花的分类(Iris Setosa(山鸢尾)、Iris Versicolour(杂色鸢尾),Iris Virginica(维吉尼亚鸢尾))。导入IRIS数据集的代码如下:

from sklearn.datasets import load_iris

#导入IRIS数据集

iris = load_iris()

#特征矩阵

dataset=iris.data

#目标向量

labels=iris.target

  1. 数据预处理

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

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

我们使用sklearn中的preproccessing库来进行数据预处理,可以覆盖以上问题的解决方案。

  1. 无量纲化

    无量纲化可以加快梯度下降法收敛速度,有可能提高精度。

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

    1.1标准化

    ,标准差为1。使用该方法无量纲化后不同变量间的均值和标准差都相同,即同时消除了变量间变异程度上的差异。

    标准化公式为:

    sklearn实现标准化有两种不同的方式:

    1. preprocessing.scale()方法实现,可以直接将给定数据进行标准化,得到(0—1正态分布)Standardize a dataset along any axis

      其中:参数x(类数组,稀疏矩阵)

      ),如果为0,按特征(即列)标准化;如果为1,按样本(即行)标准化

      with_mean:均值,默认为真

      with_std:方差,默认为真

    2. 使用sklearn.preprocessing.StandardScaler类,使用该类的好处在于可以保存训练集中的参数(均值、方差)直接使用其对象转换测试集数

      据。

class sklearn.preprocessing.StandardScaler(copy=Truewith_mean=Truewith_std=True)

通过删除平均值和缩放到单位方差来标准化特征

参数:copy:默认为True

这个类的属性:

scale_:数据的相对缩放

mean_:训练集中每个特征的均值

var_:训练集中每个特征的方差、

n_samples_seen_:int类型,样本数

这个类的方法:

fit(X[,y]):计算均值和方差为了之后的缩放

fit_transform():训练,然后标准化数据

get_params(deep=True):得到估计量的参数

inverse_transform(X, copy=None):反标准化

transform(X, y='deprecated', copy=None):标准化

1.2区间缩放法

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

1.3归一化方法有两种

)使用Normalizer类的方法归一化

class sklearn.preprocessing.Normalizer(norm='l2'copy=True)

将样品归一化为单位范数

)使用normalize()方法进行归一化

sklearn.preprocessing.normalize(Xnorm='l2'axis=1copy=Truereturn_norm=False)

  1. 对定量特征二值化
    1. 为什么要对定量特征二值化?

      对于某些定量特征,其包含的有效信息为区间划分,例如学习成绩,假若只关心"及格"或不"及格",那么需要将定量的考分,转换成"1"和"0"表示及格和未及格。二值化可以解决这一问题。

    2. 对定量特征二值化的方法

  2. 对定性特征哑编码

    1. OneHotEncoder()热编码

      给定一个数据集,我们让编码器找到每个特征的最大值,并将数据转换为二进制的形式表现出来。

      的三个样本值为1,2,9,会编为一个二进制

    2. LabelEncoder()标签编码

      将标签编码为不同的数字来表示不同的类别

  3. 缺失值计算,处理缺失值

在python语言中,缺失值一般被称为nan,是"not a number"的缩写。

下面的代码可以计算出数据总共有多少个缺失值,这里数据是存储在pandas中的DateFrame中:

  1. 删除包含缺失值的数据列(这种方法适用于数据列包含的缺失值太多的情况)

    在大多数情况下,我们必须在训练集(training dataset)和测试集(test dataset)中删除同样的数据列。

  2. 填补缺失值

    这种方法比直接删除数据列好点,能训练出更好的模型。

    默认的填补策略是使用均值填充

  3. 拓展方法

    如果缺失数据包含重要特征信息的话,我们需要保存原始数据的缺失信息,存储在boolearn列中

  1. 数据变换

  2. 回顾

    1. 特征选择

      当数据预处理完成后,我们需要选择有意义的特征输入机器学习的算法和模型进行训练。通常来说,

      ****从两个方面选择特征:

      ,也就是说样本在这个特征上基本上没有差异,这个特征对于样本的区分并没有什么作用。

      ②特征与目标的相关性:这点比较显见,与目标相关性高的特征,应当优先选择。除方差法外,本文介绍的其他方法均从相关性考虑。

      种:

      ①Filter:过滤法,按照发散性或者相关性对各个特征进行评分,设定阈值或者待选择阈值的个数,选择特征。

      ②Wrapper:包装法,根据目标函数(通常是预测效果评分),每次选择若干特征,或者排除若干特征。

      Embedder:嵌入法,先使用某些机器学习的算法和模型进行训练,得到各个特征的权值系数,根据稀疏从大到小选择特征,类似于Filter方法,但是是通过训练来确定大哥特征的优劣。

      我们使用sklearn中的feature_selection库来进行特征选择。

      .Filter过滤法

1.1方差选择法

使用方差选择法,先要计算各个特征的方差,然后根据阈值,选择方差大于阈值的特征。使用feature_selection库的VarianceThreshold类来选择特征的代码如下:

1.2相关系数法

使用相关系数法,先要计算各个特征对目标值得相关系数以及相关系数得P值,用feature_selection库得SelectKBest类结合相关系数来选择特征得代码如下:

相关系数表征两组数得相关程度。

1.3卡方检验

经典得卡方检验是检验定性自变量对定性因变量得相关性。假设自变量有N中取值,因变量有M中取值,考虑自变量等于i且因变量等于j得样本频数得观察值与期望得差距,构建统计量:

这个统计量的含义简而言之就是自变量对因变量的相关性。用feature_selection库的SelectKBest类结合卡方检验来选择特征的代码如下:

1.4互信息法

经典得互信息也是评价定性自变量对定性因变量得相关性的,互信息计算公式如下:

2.Wrapper:包装法

2.1递归特征消除法

递归消除特征法使用一个基模型来进行多轮训练,每轮训练后,消除若干权值系数的特征,再基于新的特征集进行下一轮训练。使用feature_selection库的RFE类来选择特征的代码如下:

3.Embedder

3.1基于惩罚项的特征选择法

3.2基于树模型的特征选择法

回顾

  1. 降维

    当特征选择完成后,可以直接训练模型了,但是可能由于特征矩阵过大,导致计算量大,训练时间长的问题,因此降低特征矩阵维度也是必不可少的。常见的降维方法除了以上提到的基于L1惩罚项的模型以外,另外还有主成分分析法(PCA)和线性判别分析(LDA),线性判别分析本身也是一个分类模型。PCA和LDA有很多的相似点,其本质是要将原始的样本映射到维度更低的样本空间中,但是PCA和LDA的映射目标不一样:PCA是为了让映射后的样本具有最大的发散性;而LDA是为了让映射后的样本有最好的分类性能。所以说PCA是一种无监督的降维方法,而LDA是一种有监督的降维方法。

    1. 主成分分析法(PCA)

    2. 线性判别分析法(LDA)

    3. 回顾

  2. 总结

    再让我们回归一下本文开始的特征工程的思维导图,我们可以使用sklearn完成几乎所有特征处理的工作,而且不管是数据预处理,还是特征选择,抑或降维,它们都是通过某个类的方法fit_transform完成的,fit_transform要不只带一个参数:特征矩阵,要不带两个参数:特征矩阵加目标向量。这些难道都是巧合吗?还是故意设计成这样?方法fit_transform中有fit这一单词,它和训练模型的fit方法有关联吗?接下来,我将在《使用sklearn优雅地进行数据挖掘》中阐述其中的奥妙!

sklearn特征工程的更多相关文章

  1. sklearn—特征工程

    sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003& ...

  2. sklearn特征工程总结

    转自: http://www.cnblogs.com/jasonfreak/p/5448385.html https://www.zhihu.com/question/28641663/answer/ ...

  3. 使用sklearn做单机特征工程

    目录 1 特征工程是什么?2 数据预处理 2.1 无量纲化 2.1.1 标准化 2.1.2 区间缩放法 2.1.3 标准化与归一化的区别 2.2 对定量特征二值化 2.3 对定性特征哑编码 2.4 缺 ...

  4. 【转】使用sklearn做单机特征工程

    这里是原文 说明:这是我用Markdown编辑的第一篇随笔 目录 1 特征工程是什么? 2 数据预处理 2.1 无量纲化 2.1.1 标准化 2.1.2 区间缩放法 2.1.3 无量纲化与正则化的区别 ...

  5. 转载:使用sklearn做单机特征工程

    目录 1 特征工程是什么?2 数据预处理 2.1 无量纲化 2.1.1 标准化 2.1.2 区间缩放法 2.1.3 标准化与归一化的区别 2.2 对定量特征二值化 2.3 对定性特征哑编码 2.4 缺 ...

  6. Python机器学习笔记 使用sklearn做特征工程和数据挖掘

    特征处理是特征工程的核心部分,特征工程是数据分析中最耗时间和精力的一部分工作,它不像算法和模型那样式确定的步骤,更多的是工程上的经验和权衡,因此没有统一的方法,但是sklearn提供了较为完整的特征处 ...

  7. [特征工程]-------使用sklearn做单机特征工程[转载]

    https://www.cnblogs.com/jasonfreak/p/5448385.html 使用sklearn做单机特征工程 目录 1 特征工程是什么?2 数据预处理 2.1 无量纲化 2.1 ...

  8. Sklearn与特征工程

    Scikit-learn与特征工程 “数据决定了机器学习的上限,而算法只是尽可能逼近这个上限”,这句话很好的阐述了数据在机器学习中的重要性.大部分直接拿过来的数据都是特征不明显的.没有经过处理的或者说 ...

  9. 【转】使用sklearn做特征工程

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

随机推荐

  1. iOS-UIWebView去掉滚动条和黑色背景即拖拽后的上下阴影

    iOS UIWebView去掉滚动条和黑色背景即拖拽后的上下阴影 隐藏滚动条和上下滚动时出边界的后面的黑色的背景 webView.backgroundColor=[UIColor clearColor ...

  2. Tesnsorflow命名空间与变量管理参数reuse

    一.TensorFlow中变量管理reuse参数的使用 1.TensorFlow用于变量管理的函数主要有两个:  (1)tf.get_variable:用于创建或获取变量的值  (2)tf.varia ...

  3. hana客户端工具

    SAP HANA可视化客户端工具是C/S模式的,远程访问使用,都不是太方便,目前有一款基于WEB的可视化工具TreeSoft,通过浏览器就可以访问使用了,并且可以同时管理.维护.监控SAP HANA等 ...

  4. docker安装并持久化postgresql数据库

    安装docker步骤略过 1.拉取postgresql镜像 docker pull postgresql 2.创建本地卷,数据卷可以在容器之间共享和重用, 默认会一直存在,即使容器被删除(docker ...

  5. Android Studio优化编译速度

    随着Android Studio的不断完善,其安卓开发者阵营也基本从Eclipse转移到了Android Studio,毕竟Android Studio是谷歌亲力亲为开发的官方开发软件.不过其最重要的 ...

  6. 最新 二六三网络通信java校招面经 (含整理过的面试题大全)

    从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿. 二六三网络通信等10家互联网公司的校招Offer,因为某些自身原因最终选择了 二六三网络通信.6.7月主要是做系统复习.项 ...

  7. CVE-2019-0708 RDP MSF漏洞利用

    CVE-2019-0708 RDP MSF漏洞复现 漏洞环境 使用 VMware 安装Windows7 X64 模拟受害机 Windows7 X64下载链接:链接: https://pan.baidu ...

  8. 滑动窗口协议(Sliding Window Protocol)

    滑动窗口协议(Sliding Window Protocol),属于TCP协议的一种应用,用于网络数据传输时的流量控制,以避免拥塞的发生.该协议允许发送方在停止并等待确认前发送多个数据分组.由于发送方 ...

  9. Git在新电脑拉github 上的项目

    非小白教程.多少有点了解的才能看懂. 1,安装git 忽略,任意i找一个图文教程即可 2,在命令行模式 输入 cd ~/.ssh/  进入c:administrator的文件下的.ssh文件夹: 或者 ...

  10. Word 查找替换高级玩法系列之 -- 用替换功能删除空白区域

    当你遇到Word文档中时不时的出现一些空白区域的时候会怎么办呢?一个个删除吗?NO!NO!NO!!!那样也太慢了!仅使用替换功能就可以帮你一步搞定它! 下面这篇文档中含有半角空格.全角空格.不间断空格 ...