hi各位大佬好,我是探花小明哥,之前的博文中提及的one-hot可能与常见的one-hot不太一样,针对叶子节点中的one-hot,这个肯定是多个0,1的组合,最终的结果就是直接LabelEncoder的拼接,我失算了,我以为有啥高深的玩意,发现并没有。

For Recommendation in Deep learning QQ Group 102948747

For Visual in deep learning QQ Group 629530787

I'm here waiting for you

不接受这个网页的私聊/私信!!!

我之前提到过lightgbm中的确只需0~k编码即可,无需one-hot,计算结果前者更好,而且节省时空,这是lightgbm独有的快速处理方式。

LightGBM can use categorical features as input directly. It doesn’t need to convert to one-hot coding, and is much faster than one-hot coding (about 8x speed-up).

而对于LR则不可,必然需要(对于类别特征),而经过随机森林及树模型的处理得到的是新特征,即类别特征——落在每个叶子的索引,如代码,和paper中的类似吧

>>> X_train_lr.shape
(20000, 20)
>>> X_train_lr
array([[ 1.16872922, -0.12326182, -1.5484857 , ...,  0.67940014,0.52846206,  0.83227156],[-1.00731753, -0.13562786,  0.6830177 , ..., -1.38317951,-0.34762768, -0.05636781],[ 0.1071118 ,  0.12562994, -2.57552698, ...,  0.52352653,0.22234559,  0.02766531],...,[ 0.65539074, -0.0093059 , -0.29745059, ...,  0.221068  ,0.10400257,  0.7163802 ],[ 1.74374594,  0.04608131,  0.97697367, ..., -1.74149946,-1.90247471, -0.29741195],[-0.52465285, -0.16638788,  0.61640846, ...,  0.41042506,-1.32117369,  0.59130764]])>>> rf_enc.transform(rf.apply(X_train_lr)).toarray()
array([[0., 0., 1., ..., 0., 0., 0.],[0., 0., 1., ..., 0., 0., 0.],[0., 0., 1., ..., 0., 0., 0.],...,[0., 0., 1., ..., 0., 0., 0.],[0., 0., 1., ..., 0., 0., 0.],[0., 0., 1., ..., 0., 0., 0.]])
>>> rf_enc.transform(rf.apply(X_train_lr)).toarray()[0]
array([0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0.,0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0.,0., 1., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0.,0., 0., 0., 0., 1., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0.,1., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0.])
>>> rf_enc.transform(rf.apply(X_train_lr)).shape
(20000, 80)

分析:LabelEncoder只是对任何形式的特征做0~k编码,而OneHotEncoder则是真正的0~1编码,比如下面代码得到的k只是0~k的编码,但不知道它到底是哪个特征的编码,这一点LR是不知道的,它可能会误认为是一个特征的编码。【注:一般默认每列为一个特征】OneHotEncoder可对特征进行编码0~k,也就是说包含了LabelEncoder,而且知道最终的特征的编码个数,这也是表示0-1的编码的根本所在,如下注释:

enc = OneHotEncoder(categories='auto')
arr=np.array([[0, 0, 4],[1, 1, 0],[0, 2, 1],[1, 0, 2]])
enc.fit(arr,)
b=np.array([[0, 1, 4]])
ans = enc.transform(b).toarray()
print(ans)
for i in range(arr.shape[1]):lbe=LabelEncoder()arr[:,i]=lbe.fit_transform(arr[:,i])k=lbe.transform(b[:,i])print(k)print("coding order",lbe.classes_)print("feature number",len(lbe.classes_))[[1. 0. 0. 1. 0. 0. 0. 0. 1.]]
[0]
coding order [0 1]
feature number 2
[1]
coding order [0 1 2]
feature number 3
[3]
coding order [0 1 2 4]
feature number 4

前者的结果与后者是统一的,只不过不知道特征个数时无法得到最终的编码形式。知道后,第一特征0-1编码则为[1,0],就是第0个位置为1,特征个数为2,那么是2维;第二个则为[0,1,0],即第1个位置为1,特征个数是3维;第三个则为[0,0,0,1],第3个位置为1,特征个数是4维度。

而下面的两个编码则需要注意,第一个是对特征内的编码,也就是说对单个特征的编码,当然也可多个特征,但第一次见这个的人可能会蒙圈,因为它不对整型的特征编码,只对原始的类别特征编码。如下。第二则是keras中one-hot,它是对单个特征的编码,目前不知道多特征是否有类似的函数。

>>> df = pd.DataFrame({'A': ['a', 'b', 'a'], 'B': ['b', 'a', 'c'],'C': [1, 2, 3]})
>>> dfA  B  C
0  a  b  1
1  b  a  2
2  a  c  3
>>> pd.get_dummies(df)C  A_a  A_b  B_a  B_b  B_c
0  1    1    0    0    1    0
1  2    0    1    1    0    0
2  3    1    0    0    0    1#直接输入会默认为单个特征,然后进行0~k及one-hot编码,因为它不知道每个特征的编码个数
>>> pd.get_dummies([0, 1, 4])0  1  4
0  1  0  0
1  0  1  0
2  0  0  1>>> to_categorical([0, 1, 4])
array([[1., 0., 0., 0., 0.],[0., 1., 0., 0., 0.],[0., 0., 0., 0., 1.]], dtype=float32)
>>> to_categorical([[0, 1, 4]])
array([[[1., 0., 0., 0., 0.],[0., 1., 0., 0., 0.],[0., 0., 0., 0., 1.]]], dtype=float32)
#无间隔的认为已经0~k编码过了

