特征向量化之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