机器学习中,常常在数据集中会遇到一些离散特征,对于这些离散特征相比连续特征要用不同的处理方法,常见的方法有LabelEncoder与OneHotEncoder。

LabelEncoder

LabelEncoder用来对离散型分类型特征值进行编码,可以对本文编码,也可以对数字编码。sklearn中也提供给相应的工具包以便使用:

sklearn.preprocessing.LabelEncoder

常用方法如下:

fit(y) :训练 y数据集,与其他模型的fit方法类似。

fit_transform(y):相当于先进行fit再进行转换,返回标签编码。

inverse_transform(y):将标签编码返回为初始值。

transform(y) :直接返回标签编码。

示例如下:

from sklearn.preprocessing import LabelEncoder#文字内容
le = LabelEncoder()le.fit_transform(['天津','北京','上海','南京','北京'])
#array([3, 1, 0, 2, 1], dtype=int64)
le.transform(['天津','北京','上海','南京','北京'])
#array([3, 1, 0, 2, 1], dtype=int64)
le.inverse_transform([3, 1, 0, 2, 1])
#array(['天津', '北京', '上海', '南京', '北京'], dtype='<U2')#数字内容
le.fit_transform([2,2,4,8,7])
#array([0, 0, 1, 3, 2], dtype=int64)
le.transform([2,2,4,8,7])
#array([0, 0, 1, 3, 2], dtype=int64)
le.inverse_transform([0, 0, 1, 3, 2])
#array([2, 2, 4, 8, 7])

通过上面的实例可以看到,LabelEncoder既可以对文字内容编码,也可以对数字内容编码,都是以0开始的数字为不同的内容编码,相同的内容则用同一数字。但是当LabelEncoder的结果对于计算机处理数据时的效果并不是很好,此时会考虑onehot编码。

OneHotEncoder

OneHotEncoder同样是对离散特征编码,离散特征中有多少不同的值,就用多少维来表示该特征。这是与LabelEncoder最大的区别所在。sklearn提供的工具如下:

sklearn.preprocessing.OneHotEncoder(n_values=None, categorical_features=None, categories=None, sparse=True, dtype=<class ‘numpy.float64’>, handle_unknown=’error’)

(部分参数新版本可能取消,只需了解sparse、categories即可)

参数 含义
sparse 默认为True,如果设置为True将返回稀疏矩阵,否则将返回一个数组。
categories 默认为'auto',从训练数据中自动确定类别。可选为list,categories[i]保存第i列中预期的类别。

常用方法如下:

fit(y) :训练 y数据集,与其他模型的fit方法类似。

fit_transform(y):相当于先进行fit再进行转换,返回标签编码。

inverse_transform(y):将标签编码返回为初始值。

transform(y) :直接返回标签编码。

示例如下:

from sklearn.preprocessing import OneHotEncoderohe = OneHotEncoder()x=[['天津'],['北京'],['上海'],['南京'],['北京']]ohe.fit_transform(x).toarray()
#array([[0., 0., 0., 1.],
#       [0., 1., 0., 0.],
#       [1., 0., 0., 0.],
#       [0., 0., 1., 0.],
#       [0., 1., 0., 0.]])
ohe.transform(x).toarray()
#array([[0., 0., 0., 1.],
#       [0., 1., 0., 0.],
#       [1., 0., 0., 0.],
#       [0., 0., 1., 0.],
#       [0., 1., 0., 0.]])
ohe.inverse_transform(array([[0., 0., 0., 1.],[0., 1., 0., 0.],[1., 0., 0., 0.],[0., 0., 1., 0.],[0., 1., 0., 0.]]))
#array([['天津'],
#       ['北京'],
#       ['上海'],
#       ['南京'],
#       ['北京']], dtype=object)

可以看到,与LabelEncoder不同的地方在于OneHotEncoder将内容编码为0,1的形式,LabelEncoder是将内容编辑为0,1,2,...的形式。为了使非偏序关系的变量取值不具有偏序性,并且到圆点是等距的。使用one-hot编码,让特征之间的距离计算更加合理。同时one-hot方法也有缺陷,当类别的数量很多时,特征空间会变得非常大,计算复杂度会变高,成本也会变大。

除此之外呢,pandas中的get_dummies()函数也具有与one-hot相同的功能,感兴趣的同学可以自行尝试~

