1、背景:

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

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

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

2、代码:

# -*- coding: utf-8 -*-
'''
Created on 2017年12月15日
@author: Jason.F
@summary: sklearn特征工程
'''from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import MinMaxScaler
from sklearn.preprocessing import Normalizer
from sklearn.preprocessing import Binarizer
from sklearn.preprocessing import OneHotEncoder
from numpy import vstack, array, nan
from sklearn.preprocessing import Imputer
from sklearn.preprocessing import PolynomialFeatures
#导入IRIS数据集
iris = load_iris()
#特征矩阵
iris.data
#目标向量
iris.target#数据预处理
#1:无量纲化,使不同规格的数据转换到同一规格
#1.1:标准化,标准化的前提是特征值服从正态分布,标准化后,其转换成标准正态分布。
StandardScaler().fit_transform(iris.data)
#1.2:区间缩放法,利用了边界值信息,将特征的取值区间缩放到某个特点的范围,如缩放到[0, 1]区间
MinMaxScaler().fit_transform(iris.data)
#1.3:归一化:依照特征矩阵的行处理数据,其目的在于样本向量在点乘运算或其他核函数计算相似性时,拥有统一的标准
#归一化,返回值为归一化后的数据
Normalizer().fit_transform(iris.data)#2:对定量特征二值化,定量特征二值化的核心在于设定一个阈值,大于阈值的赋值为1,小于等于阈值的赋值为0。
Binarizer(threshold=3).fit_transform(iris.data)#3:对定性特征哑编码,使用preproccessing库的OneHotEncoder类对数据进行哑编码
OneHotEncoder().fit_transform(iris.target.reshape((-1,1)))#4:缺失值计算,使用preproccessing库的Imputer类对数据进行缺失值计算
#缺失值计算,返回值为计算缺失值后的数据
#参数missing_value为缺失值的表示形式,默认为NaN
#参数strategy为缺失值填充方式,默认为mean(均值)
Imputer().fit_transform(vstack((array([nan, nan, nan, nan]), iris.data)))#5:数据变换,常见的数据变换有基于多项式的、基于指数函数的、基于对数函数的
#多项式转换
#参数degree为度,默认值为2
pndata=PolynomialFeatures().fit_transform(iris.data)
print (pndata[0:2])

3、标准化和归一化区别

标准化是依照特征矩阵的列处理数据,其通过求z-score的方法,将样本的特征值转换到同一量纲下,公式如下:

归一化是依照特征矩阵的行处理数据,其目的在于样本向量在点乘运算或其他核函数计算相似性时,拥有统一的标准,也就是说都转化为“单位向量”。规则为l2的归一化公式如下:

4、总结:

功能 说明
StandardScaler 无量纲化 标准化,基于特征矩阵的列,将特征值转换至服从标准正态分布
MinMaxScaler 无量纲化 区间缩放,基于最大最小值,将特征值转换到[0, 1]区间上
Normalizer 归一化 基于特征矩阵的行,将样本向量转换为“单位向量”
Binarizer 二值化 基于给定阈值,将定量特征按阈值划分
OneHotEncoder 哑编码 将定性数据编码为定量数据
Imputer 缺失值计算 计算缺失值,缺失值可填充为均值等
PolynomialFeatures 多项式数据转换 多项式数据转换
FunctionTransformer 自定义单元数据转换 使用单变元的函数来转换数据