这也算是一个总结吧,拜拜。

愿我们终有重逢之时,而你还记得我们曾经讨论的话题。

关于one-hot编码相关推荐

  1. 创建数据库,指定数据库的字符集和编码顺序

    创建数据库,指定它的字符集和编码顺序 create database {数据库名称} CHARACTER SET {字符集} COLLATE {排序规则} 举例: create database co ...

  2. Myeclipse中修改项目默认编码还是乱码?一步永久解决!

    在myeclipse中修改默认编码后发现项目还是乱码? 点击Windows选择Preferences 如下图

  3. form表单提交编码的问题

    浏览器在form提交后,会生成一个HTTP的头部信息"content-type",标准规定其形式为Content-type: application/x-www-form-urle ...

  4. vs2012下编码引起的一个神坑

    当前有一个项目里面会报解决该文件不能在当前代码页(936)中表示的字符的warning, 根据这个方法 我修改了编码,发现确实不再报warning了 但是尼玛却报出了error 真是太奇怪了!!

  5. 【JavaScript总结】JavaScript语法基础:JS编码

    运算符 数学:+. -. *. / 逻辑:>. < .>= .<=. == . !=.&&.|| . === .!==(完全等于) 对象相关 new delet ...

  6. shell 批量转换文件编码

    相信大家在平时的跨平台编程中碰到过文件编码问题,比如在Windows代码字符编码方式是GB2312,然而转到Linux却只支持utf-8,虽然对代码部分没啥影响,但是很多中文注释部分,却一片乱码,很让 ...

  7. Linux实现ffmpeg H.265视频编码

    Linux实现ffmpeg H.265视频编码 几乎所有观看的视频,数字地面电视,电缆,卫星或互联网上的压缩.原始的,未压缩的视频太大,会浪费太多的带宽.在DVD和Blu-ray之前,有视频CD(VC ...

  8. iOS视频硬编码技术

    iOS视频硬编码技术 一.iOS视频采集硬编码 基本原理 硬编码 & 软编码 硬编码:通过系统自带的Camera录制视频,实际上调用的是底层的高清编码硬件模块,即显卡,不使用CPU,速度快 软 ...

  9. Tesla T4视频编码性能分析

    Tesla T4视频编码性能分析 从开普勒开始的所有 NVIDIA GPUs 都支持完全加速的硬件视频编码: GPUs 支持完全加速的硬件视频解码.最近发布的图灵硬件提供了张量核心和更好的机器学习性能 ...

  10. 视频处理器为电池供电的设计提供4K视频编码

    视频处理器为电池供电的设计提供4K视频编码 Video processor enables 4K video coding for battery-powered designs OmniVision ...

最新文章

  1. 浅谈如何防范电池事故
  2. 每天一道LeetCode-----实现LFU置换算法
  3. 如何用Vue实现简易的富文本编辑器,并支持Markdown语法
  4. 思维导图分析http之http协议版本
  5. Spring Batch_Parallel Steps
  6. javascript基础修炼(1)——一道十面埋伏的原型链面试题
  7. stm32 断路功能和互补输出
  8. 同学,你要的SpringBoot多图片上传回显功能已经实现了,赶紧收藏吃灰~
  9. Grails 基础环境搭建及HelloWorld
  10. 人人都是 DBA(IX)服务器信息收集脚本汇编 (转)
  11. VS2010 无法打开包括文件:“cv.h”
  12. 阿里巴巴 开源软件列表
  13. 《徐志摩传》记得也好,最好你忘掉
  14. Truffle Unbox failed问题解决方法
  15. unity小游戏的脚本
  16. 解决undefined reference to symbol ‘LZ4_decompress_safe‘问题
  17. Unity制作出《超级马里奥》的2D和3D混合效果
  18. QQ坦白说如何查对方身份??其实很简单~
  19. ChinaJoy现场展示
  20. 一致性hash算法虚拟节点解决方案

热门文章

  1. 人造的风景 --- 东部华侨城一日游感想与收获
  2. SQL Server 安全篇——SQL Server加密(1)——加密概念
  3. VmwareTools工具安装
  4. nc文件在ncl中取代nan值为缺省值
  5. 基于无线通讯病房远程通信呼叫和温度检测系统设计
  6. linux 8g内存只认4g,为什么8g运行内存只有4g可用
  7. 服务器显示器多少寸合适,购买别冲动!先看多大的显示器适合你
  8. 重复行删除操作df.drop_duplicates和df.duplicated
  9. 中心极限定理及其应用
  10. 量子计算与量子信息之量子信息概述