Label Encoding & One-Hot Encoding_lukeyyanghang的博客-程序员秘密_label encoding

技术标签: 特征工程  

为什么需要Encoding?

绝大多数模型不支持类别型变量的输入,

 

什么是One-Hot Encoding?

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

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

2.在一定程度上也起到了扩充特征的作用(有利有弊)。

 

举个?:

有如下三个特征属性:

性别:[“male”,“female”]

地区:[“Europe”,“US”,“Asia”]

浏览器:[“Firefox”,“Chrome”,“Safari”,“Internet Explorer”]

对于某一个样本,如[“male”,“US”,“Internet Explorer”],我们需要将这个分类值的特征数字化,最直接的方法,我们可以采用序列化的方式:[0,1,3]。但是这样的特征处理并不能直接放入机器学习算法中(针对于某些模型来说)。

对于上述的问题,性别的属性是二维的,所以编码是两位对应

male 和 female 分别是 [1,0] , [0,1]

地区为三位 分别是 [1,0,0] , [0,1,0] , [0,0,1]

浏览器为 [1,0,0,0] ,[0,1,0,0] , [0,0,1,0] , [0,0,0,1]

 

那么样本对应就是 [ 1,0 , 0,1,0 , 0,0,0,1]

 

什么是Label Encoding?

label encoding就是序列化标签编码

根据类别型变量的顺序个数标记0,1,2,.....,n,还是比较好理解的

 

适用场景?

在讲场景之前,得先说模型(这里只谈分类模型)。

有些模型的损失函数对于数值大小是敏感的,即变量间的数值大小本身是有比较意义的,如逻辑回归,SVM等,我们暂将其称为A类模型;有些模型本身对数值变化不敏感,数值存在的意义更多的是为了排序,即0.1,0.2,0.3与1,2,3是没有区别的,这部分模型绝大部分是树模型,暂将其称为B类模型。

 

A类模型

类别变量必须做one hot encoding,因为label encoding是没有数值含义的。

但是对于类别很多的变量,做one hot encoding会使得生成的变量过于稀疏,所以这里有一些经验上的处理方式。

优先考虑的是有没业务上类别合并的方法,如城市变量,可以依发展程度分为一线城市,二线城市等等;

另外一种方法是one hot出现次数最多的前n个类别,其他类别放在其他类的变量中;

也可以利用y值(训练值)中positive rate做合并,不过容易出现过拟合的现象。

 

B类模型

如果使用的是B类模型,并且是有序变量,则优先使用label encoding,且赋值要与顺序一致。

如果是无序变量,则两种方法在很多情况下差别不大,但是在实际使用中label encoding的效果一般要比one hot encoding要好。这是因为在树模型中,label encoding至少可以完成one hot encoding同样的效果,而多出来的那部分信息则是label encoding后的数值本身是有排序作用的,它可以起到类别变量合并的效果,这种效果在类别较多的变量中更明显。

 

举个?

在树模型中,有四个类别,dog,cat,mouse,horse,如果dog类的占比很少,但它的positive rate与cat是类似的,若在one hot encoding中,前三个类别都入模型了。如果我们做label encoding时,随机将dog,cat,mouse,horse分别赋值为[1,3,2,4],那么可以预见这个变量会分裂两次,达到上面one hot encoding的效果。但是如果我们将dog,cat,mouse赋值为[1,2,3,4],可能这个变量只会分裂1次,它将dog和cat分在一起,此时达到的效果可能与one hot encoding相当。(其实就是树分类的时候,对于数值型变量是用大于小于的方式,依照熵的大小进行分枝的,所以没差)

 

但是在实际使用中,由于one hot encoding增加了变量的维度,在树模型中意味着更深的分裂,如果刚好树的深度限制在一数值时,dog这个类别可能不能入模型,其实意味着丢失了dog这一信息,而上面第二种label encoding没有这种问题,也意味着拟合的效果会更好,但是因为利用到了y值的信息,也容易发生过拟合。

 

参考

机器学习-Label Encoding与One Hot的区别:https://zhuanlan.zhihu.com/p/36804348

LabelEncoder 和 OneHotEncoder 辨析:https://blog.csdn.net/weixin_38656890/article/details/80849334

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lukeyyanghang/article/details/86607082

智能推荐

post请求数据量过大时后台接收数据为空问题解决方法_大数据量下部分数据返回空_过客璇璇的博客-程序员秘密

post请求一般限制大小为2M,传递的数据如果超过2M后台就会无法接收数据如果传输数据超过2M,需要在配置文件中设置springboot项目在配置文件中设置如下:server.tomcat.max-http-post-size: -1如果是用的Tomcat,则需要在server.xml里面设置如下,设置maxPostSize="-1" 如果Tomcat版本在7之前,设置maxP...

异步输出线程日志_Janeeeee的博客-程序员秘密

大家都知道,日志是同步输出出来的。输出日志非常影响主线程执行效率。多线程打印日志会出线日志混乱的情况,一页日志可能包含了N个请求信息,影响问题排查效率。在没有适合的搜索工具...

