数据预处理之独热编码(One-Hot Encoding)
问题的由来
在很多机器学习任务中,特征并不总是连续值,而有可能是分类值。
例如,考虑以下三个特征:
["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 Chrom"]表示为[1,2,1]
但是,即使转化为数字表示之后,上述数据也不能直接用在我们的分类器中。因为,分类器往往默认数据是连续的,并且是有序的。但是,按照我们上述的表示,数组并不是有序的,而是随机分配的。
独热编码
为了解决上述问题,其中一种可能的解决方法是采用独热编码(One-Hot Encoding)
独热编码即One-Hot编码,又称为有效编码,其方法是使用N位寄存器来对N个状态进行编码,每个状态都由他独立的寄存位,并且在任意时候,其中只有一位有效。
例如上面的"性别"特征,有2个可能的分类:male,female。那么就可以用2位编码来表示:10,01,每次只有1个位激活
“所属区域”,有3个可能的分类:即Europe,US,ASia。那么就用3位编码来表示:100,010,001,每次只有1个位激活。
“使用浏览器”,有4个可能的分类:即Firefox,Chrome,Safari,IE,那么就用4位编码来表示:1000,0100,0010,0001,每次只有1个位激活。
例如:
["male","Asia","Safari"],通过独热编码就成为:[1,0,0,0,1,0,0,1,0]
可以这样理解,对于每一个特征,如果它有m个可能值,那么经过独热编码后,就编程了m个儿园特征。并且,这些特征互斥,每次只有一个激活。因此,数据会变成稀疏的。
这样做的好处主要是:
1.解决了分类器不好处理属性数据的问题
2.在一定程度上也起到了扩充特征的作用
举例
from sklearn import preprocessing
enc=preprocessing.OneHotEncoder()
enc.fit([[0,0,3],[1,1,0],[0,2,1],[1,0,2]])
enc.transfrom([[0,1,3]]).toarray()
输出结果:
array([1, 0,0,1,0,0,0,0,1])
处理离散型特征和连续型特征并存的情况,如何做归一化
例如:拿到获取的原始特征,必须对每一个特征分别进行归一化,比如,特征A的取值范围是[-1000,1000],特征B的取值范围是[-1,1]
如果使用logistic回归,w1*x1+w2*x2,因为x1的取值太大了,所以x2基本起不了作用。所以必须进行特征的归一化,每个特征都单独进行归一化。
连续特征归一化的常用方法:
1.线性缩放到[-1,1]
2.放缩到均值为0,方差为1
离散特征的处理方法:
对于离散的特征基本都是按照One-Hot编码,该离散特征有多少取值,就用多少维来表示该特征。
为什么使用One-Hot编码来处理离散型特征?
1、使用One-Hot编码,将离散特征的取值扩展到欧式空间,离散特征的某个取值就对应欧式空间的某个点
2、将离散特征通过One-Hot编码映射到欧式空间,是因为,在回归、分类、聚类等机器学习算法中,特征之间距离的计算或相似度的计算是非常重要的,而我们常用的距离和相似度的计算都是在欧式空间的相似度计算,计算余弦相似性,基于的就是欧式空间。
3、将离散特征使用One-Hot编码,确实会让特征之间的距离计算更加合理。但如果特征是离散的,并且不用One-Hot编码就可以很合理的计算出距离,那么就没有必要进行One-Hot编码,比如,该离散特征共有1000个取值,我们分成两组,分别是400和600,两个小组之间的距离有合适的定义,组内的距离也有合适的定义,那就没有必要用One-Hot编码
离散特征进行One-Hot编码后,编码后的特征,其实每一维度的特征可以看作是连续的特征,就可以跟对连续性特征的归一化方法一样,对每一维度进行归一化。比如归一化到[-1,1]或归一化到均值为0,方差为1
有些情况不需要进行特征的归一化:
基于树的方法不需要进行特征的归一化,例如随机森林,baggin和boosting等,基于参数的模型或基于距离的模型的,都需要进行特征的归一化。
数据预处理之独热编码(One-Hot Encoding)的更多相关文章
- 【转】数据预处理之独热编码(One-Hot Encoding)
原文链接:http://blog.csdn.net/dulingtingzi/article/details/51374487 问题由来 在很多机器学习任务中,特征并不总是连续值,而有可能是分类值. ...
- 机器学习实战:数据预处理之独热编码(One-Hot Encoding)
问题由来 在很多机器学习任务中,特征并不总是连续值,而有可能是分类值. 例如,考虑一下的三个特征: ["male", "female"] ["from ...
- 数据预处理:独热编码(One-Hot Encoding)
python机器学习-sklearn挖掘乳腺癌细胞( 博主亲自录制) 网易云观看地址 https://study.163.com/course/introduction.htm?courseId=10 ...
- 数据预处理:独热编码(One-Hot Encoding)和 LabelEncoder标签编码
一.问题由来 在很多机器学习任务中,特征并不总是连续值,而有可能是分类值. 离散特征的编码分为两种情况: 1.离散特征的取值之间没有大小的意义,比如color:[red,blue],那么就使用one- ...
- 数据预处理之独热编码(One-Hot Encoding)(转载)
问题由来 在很多机器学习任务中,特征并不总是连续值,而有可能是分类值. 例如,考虑一下的三个特征: ["male", "female"] ["from ...
- 机器学习 数据预处理之独热编码(One-Hot Encoding)
问题由来 在很多机器学习任务中,特征并不总是连续值,而有可能是分类值. 例如,考虑一下的三个特征: ["male", "female"] ["from ...
- 机器学习:数据预处理之独热编码(One-Hot)
前言 ———————————————————————————————————————— 在机器学习算法中,我们经常会遇到分类特征,例如:人的性别有男女,祖国有中国,美国,法国等.这些特征值并不是连续的 ...
- Scikit-learn库中的数据预处理:独热编码(二)
在上一篇博客中介绍了数值型数据的预处理但是真实世界的数据集通常都含有分类型变量(categorical value)的特征.当我们讨论分类型数据时,我们不区分其取值是否有序.比如T恤尺寸是有序的,因为 ...
- 数据预处理之独热编码(One-Hot):为什么要使用one-hot编码?
一.问题由来 最近在做ctr预估的实验时,还没思考过为何数据处理的时候要先进行one-hot编码,于是整理学习如下: 在很多机器学习任务如ctr预估任务中,特征不全是连续值,而有可能是分类值.如下: ...
随机推荐
- sublime 常用快捷键(转)
Sublime text 3是码农最喜欢的代码编辑器,每天和代码打交道,必先利其器,掌握基本的代码编辑器的快捷键,能让你打码更有效率.刚开始可能有些生疏,只要花一两个星期坚持使用并熟悉这些常用的快捷键 ...
- agc015E - Mr.Aoki Incubator(dp)
题意 题目链接 平面上有$n$个点,每个点都有一个位置$x_i$,和向右的速度$v_i$ 现在要求你对其中的一些点进行染色,当一个点被染色后,在无限距离内与它相遇的点也会被染色 问在可能的$2^n$种 ...
- mysq表的三种关系,数据的增删改以及单表多表查询
一丶三种关系 分析步骤: #.先站在左表的角度去找 是否左表的多条记录可以对应右表的一条记录,如果是,则证明左表的一个字段foreign key 右表一个字段(通常是id) #.再站在右表的角度去找 ...
- 转:WPF中ListBox的创建和多种绑定用法
先从最容易的开始演示ListBox控件的创建. Adding ListBox Items下面的代码是向ListBox控件中添加多项ListBoxItem集合.XAML代码如下:<ListBox ...
- cocos2d-x-2.2.0_win7+vs2010搭建_eclipse+ndk-r9+cygwin搭建_教程以及编译问题汇总
声明:我是才用c/c++和cocos2d-x的如果有错误欢迎指出 文章内容我亲测过可以通过,同时我也会一直更新内容 感谢那些把自己的东西分享出来的人 原文地址:http://www.cnblogs.c ...
- cms-帖子内容实现2
package com.open1111.controller.admin; import java.io.File;import java.util.Date;import java.util.Ha ...
- WPS去掉英语单词下面的红斜线
我们在使用WPS的时候,经常会用到英语但是,但是在编码的时候,有些单词是缩写形成的,WPS就会自动验证,产生红色波浪线,提示我们单词写错的问题,那看起来就显得很不美观别扭 那么我们不想要这个红斜杠,怎 ...
- jq实现剪裁图片设置为头像
有时候我们需要设置为这样,就是将某些图片设置为剪裁成设置的尺寸:就是这样的 插件的地址: http://www.htmleaf.com/jQuery/Image-Effects/20150421171 ...
- 利用ajax实现分页效果
在网页中看到的分页效果,想一下就点击分页中的内容的时候,然后调用ajax调出对应的数据,正确的显示在相应的标签内. 1.用html实现正确的样式和结构 2.采用jquery中的ajax调出数据. 需要 ...
- TFS看板的设计
列 产品开发的整个流程如下图,将流程配置到看板的列: 需求池-->就绪-->开发-->测试-->待验收 -->待发布 -->已关闭 一般将Bug和需求放在一块看版上 ...