特征向量化之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 |
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 |
1 |
1 | 1 |
2 | 1 |
3 | 1 |
4 | 1 |
# 添加進資料集
data=data.join(tmpdf)
data
feature_1 | feature_2 | feature_2_a | feature_2_b |
1 | a | 1 |
1 | 2 | b | 1 |
2 | 3 | a | 1 |
3 | 4 | b | 1 |
4 | 5 | a | 1 |