特征编码
由于机器学习算法都是在矩阵上执行线性代数计算,所以参加计算的特征必须是数值型的,对于非数值型的特征需要进行编码处理。对于离散型数据的编码,我们通常会使用两种方式来实现,分别是标签编码
和独热编码
标签编码
将类别型特征从字符串转换为数字
特点:
- 解决了分类编码的问题,可以自由定义量化数字
- 数值本身没有任何含义,仅是标识或者排序的作用
- 可解释性比较差
适用范围:
- 对于定序类型的数据,使用标签编码更好,虽然定序类型也属于分类,但是其有排序逻辑
- 对数值大小不敏感的模型(如树模型),建议使用标签编码
方式一:map 或 replace
import pandas as pd
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
from sklearn.feature_extraction import DictVectorizer
df = pd.DataFrame([
['green', 'M', 10.1, 'class1'],
['red', 'L', 13.5, 'class2'],
['blue', 'XL', 15.3, 'class1']])
df.columns = ['color', 'size', 'prize', 'class label']
df
class_mapping = {
label:idx for idx,label in enumerate(set(df['class label']))}
df['class label'] = df['class label'].map(class_mapping)
df
size_mapping = {
'XL': 3,
'L': 2,
'M': 1}
df['size'] = df['size'].map(size_mapping)
df
color_mapping = {
'green': 1