对python 数据处理中的LabelEncoder 和 OneHotEncoder详解

简单来说 LabelEncoder 是对不连续的数字或者文本进行编号(连续的会是同一个编号)
分类,但有排序逻辑关系,等级上高于定类。
比如,学历分小学,初中,高中,本科,研究生,
各个类别之间存在一定的逻辑,显然研究生学历是最高的,小学最低。
这时候使用Label encoding会显得更合适,
因为自定义的数字顺序可以不破坏原有逻辑,并与这个逻辑相对应。
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
le.fit([1,5,67,100])
le.transform([1,1,100,67,5])
输出: array([0,0,3,2,1])#有顺序的

   OneHotEncoder 用于将表示分类的数据扩维:  (one-hot encoding 独热编码(哑变量))
纯分类,不排序,没有逻辑关系。比如性别分男和女,男女不存在任何逻辑关系,
我们不能说男就比女好,或者相反


from sklearn.preprocessing import OneHotEncoder
ohe = OneHotEncoder()
ohe.fit([[1],[2],[3],[4]])
ohe.transform([2],[3],[1],[4]).toarray()
输出:[ [0,1,0,0] , [0,0,1,0] , [1,0,0,0] ,[0,0,0,1] ]

One-Hot实际案例

————————————————————————————————————————

就拿上面的例子来说吧,性别特征:["男","女"],按照N位状态寄存器来对N个状态进行编码的原理,咱们处理后应该是这样的(这里只有两个特征,所以N=2):

男  =>  10

女  =>  01

祖国特征:["中国","美国,"法国"](这里N=3):

中国  =>  100

美国  =>  010

法国  =>  001

运动特征:["足球","篮球","羽毛球","乒乓球"](这里N=4):

足球  =>  1000

篮球  =>  0100

羽毛球  =>  0010

乒乓球  =>  0001

所以,当一个样本为["男","中国","乒乓球"]的时候,完整的特征数字化的结果为:

[1,0,1,0,0,0,0,0,1]

下图可能会更好理解:

https://img.mukewang.com/5b20f1b90001cc2202550045.jpg

from sklearn import preprocessing  
   
enc = preprocessing.OneHotEncoder()  
enc.fit([[0,0,3],
         [1,1,0],
         [0,2,1],
         [1,0,2]])  #这里一共有4个数据,3种特征
   
array = enc.transform([[0,1,3]]).toarray()  #这里使用一个新的数据来测试
   
print array   #  1  0 / 0  1  0 / 0  0  0  1

 

你可能感兴趣的:(#,python实用信息)