一位有效编码(独热编码)

简单介绍

有一组数据,其中有个特征是性别。既然是性别,那它的值显然只有两个选择,要么男性(用1表示)要么女性(用0表示)。
独热编码就是将这一个特征变成两个特征:是男性、是女性。
我是男的,我的特征就变成了 [1, 0],1代表我是男的,0代表我不是女的。同样,女性的特征变为[0, 1]。

用处

为什么用独热编码?
假设一个特征是颜色,选项有:黄色、红色、绿色等等。如果我们不采用独热编码,用0表示黄色,用1表示绿色,用2表示红色,以此类推。从数学上看,它们之间的距离不一样了,0和1的距离显然比0和2的距离小,可是不能认为黄色与红色的关系比绿色更接近。
采用独热编码后,黄色变成[1, 0, 0 , … ],红色变成[0, 1, 0, … ],绿色变成[0, 0, 1, … ],这样它们的相似度就一样了,这对机器学习算法很重要。

怎么用

以性别为例,有两个人,一男一女。他们原始属性是[1]和[0]。

from sklearn.preprocessing import OneHotEncoder # 利用sklearn
enc = OneHotEncoder()
test=[[1],[0]]
enc.fit(test) # 调用函数

完成了,就是这么简单。
我们来预测一下

enc.transform([[1]]).toarray()

输出是

array([[ 0.,  1.]])

有点简单唉,再复杂点,加上颜色属性,假设有三个人:
A 男性、红色衣服 [1 ,1 ]
B 男性、黄色衣服 [1 ,0 ]
C 女性、绿色衣服 [0 ,2 ]
在这三人的属性的基础上进行独热编码,编码成功后,看看D 女性、红色衣服会被编码成什么样子

test2=[[1,1],[1,0],[0,2]]
enc.fit(test2) 
enc.transform([[0,1]]).toarray()

Out:

array([[ 1.,  0.,  0.,  1.,  0.]])

有五列数据,分别代表:女性、男性、黄色、红色、绿色。这是从A、B,C三人中得到的规律。
1代表是,0代表不是,很容易看出结果表示的是 女性、红色。

Pandas

依旧以年龄和颜色为例,我已经有了一堆数据,怎样快速地编码呢。
先做一个表格

import pandas as pd 
from pandas import Series,DataFrame
df=pd.DataFrame({'sex': [1, 1, 0, 1], 'color': [1, 0, 2, 1]})
df

Out:

   color  sex
0      1    1
1      0    1
2      2    0
3      1    1

In:

s1 = pd.get_dummies(df['sex'], prefix = 'sex')
s1

Out:

   sex_0  sex_1
0      0      1
1      0      1
2      1      0
3      0      1

In:

s2 = pd.get_dummies(df['color'], prefix = 'color')
s2

Out:

Out[21]: 
   color_0  color_1  color_2
0        0        1        0
1        1        0        0
2        0        0        1

In:

pd.concat([s1, s2],axis=1)

Out:

   sex_0  sex_1  color_0  color_1  color_2
0      0      1        0        1        0
1      0      1        1        0        0
2      1      0        0        0        1
3      0      1        0        1        0

也可以同时对多个特征编码,结果是一样的

pd.get_dummies(df, columns=["color","sex"])
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值