如何在Python中把分类特征转换为数字特征

  • Post category:Python

在机器学习和数据分析中,经常会遇到需要将分类特征转换成数字特征的情况。这里提供几种常见的方法,可以帮助在Python中将分类特征转换成数字特征。

方法1:One-hot编码

One-hot编码是将离散型特征转成连续型特征最常用且最容易理解的方式。它的基本思想是将离散型特征的每个取值,都转换成一个新的特征,并赋值为0或1,表示原始特征是否具有该取值。比如,对于一个 “color” 特征,它有3个可能的取值:”red”、”green”、”blue”,那么用 One-hot 编码就可以把这个特征变成一个拥有3个值 的特征集,例如 [1,0,0] 表示 “red”、[0,1,0] 表示 “green”、[0,0,1] 表示 “blue”。

具体实现方法使用scikit-learn库中的OneHotEncoder函数:

from sklearn.preprocessing import OneHotEncoder
enc = OneHotEncoder(handle_unknown='ignore')
X = [['Male', 1], ['Female', 3], ['Female', 2]]
enc.fit(X)
enc.transform([['Female', 1], ['Male', 4]]).toarray()

结果:

array([[0., 1., 1., 0., 0.],
   [1., 0., 0., 0., 1.]])

其中,左起第1,3,4列为性别的one-hot编码(Female变成了[0,1],Male变成了[1,0]);左起第2,5列为数值化的特征。

方法2:映射编码

另一种将分类特征转换成数字特征的方法是映射编码。它的基本思想是将每个可能的取值逐一映射成一个整数,例如用 {‘red’: 1, ‘green’: 2, ‘blue’: 3} 记录一个 “color” 特征的取值。

实现代码如下:

color_mapping = {
    'red': 1,
    'green': 2,
    'blue': 3
}
df['color_code'] = df['color'].map(color_mapping)

其中,左式为最终新建的一列 ‘color_code’,右式将原始特征 ‘color’ 依照已定义的映射方案,从而生成数字型新特征。

这种方法常常用于类似性别这样的特征。

综上,将分类特征转换成数字特征可以使用One-hot编码或映射编码,两者实现方式、应用场景不同,具体根据实际业务需求选择合适方法。