one hot encoding

转自:http://blog.sina.com.cn/s/blog_5252f6ca0102uy47.html

问题由来

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

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

["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.]])

时间: 2024-10-10 06:20:31

one hot encoding的相关文章

The Interpreter and ... 之 Source Code Encoding

在python的源代码文件中,允许使用不同的字符集编码而并非只是ASCII.最好的设置方法是在"#!"之后再多设置一个特殊的行,用来定义源代码文件的编码,就像下面这样: # -*- coding: encoding -*- 通过上诉方式的定义,所有在源代码文件中的字符将都会被看做是(treated  as)指定的编码方式去编码,同时该源文件就允许立即被写入选中的编码的Unicode字符字面量.Python所允许的编码方式,你可以在Python的库参考中找到,在 codecs 这一章节中

“wsimport -keep ”生成客户端报错“Use of SOAP Encoding is not supported.”

本来想用 “wsimport -keep ” 生成客户端,结果报错“Use of SOAP Encoding is not supported.” 应该是缺jar包, 闲麻烦就发现了百度经验上的 这个方法.以下是教程 wsdl文件生成客户端 首先我们需要知道webservice接口地址,这里我的测试地址为http://localhost:8085/Service/Function?wsdl.   右击另存为,保存为.wsdl的文件.   在eclipse中新建一个java项目.   将.wsdl

EBS 11i ojspCompile.pl 编译jsp乱码 encoding

11i环境,一般来说jsp是重启apache后自动编译的,但是因为某些环境设置,需要手动编译jsp. 11i的编译路径:$JTF_TOP/admin/scripts/ojspCompile.pl 编译命令:perl $JTF_TOP/admin/scripts/ojspCompile.pl --compile -p 16 -s xxx.jsp 一个简单的jsp文件test1.jsp,文件编码格式GB2312,代码如下: <%@page language="java" conten

hdu 1020 Encoding

Encoding Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 40214    Accepted Submission(s): 17846 Problem Description Given a string containing only 'A' - 'Z', we could encode it using the followi

如何设置项目encoding为utf-8

1.鼠标右键点击项目,选择[properties] 2.选择[Resource],在Text file encoding里面选择UTF-8,点击[ok] 大功告成! 木头大哥所发的文章均基于自身实践,各位江湖好汉可以通过:[email protected] 联系之.

svn: Can&amp;#39;t convert string from &amp;#39;UTF-8&amp;#39; to native encoding 解决的方法

今天在down代码时遇到了例如以下问题: [[email protected] ~]$ svn co https://xxxxxxxxxxxxx svn: Can't convert string from 'UTF-8' to native encoding: svn: xxxxxxxx/include/xml_inc/XML/?\194?\184? \194? \180?\194?\188?\195? \190 mcXML.h 这个问题主要是代码中包括了中文名字的文件,svn这边的编码不支持

Non-ASCII character &#39;\xe8&#39; in file xxx.py on line 8, but no encoding declared

使用网上某个python程序,编译时报错: File "xxx.py", line 8         SyntaxError: Non-ASCII character '\xe8' in file xxx.py on line 8, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details 原因是缺少编码类型声明:no encoding declared 段首添加一行声明即可:

x264源代码简单分析:熵编码(Entropy Encoding)部分

本文记录x264的 x264_slice_write()函数中调用的x264_macroblock_write_cavlc()的源代码.x264_macroblock_write_cavlc()对应着x264中的熵编码模块.熵编码模块主要完成了编码数据输出的功能. 函数调用关系图 熵编码(Entropy Encoding)部分的源代码在整个x264中的位置如下图所示. 单击查看更清晰的图片 熵编码(Entropy Encoding)部分的函数调用关系如下图所示.   单击查看更清晰的图片 从图中

Base64 Encoding / Decoding in Node.js

[Base64 Encoding / Decoding in Node.js] Here is how you encode normal text to base64 in Node.js: var b = new Buffer('JavaScript');var s = b.toString('base64');// SmF2YVNjcmlwdA== And here is how you decode base64 encoded strings: var b = new Buffer('

Fisher Vector Encoding and Gaussian Mixture Model

一.背景知识 1. Discriminant  Learning Algorithms(判别式方法) and Generative Learning Algorithms(生成式方法) 现在常见的模式识别方法有两种,一种是判别式方法:一种是生成式方法.可以这样理解生成式方法主要是数据是如何生成的,从统计学的角度而言就是模拟数据的分布distribution;而判别式方法,不管数据是如何生成而是通过数据内在的差异直接进行分类或者回归.举个例子你现有的task是去识别一段语音属于哪一种语言.那么生成