-
label encoding在某些情况下很有用,但是场景限制很多。比如有一列 [dog,cat,dog,mouse,cat],我们把其转换为[1,2,1,3,2]。这里就产生了一个奇怪的现象:dog和mouse的平均值是cat。而且像decision tree,random forest和xgboost这种算法能处理好这种转换,而且相比转换前,所需要的内存空间小一点。
-
one hot encoding的优点就是它的值只有0/1,不同的类型存储在垂直的空间。缺点就是,当类别的数量很多时,特征空间会变得非常大。
from sklearn.preprocessing import OneHotEncoder
enc = OneHotEncoder(handle_unknown='ignore')
enc.fit(expression2)
y=enc.transform(expression2)
#复原
index = np.argmax(y, axis=1)
- dummy encoding与one hot encoding类似,区别是维度少了一个。最后一个的编码为【0000000】
pd.get_dummies(his_traindata['his_overdue'], drop_first=True,prefix='his_overdue')
- 多标签 MultiLabelBinarizer
from sklearn.preprocessing import MultiLabelBinarizer
one_hot = MultiLabelBinarizer()
# One-hot encode data
columns= one_hot.classes_
genre=np.array(one_hot.fit_transform(movie["genre"]))#movie["genre"]是二维列表