最近复习一些书,记录一下。在特征工程中,数据集经常会出现分类变量,这时候的分类变量可能是字符型,通常不能直接用于训练模型,这时需要对分类变量进行编码,用编码后的结果代入训练模型。下面以房子朝向为例:
import pandas as pd
df = pd.DataFrame({'房子编号':[1, 2, 3, 4, 5],
'朝向':['东', '南', '西', '北', '南']})
df
这里介绍三种常见的编码方式,直接编数字没有放进来。这三种分别是 one-hot 编码、虚拟编码、效果编码。编码方式可以从 one-hot 编码开始,也就是对于一个有
n
n
n 个种类的分类变量,通过
0
,
1
0,1
0,1 构造出
n
n
n 个特征,对应特征就用
1
1
1 表示,其余特征用
0
0
0 表示;虚拟编码就是用
n
−
1
n-1
n−1 列表示
n
n
n 个特征,相比于 one-hot 编码,这里有一个类别会用全
0
0
0 来表示;效果编码相比于虚拟编码,就是将全
0
0
0 表示的类别用全
−
1
-1
−1 表示。
编码方式 | n n n 个类别的特征数 | 特点 |
---|---|---|
one-hot | n n n | 每一类都有 n − 1 n-1 n−1 个 0 0 0 和 1 1 1 个 1 1 1 |
虚拟编码 | n − 1 n-1 n−1 | 其中一类全是 0 0 0 |
效果编码 | n − 1 n-1 n−1 | 其中一类全是 − 1 -1 −1 |
数值编码 | 1 1 1 | 直接给类别标序号,无实际意义 |
1. one-hot 编码
df_one_hot = pd.get_dummies(df, columns=['朝向'])
df_one_hot
2. 虚拟编码
df_xn = pd.get_dummies(df, columns=['朝向'], drop_first=True)
df_xn
文章来源:https://www.toymoban.com/news/detail-432781.html
3. 效果编码
df_xg = df_xn.copy().astype('int')
df_xg.iloc[0,1:4] = -1.0
df_xg
参考书籍:
【1】爱丽丝
⋅
\cdot
⋅郑,阿曼达
⋅
\cdot
⋅卡萨丽.《精通特征工程》文章来源地址https://www.toymoban.com/news/detail-432781.html
到了这里,关于常见三种编码方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!