众所周知,当我们遇到nominal型特征时(统计学上称为定类变量),也就是用文字或字符串进行表示而无大小顺序关系的变量,有时候需要将此类定类变量转换为定量变量(数值),从而进行下一步的数据分析或挖掘。
在sklearn中,有两个非常方便的class——LabelBinarizer和MultiLabelBinarizer。
针对单个nominal型特征,可以利用LabelBinarizer可以快速进行one-hot编码,实现定类变量定量化。若存在多个nominal型特征,则使用MultiLabelBinarizer。
话不多说,看代码:
import numpy as np
# 先创建一个特征
nominal = np.array([["A"],
["B"],
["C"],
["D"]])
# 导入LabelBinarizer
from sklearn.preprocessing import LabelBinarizer
one_hot = LabelBinarizer() # 创建one-hot编码器
one_hot.fit_transform(nominal) # 对特征进行one-hot编码
# 转换前nominal
array([['A'],
['B'],
['C'],
['D']], dtype='<U1')
# 转换后结果
array([[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 1]])
三行代码解决one-hot编码,很快有没有!
对于多个nominal型特征的情况,操作也是类似的:
import numpy as np
# 创建多nominal
multi_nominal = np.array([["A","Black"],
["B","White"],
["C","Green"],
["D","Red"]])
# 导入MultiLabelBinarizer
from sklearn.preprocessing import MultiLabelBinarizer
multi_one_hot = MultiLabelBinarizer()
multi_one_hot.fit_transform(multi_nominal)
# 转换前结果
array([['A', 'Black'],
['B', 'White'],
['C', 'Green'],
['D', 'Red']], dtype='<U5')
# 转换后结果
array([[1, 0, 1, 0, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 0, 0, 1],
[0, 0, 0, 1, 0, 1, 0, 0],
[0, 0, 0, 0, 1, 0, 1, 0]])