问题由来

在很多机器学习任务中,特征并不总是连续值,而有可能是分类值。

例如,考虑一下的三个特征:

["male", "female"]

["from Europe", "from US", "from Asia"]

["uses Firefox", "uses Chrome", "uses Safari", "uses Internet Explorer"]

如果将上述特征用数字表示,效率会高很多。例如:

["male", "from US", "uses Internet Explorer"] 表示为[0, 1, 3]

["female", "from Asia", "uses Chrome"]表示为[1, 2, 1]

但是,即使转化为数字表示后,上述数据也不能直接用在我们的分类器中。因为,分类器往往默认数据数据是连续的,并且是有序的。但是,按照我们上述的表示,数字并不是有序的,而是随机分配的。

独热编码

为了解决上述问题,其中一种可能的解决方法是采用独热编码(One-Hot Encoding)。

独热编码即 One-Hot 编码,又称一位有效编码,其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候,其中只有一位有效。

例如:

自然状态码为:000,001,010,011,100,101

独热编码为:000001,000010,000100,001000,010000,100000

可以这样理解,对于每一个特征,如果它有m个可能值,那么经过独热编码后,就变成了m个二元特征。并且,这些特征互斥,每次只有一个激活。因此,数据会变成稀疏的。

这样做的好处主要有:

  1. 解决了分类器不好处理属性数据的问题

  2. 在一定程度上也起到了扩充特征的作用

举例

我们基于python和Scikit-learn写一个简单的例子:

from sklearn import preprocessing

enc = preprocessing.OneHotEncoder()

enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]])

enc.transform([[0, 1, 3]]).toarray()

输出结果:

array([[ 1.,  0.,  0.,  1.,  0.,  0.,  0.,  0.,  1.]])

最新文章

  1. C语言范例学习04
  2. Atitit.病毒木马的快速扩散机制原理nio 内存映射MappedByteBuffer
  3. Ubuntu server 搭建Git server
  4. Oracle 11gR2新建空表不分配Segment
  5. setsockopt中参数之SO_REUSEADDR的意义(转)
  6. 史上最全然oophper php文件上传之文件类型相应表,ie,火狐各一份。
  7. Linux下sed,awk,grep,cut,find学习笔记
  8. 编译android-4.3.1_r源代码并刷到自己的Galaxy Nexus I9250真机上
  9. 【Web探索之旅】第二部分第一课:客户端语言
  10. 【小梅哥FPGA进阶教程】第九章 基于串口猎人软件的串口示波器
  11. tomcat升级,tomcat窗体改名,一台电脑安装多版本JDK
  12. 项目使用EntityFramework需要做的几项工作
  13. MIT KIT OpenID Connect Demo Client
  14. 『线段树 Segment Tree』
  15. VSTS 执行git pull报错问题修复
  16. node.js中对 mysql 进行增删改查等操作和async,await处理
  17. stark组件开发之添加按钮显示和URL
  18. sitemap index
  19. UI基础:UITextField 分类: iOS学习-UI 2015-07-01 21:07 68人阅读 评论(0) 收藏
  20. HDU - 5136 2014icpc南京现场赛J 计数dp

热门文章

  1. android121 zhihuibeijing SlidingMenu(侧边栏效果,使用开源库)
  2. excel vba 打印设置(转)
  3. C#_delegate - 用委托实现事件,Display和Log类都使用Clock对象
  4. 关于jQuery对象与DOM对象
  5. 程序员谈学习:我为什么要学习Linux?
  6. Java安全防御学习笔记V1.0
  7. 关于Git中分支merge和rebase的适用场景及区别
  8. oracle中decode()函数
  9. CCLablettf读取显示xml文件内容显示中文
  10. css扁平化博客学习总结(一)模块分析