onehot处理nsl_数据预处理之One_hot Encoding

最近在参与职业生涯的第一个机器学习算法大赛(腾讯广告算法大赛),在和队友们学习大神YouChouNoBB的github上公开的带你上0.73的代码https://github.com/YouChouNoBB/2018-tencent-ad-competition-baseline时遇到了从未听说过但是听起来很牛逼的One-hot编码。

其实One-hot编码又称为一位有效编码,就是用N位二进制编码来对N个状态进行记录,每个状态对应一个独立的位,并且在任意时候只会也只能有一位有效。

举个栗子:

我们遇到一个特征,西瓜的根蒂,有[蜷缩,硬挺,稍蜷]三种,这个特征是离散的。首先我们将之用数字1,2,3代替表示效率会高很多。

但是1,2,3是连续的,他们之间是有大小先后关系的,这可能会对我们要进行的操作比如分类造成一些不必要的影响。于是我们再进行一次改进,将这三个特征分别用[100,010,001]来表示,这样就解决了前面的先后大小关系的问题,同时每个类之间编码的距离(比如曼哈顿距离,欧氏距离或者其他明氏距离)也是相等的。而这个编码[100,010,001]就叫做One-hot编码。

当然在使用One-hot编码时,数据会变的非常稀疏。

摘抄一段sklearn包中写好的OneHotEncoder的使用:

1 from sklearn importpreprocessing2

3 enc =preprocessing.OneHotEncoder()4 enc.fit([[0,0,3],[1,1,0],[0,2,1],[1,0,2]])5

6 array = enc.transform([[0,1,3]]).toarray()7

8 print array

结果:[[ 1.  0.  0.  1.  0.  0.  0.  0.  1.]]

而对于稀疏向量的计算优化,可以参见博客https://blog.csdn.net/bitcarmanlee/article/details/51213390

对于稀疏矩阵的存储,可以参见博客https://www.cnblogs.com/xbinworld/p/4273506.html 不过应该不用了解的这么深入?

ps:github,kaggle社区,阿里云云栖社区,腾讯云云+社区也有很多知识点可以找到。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值