python基础--pygame开发外星人入侵(来自于python从入门到实践第二版)_cqupt-yz的博客-程序员秘密

使用python----pygame模块开发外星人入侵(本项目来自于python编程—从入门到实践第二版第一个项目)pygame相关详情链接这是书上的项目,严格来说,这不算自己开发的项目,但是将本项目重写一段也能收获到很多,比如:如何管理包含多个文件的项目,重构许多代码并且管理文件内容,复制一次经典的项目开发流程,阅读本书上项目开发作者的开发思路以及经验等等:本次项目包含7个py文件以及一个images文件夹setting.pyclass Settings(): """存储《外星人入侵

OpenGL函数_一叶知秋dong的博客-程序员秘密

开发基于 OpenGL 的应用程序,必须先了解 OpenGL 的库函数。它采用 C 语言风 格,提供大量的函数来进行图形的处理和显示。OpenGL 库函数的命名方式非常 有规律。所有 OpenGL 函数采用了以下格式: 库前缀有 gl、glu、aux、glut、wgl、glx、agl 等等,分别表示该函数属于 OpenGL 那个开发库,从函数名后面中还可以看出需要多少个参数以及参数的 类型

Internal server error 500 问题解决思路_500 internal server error_Tao的博客的博客-程序员秘密

我们系统在一次升级之后,生产环境大量出现Internal server error 500错误,具体场景:在APP上使用拍照功能后,APP通过Http协议上传压缩后的照片到服务端,但是上传过程中大量出现Internal server error 500错误,很多照片都传不上去。经过一番排查之后,我们最终成功解决了这个问题,最后的原因有些出乎意料,这里卖个关子先不说出来。下面是我们解决问题的...

随便推点

Bubble Cup 11 - Finals [Online Mirror, Div. 1] C. Hyperspace Highways 圆方树__xgcxgc的博客-程序员秘密

Description圆方树板子,自己看。。。Sample Input5 7 21 21 31 42 32 43 41 51 42 5Sample Output12写这篇博客完全是为了存个板子,谢谢。#include <vector>#include <cstdio>#include <cstring&amp

李嘉诚又“跑路”?卖了一代“地王”,大赚38亿!_LYCLYC1的博客-程序员秘密

李嘉诚又有新动作了!7月23日晚,李嘉诚家族名下的长实集团发布公告称,以总价约71.02亿元(约10.12亿美元)价格,把旗下成都“南城都汇”项目,卖给“禹洲集团”和“成都瑞卓置业有限公司”,两家房企一人一半(各占50%股权);而李嘉诚将从中“赚”(未经审核收益)约38.11亿元。李嘉诚71亿卖掉成都“地王”7月23日晚,李嘉诚旗下公司长实集团发布了一则公告。公告称,由长实集团子公司所持有的成都南城都汇项目卖了,接盘方为一家名为RZ3262019 Limited的公司,股东分别为禹州集团控股有限公司

libcrypto.so.1.0.0: no version information available_weixin_30378623的博客-程序员秘密

openssl-1.0.1p源码安装后,依赖于openssl.so库的应用报错libcrypto.so.1.0.0: no version information available解法:1. 创建 /tmp/openssl.ld,如下:OPENSSL_1.0.0 { global: *;};OPENSSL_1.0.1 { new*;}OPENSSL_1.0.0;OPENSSL_1.0.1p...

linux 内核参数优化_weifeng1463_cn_yaojin的博客-程序员秘密

原文地址:https://www.cnblogs.com/weifeng1463/p/6825532.htmlSysctl命令及linux内核参数调整一、Sysctl命令用来配置与显示在/proc/sys目录中的内核参数.如果想使参数长期保存,可以通过编辑/etc/sysctl.conf文件来实现。命令格式:sysctl [-n] [-e] -w variab...

Apache Rewrite详细配置与使用说明_apache rewrite pl_bangdao2016的博客-程序员秘密

今天本来想简单对Rewrite解释一下,发现这个功能太庞大了,自己也是参考多方资料,加上自己的部分理解,汇总了一下,如有问题,我们群里沟通。1、Rewrite简介        Rewirte主要的功能就是实现URL的跳转,隐藏URL真实地址,可以帮组我们实现拟静态,拟目录,域名跳转,防止盗链,搜索引擎得收录等。Rewirte配置可以通过服务器级的(httpd.conf)和目录级的 (

tf.losses.sparse_softmax_cross_entropy()_wangweicrazyboy的博客-程序员秘密

损失函数,经常用语多分类,相比于softmax交叉熵,其区别主要在于,softmax 的label是onehot编码的,如[0,0,1],而sparse它的label是一个可能性最高位置的索引。logits = tf.constant([0.1,0.1,0.8])labels = tf.constant([2])labels2 = tf.constant([0,0,1])y1 = tf...

推荐文章

热门文章

相关标签