数据预处理之独热编码(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等,基于参数的模型或基于距离的模型的,都需要进行特征的归一化。
转载于:https://www.cnblogs.com/zhibei/p/9578203.html
数据预处理之独热编码(One-Hot Encoding)相关推荐
- python 独热码_数据预处理:独热编码(One-Hot Encoding)
问题由来 在很多机器学习任务中,特征并不总是连续值,而有可能是分类值. 例如,考虑一下的三个特征: ["male", "female"] ["from ...
- 数据预处理之独热编码(One-Hot)
1.前言 在机器学习算法中,我们经常会遇到分类特征,例如:人的性别有男女,祖国有中国,美国,法国等. 这些特征值并不是连续的,而是离散的,无序的.通常我们需要对其进行特征数字化. 那什么是特征数字化呢 ...
- Python数据分析数据预处理特征值独热编码
[小白从小学Python.C.Java] [Python-计算机等级考试二级] [Python-数据分析] Python数据分析 数据预处理 特征值独热编码 独热编码,是一种将分类变量转换为若干二进制 ...
- 【sklearn】数据预处理之独热编码(含两种实现方式+代码理解)
最近学习机器学习,接触到独热编码相关内容,参考了一些资料,加上自己的思考,做出了如下总结: 一.什么是独热编码 独热编码,即One-Hot编码,又称一位有效编码,其方法是使用N位状态寄存器来对N个状态 ...
- 数据预处理之独热编码(OneHotEncoder)
前言 ---------------------------------------- 在机器学习算法中,我们经常会遇到分类特征,例如:人的性别有男女,祖国有中国,美国,法国等. 这些特征值并不是连续 ...
- 机器学习:数据预处理之独热编码(One-Hot)
前言 ---------------------------------------- 在机器学习算法中,我们经常会遇到分类特征,例如:人的性别有男女,祖国有中国,美国,法国等. 这些特征值并不是连续 ...
- 机器学习:数据预处理之独热编码(One-Hot)详解
一. 什么是独热编码? ---------------------------------------- 在机器学习算法中,我们经常会遇到分类特征,例如:人的性别有男女,祖国有中国,美国,法国等. 这 ...
- 深度学习工作笔记003---数据预处理:独热编码(One-Hot Encoding)
JAVA技术交流QQ群:170933152 问题由来 在很多机器学习任务中,特征并不总是连续值,而有可能是分类值. 例如,考虑一下的三个特征: ["male", "fem ...
- 机器学习类别/标称(categorical)数据处理:独热编码(One Hot Encoding)
机器学习类别/标称(categorical)数据处理:独热编码(One Hot Encoding) 序号编码:序号编码通常用于处理类别间具有大小关系的数据 可以通过导入sklearn.preproce ...
最新文章
- osgEarth3.0 加载天地图
- ERROR Cannot determine the location of the VS Common Tools Folder
- ASP.NET Core Filter如何支持依赖注入
- git之you can‘t overwrite the remote branch问题解决
- 前端学习(1668):前端系列实战课程之限制范围拖拽思路
- linux 安装mysql5.7.12_Linux系统上安装mysql5.7.12
- LeetCode 103. 二叉树的锯齿形层次遍历(Binary Tree Zigzag Level Order Traversal)
- Linux 2.6.39-rc3的一个插曲
- ios实例开发精品文章推荐(8.13)
- 绝地求生信号服务器崩溃,绝地求生奔溃怎么办 吃鸡游戏崩溃解决方法
- jni调用dll方法报UnsatisfiedLinkError
- (孔乙己茴香豆的的“茴”字有几种写法)三栏布局两边固定中间自适应
- FBreader问题记录及多端同步心得开篇
- 解决eclipse在安装时工作空间出错问题的有效方法
- 【Android 系统开发】CyanogenMod 13.0 源码下载 编译 ROM 制作 ( 手机平台 : 小米4 | 编译平台 : Ubuntu 14.04 LTS 虚拟机)
- linux自动登录drcom,Ubuntu用drcom客户端登陆
- 概率抽奖常用两种方式
- CSS3 画的哆啦A梦
- 机器学习算法应用中常用技巧-1
- 亚马逊Facebook头条布局社交电商的焦虑