在机器学习算法中,常会遇到分类特征是离散的,无序的。例如:性别有男、女等。 性别特征: [“男”,“女”] => 0,1 地区特征: [“武汉”,“荆州”,“江苏”] => 0,1,2 工作特征: [“程序员”,“教师”,“公务员”,“工程师”,“律师”] => 0,1,2,3,4
比如,样本(女,武汉,工程师)=>(1,0,3),但是,这样的特征处理并不能直接放入机器学习算法中,因为,分类器通常数据是连续且有序。解决这类问题,一种解决方法是采用独热编码(One-Hot Encoding)。
什么是独热编码 独热编码(One-Hot Encoding),又称一位有效编码,其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都有它独立的寄存器位,并且在任意时候,其中只有一位有效。即,只有一位是1,其余都是零值。
例子:性别特征:[“男”,“女”],按照N位状态寄存器来对N个状态进行编码的原理: 性别特征:[“男”,“女”](这里N=2) 男 => 10 女 => 01
地区特征:["武汉 ","荆州 ,"江苏 "](这里N=3):
武汉 => 100
荆州 => 010
江苏 => 001
工作特征:["程序员 ","教师 ","公务员","工程师","律师"](这里N=5):
程序员 => 10000 教师 => 01000 公务员 => 00100 工程师 => 00010 律师 => 00001
样本的特征[“女”,“荆州”,“程序员”],独热编码(One-Hot Encoding)的结果为: [0,1,0,1,0,1,0,0,0,0]
独热编码Python的实现:
import pandas as pd
df = pd.DataFrame({'key':['b','b','a','c','a','b'],'data':range(6)})
print(df)
df的结构如下:
dummies = pd.get_dummies(df['key'],prefix='key')
print(dummies)
dummies的结构如下: jiang
new_df = df[['data']].join(dummies)
print(new_df)
new_df的结构如下: 通过df和new_df我们可以看到,经过独热编码处理后,特征集由原来的两维变成了四维。
|