特征向量化之one-hot(独热编码)
one-hot编码,又称独热编码、一位有效编码。其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都有它独立的寄存器位。例如:
import pandas as pd
import numpy as np
data=pd.DataFrame({'feature_1':[1,2,3,4,5],
'feature_2':['a','b','a','b','a']})
data
| feature_1 | feature_2 |
---|
0 | 1 | a |
---|
1 | 2 | b |
---|
2 | 3 | a |
---|
3 | 4 | b |
---|
4 | 5 | a |
---|
上述数据中有两个特征,其中特征二有两个类别:a和b,在进行特征处理中,如果我们将a和b量化,但是a和b又是两个不相关的类别,那么分类器就会默认a和b之间是有顺序的。这样影响。如果我们将feature_2中的a,b对应两种状态,1 代表处于这种状态,0代表不处于这种状态。那么第一个样本中的特征二可以表示为{1 0},第二样本的特征二就表示为{0,1}。于是特征二被向量化,映射到欧式空间中的一个点。相当于增加了特征,对于根据距离来进行分类的分类器,会提高分类器的鲁棒性。但是像决策树、随机森林这样的算法来就意义不大,相当于增加了树的深度。
我们可以利用pandas中的get_dummies()函数来进行one-hot编码
tmpdf=pd.get_dummies(data['feature_2'],prefix='feature_2')
tmpdf
| feature_2_a | feature_2_b |
---|
0 | 1 | 0 |
---|
1 | 0 | 1 |
---|
2 | 1 | 0 |
---|
3 | 0 | 1 |
---|
4 | 1 | 0 |
---|
data=data.join(tmpdf)
data
| feature_1 | feature_2 | feature_2_a | feature_2_b |
---|
0 | 1 | a | 1 | 0 |
---|
1 | 2 | b | 0 | 1 |
---|
2 | 3 | a | 1 | 0 |
---|
3 | 4 | b | 0 | 1 |
---|
4 | 5 | a | 1 | 0 |
---|