【数据平台】sklearn库特征工程之数据预处理相关推荐

  1. 【数据平台】sklearn库特征工程之特征选择和降维

    1.特征选择 当数据预处理完成后,我们需要选择有意义的特征输入机器学习的算法和模型进行训练.通常来说,从两个方面考虑来选择特征: 特征是否发散:如果一个特征不发散,例如方差接近于0,也就是说样本在这个 ...

  2. ML之FE:对爬取的某平台二手房数据进行数据分析以及特征工程处理

    ML之FE:对爬取的某平台二手房数据进行数据分析以及特征工程处理 目录 对爬取的某平台二手房数据进行数据分析以及特征工程处理 1.定义数据集 2.特征工程(数据分析+数据处理) 对爬取的某平台二手房数 ...

  3. 机器学习笔记六——特征工程之数据预处理

    特征工程之数据预处理 1. 处理缺失值 2. 处理异常值 2.1 异常值检测 2.2异常值处理 3.离散特征的连续化处理 4.连续特征的离散化处理 5. 处理类别不平衡问题 6. 图片数据扩充 数据预 ...

  4. 机器学习 | 特征工程(数据预处理、特征抽取)

    所谓特征工程即模型搭建之前进行的数据预处理和特征提取.有时人们常常好高骛远,数据都没处理好就开始折腾各种算法,从第一开始就有问题,那岂不是还没开始就已经结束了.所以说啊,不积跬步无以至千里,生活中的每 ...

  5. 特征工程之数据预处理(下)

    机器学习入门系列(2)–如何构建一个完整的机器学习项目,第四篇! 该系列的前三篇文章: 机器学习入门系列(2)–如何构建一个完整的机器学习项目(一) 机器学习数据集的获取和测试集的构建方法 特征工程之 ...

  6. 特征工程之数据分箱、Nominal特征编码、Ordinal分类特征编码、特征交叉组合、特征差分

    特征工程之数据分箱.Nominal特征编码.Ordinal分类特征编码.特征交叉组合.特征差分 目录

  7. ML之FE:特征工程中数据缺失值填充的简介、方法、全部代码实现之详细攻略

    ML之FE:特征工程中数据缺失值填充的简介.方法.全部代码实现之详细攻略 目录 特征工程中数据缺失值填充的简介.方法.经典案例

  8. 运用最小二乘法和sklearn库分析身高体重数据

    文章目录 一.使用Excel分析身高体重 二.用Jupyter Notebook编程使用最小二乘法分析身高体重 三.运用Sklearn库,导入数据模拟. 四.参考 一.使用Excel分析身高体重 (这 ...

  9. 用机器学习神器sklearn做特征工程!

    Datawhale干货 作者:jasonfreak,编辑:数据STUDIO 使用sklearn做特征工程 特征工程是什么? 有这么一句话在业界广泛流传:数据和特征决定了机器学习的上限,而模型和算法只是 ...

最新文章

  1. nginx反向代理部署与演示(二)
  2. python 深拷贝_python 深拷贝
  3. Linux 下Oracle Client JAVA JDBC 集成点滴
  4. if else 简写_15+ JS简写骚操作,让你的代码“秀”起来??
  5. 大数据互联网架构阶段 前台系统架构 跨域请求
  6. [luoguP4705]玩游戏
  7. Leetcode题目:Lowest Common Ancestor of a Binary Search Tree
  8. iOS开发之地图与定位
  9. Android查看应用签名
  10. mysql504怎么办_php504错误怎么解决
  11. Vue.js 最新版官方下载地址
  12. 别在找提高C++晦涩难懂的知识了。提高效率!这里有C++STL——全面总结详细教程(附案例解析)(持续更新中)
  13. vue 项目在index.html页面直接引入jq库,报错$ is not defined解决方案
  14. 使用腾讯云 SCF 云函数压缩 COS 对象存储文件
  15. Flink cdc 2.1.0发布测试
  16. 4天狂销20万盒,GMV超5620万,应季爆品有哪些营销关键词?
  17. matlab 工业相机 曝光时间_工业相机的曝光、曝光时间、快门、增益
  18. 职中计算机专业课教师资格证,中职教师资格证和高中教师资格证有什么区别?...
  19. MAC visio的替代品Omnigraffle+激活许可证
  20. windows11+wsl+clion调试srs

热门文章

  1. linux切换桌面环境bug,GNOME 3.32.2桌面环境发布,最新的bug和安全修复
  2. python 装饰器实现事件绑定_Python装饰器是怎么实现的?
  3. http基于用户的访问控制--实战
  4. POJ 2182 Lost Cows (求序列第k大)
  5. javaScript设计模式---(单例模式学习)
  6. 安装phpredis扩展以及phpRedisAdmin工具
  7. 快速构建Windows 8风格应用14-ShareContract概述及原理
  8. Owasp live CD 2011下载地址
  9. python中import与input_python3入门之print,import,input介绍
  10. 大家都在晒的支付宝3分钱付款截图,让千万人有了“半毛钱”关系