名词特征和序数特征
在分类数据时,需要区分名词特征和序数特征。序数特征可以理解为可排序的分类值。例如T恤的尺寸就是一个序数特征,因为其可以定义顺序XL>L>M。相反,名词特征不代表任何顺序,比如T恤的颜色就是一个名词特征,因为说一种颜色大与另外一种颜色是不正确的。
首先创建一个DataFrame,我们使用不同的技术来处理这些分类数据
df = pd.DataFrame([['green', 'M', 10.1, 'class2'],
['red', 'L', 13.5, 'class1'],
['blue', 'XL', 15.3, 'class2']])
df.columns = ['color', 'size', 'price', 'classlabel']
print(df)
color size price classlabel
0 green M 10.1 class1
1 red L 13.5 class2
2 blue XL 15.3 class1
新创建的DataFrame中包含一个名词(color)特征列,一个序数(size)特征列,一个数值特(price)征列,最后一列为分类标签。
映射序数特征
为确保机器学习算法能够正确的解读序数特征,需要将分类字符串转换成整数。但是找不到可以自动导出特征尺寸正确顺序的比较方便的函数,因此需要定义映射关系。
size_mapping = {
'XL' : 3,
'L' : 2,
'M' : 1
}
df['size'] = df['size'].map(size_mapping)
print(df)
color size price classlabel
0 green 1 10.1 class1
1 red 2 13.5 class2
2 blue 3 15.3 class1
如果想之后再将整型数值转换为原来的字符串类型,可以定义一个反向映射字典,然后再变换后的特征列上调用pandas的map方法来应用
inv_size_mapping = {v: k for k, v in size_mapping.items()}
df['size'] = df['size'].map(inv_size_mapping)
print(df)