离散型特征的处理方法相关推荐

  1. 多取值离散型特征工程_特征工程(完)

    机器学习入门系列(2)--如何构建一个完整的机器学习项目,第六篇! 这也是特征工程系列最后一篇文章,介绍特征提取.特征选择.特征构建三个工作,通常特征工程被认为分为这三方面的内容,只是我将前面的数据& ...

  2. 卡方检验——离散型特征相关性分析

    import pandas as pd #导入读入数据的包 from sklearn.feature_selection import SelectKBest #卡方检验->判断离散型特征是否相 ...

  3. 【特征工程】机器学习中离散型特征的处理 —— 独热码 (one-hot)

    [原文链接]https://www.cnblogs.com/daguankele/p/6595470.html 1.什么是独热码 独热码,在英文文献中称做 one-hot code, 直观来说就是有多 ...

  4. 系统学习机器学习之特征工程(二)--离散型特征编码方式:LabelEncoder、one-hot与哑变量*

    转自:https://www.cnblogs.com/lianyingteng/p/7792693.html 在机器学习问题中,我们通过训练数据集学习得到的其实就是一组模型的参数,然后通过学习得到的参 ...

  5. 【CTR预估】CTR模型如何加入稠密连续型和序列型特征?

    " CTR预估任务中除了广泛使用的稀疏离散型特征外,还会用到稠密连续型以及一些序列类型的特征,本文为大家简要梳理几种特征的处理方式-" 稠密连续类型特征的处理 在点击率预估问题中, ...

  6. 一文了解类别型特征的编码方法

    来源:Unsplash,作者:an Rizzari 2019 年第 78 篇文章,总第 102 篇文章 目录: 问题描述 数据准备 标签编码 自定义二分类 one-hot 编码 总结 问题描述 一般特 ...

  7. 离散型特征编码方式:one-hot与哑变量

    转载:离散型特征编码方式:one-hot与哑变量 在机器学习问题中,我们通过训练数据集学习得到的其实就是一组模型的参数,然后通过学习得到的参数确定模型的表示,最后用这个模型再去进行我们后续的预测分类等 ...

  8. 如何处理类别型特征?

    目录: 问题描述 数据准备 标签编码 自定义二分类 one-hot 编码 问题描述 一般特征可以分为两类特征,连续型和离散型特征,而离散型特征既有是数值型的,也有是类别型特征,也可以说是字符型,比如说 ...

  9. 离散型变量的编码方式——one-hot与哑变量(dummy variable)

    我们在用模型去解决机器学习问题的时候,要提前进行"特征工程".而特征工程中很重要的就是对特征的预处理. 当你使用的是logistic回归这样的模型的时候,模型要求所有特征都应该是数 ...

  10. 11种离散型变量编码方式及效果对比

    首先介绍一个关于离散型编码的Python库,里面封装了十几种(包括文中的所有方法)对于离散型特征的编码方法,接口接近于Sklearn通用接口,非常实用.下面是这个库的链接:Category Encod ...

最新文章

  1. 语言都是相通的,学好一门语言,再学第二门语言就很简单,记录一下我复习c语言的过程。...
  2. 影响几代产品人的宝典第 2 部开启预售!5 折限量抢,产品人都需要一本
  3. arcgis 卸载和注册表相关总结
  4. Linux RH5平台下使用Oracle ASM创建数据库
  5. Windows隐藏账户处置
  6. 电脑入门完全自学手册_电气自动化自学宝典——看过人人都是工程师
  7. 不要网上乱拷贝代码了!一段网上找的代码把公司服务器崩了!
  8. html中加减页码怎么设置,word中如何设置页码
  9. java代码实现龙卷风_程序设计-理解java继承-遁地龙卷风
  10. 如何将PPT压缩后保存
  11. 计算机文件保存方式,Word文档的三种保存方式
  12. android windows安卓版,安卓模拟器 WindowsAndroid
  13. python unit test什么意思_Pycharm上python和unittest两种姿势傻傻分不清楚
  14. 如何测试IP核(RAM为例)
  15. fastunit中使用MapList一个注意例子
  16. 基于V4L2的视频驱动开发(2
  17. 1.4-----PCB设计?(电路设计)确定方案
  18. 我的共享软件开发日志
  19. mysql李玉婷网课配套笔记(一) 基础查询、条件查询bilibili
  20. poweroff命令手册

热门文章

  1. java基于ssm的高速公路收费管理系统
  2. ORACLE用自定义函数实现EXCEL中的NORMSINV与NORMSDIST函数功能
  3. c语言源代码三角函数大全,【C语言及程序设计】项目2-9-3:编制三角函数表
  4. 15个快速学习苹果Swift编程语言的入门教程
  5. 静态类型的 NSUserDefaults
  6. 5G:智能座舱的分水岭,蔚来小鹏们的翻身战
  7. 离职原因之3B分类问题
  8. 微信支付提示微信登录失败:redirect_uri域名与后台配置不一致,错误码:10003
  9. 动环监控系统服务器维护,机房动环设备维护与检测的13个具体内容
  10. python解析pdf中文乱码_Python解决中文乱码.pdf