大多数机器学习算法不能识别类别数据,要求数据必须是数值型的,故作为一名合格的MLer必须对相应转换方法有所了解。
以性别为例,性别特征具有两个选项:男或女,机器学习模型搞不懂何为“男 、女”,但清楚何为“1、0”。直观的做法,将“男、女”对“1、0”进行映射,即 sex∈(0,1) ,但这种做法存在一个明显的缺陷,即“0 、1”具有大小可比性,而实际中sex只是一个标称属性,不应具有“数学”意义,故比较合理的做法是将sex特征拆成两个特征,“是否男”与“是否女”。不扯淡了,进入正题,如果一个用户的sex为男,则应表示为(1,0),否则表示为(0,1)。
总结:分类数据离散化的核心就是将m个取值的类别属性转化为m个特征,如果具有某个属性,则代表该属性的特征表示为1,其他为0。
Python实现,借助sklearn包中的LabelEncoder与OneHotEncoder
LabelEncoder负责将类别数据标签化,如”女”->0,“男”->1
OneHotEncoder负责将标签属性离散化,如将一个属性拆成俩特征,0->(0,1), 1->(1,0)
代码如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
参考
[1]. LabelEncoder.
http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.LabelEncoder.html
[2]. OneHotEncoder.
http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html
-
顶
-
踩