目标编码

用 Python 赢下 Kaggle 竞赛

Yauhen Babakhin

Kaggle Grandmaster

高基数分类特征

 

  • 标签编码器为每个类别提供唯一数字
  • 独热编码器为每个类别值创建新特征
  • 目标编码来帮忙!
用 Python 赢下 Kaggle 竞赛

均值目标编码

训练ID 分类型 目标
1 A 1
2 B 0
3 B 0
4 A 1
5 B 0
6 A 0
7 B 1
测试ID 分类型 目标
10 A ?
11 A ?
12 B ?
13 A ?
用 Python 赢下 Kaggle 竞赛

均值目标编码

 

  1. 在训练集上计算均值,应用到测试集
  2. 将训练集分为K折。在(K-1)折上计算均值,应用到第K折
  3. 将均值目标编码特征加入模型
用 Python 赢下 Kaggle 竞赛

在训练集上计算均值

训练ID 分类型 目标
1 A 1
2 B 0
3 B 0
4 A 1
5 B 0
6 A 0
7 B 1
用 Python 赢下 Kaggle 竞赛

在训练集上计算均值

训练ID 分类型 目标
1 A 1
2 B 0
3 B 0
4 A 1
5 B 0
6 A 0
7 B 1
用 Python 赢下 Kaggle 竞赛

在训练集上计算均值

训练ID 分类型 目标
1 A 1
2 B 0
3 B 0
4 A 1
5 B 0
6 A 0
7 B 1
用 Python 赢下 Kaggle 竞赛

测试集编码

测试ID 分类型 目标 均值编码
10 A ? 0.66
11 A ? 0.66
12 B ? 0.25
13 A ? 0.66
用 Python 赢下 Kaggle 竞赛

使用折外进行训练集编码

训练ID 分类型 目标
1 A 1 1
2 B 0 1
3 B 0 1
4 A 1 1
5 B 0 2
6 A 0 2
7 B 1 2
用 Python 赢下 Kaggle 竞赛

使用折外进行训练集编码

训练ID 分类型 目标 均值编码
1 A 1 1
2 B 0 1
3 B 0 1
4 A 1 1
5 B 0 2
6 A 0 2
7 B 1 2
用 Python 赢下 Kaggle 竞赛

使用折外进行训练集编码

训练ID 分类型 目标 均值编码
1 A 1 1 0
2 B 0 1 0.5
3 B 0 1 0.5
4 A 1 1 0
5 B 0 2
6 A 0 2
7 B 1 2
用 Python 赢下 Kaggle 竞赛

使用折外进行训练集编码

训练ID 分类型 目标 均值编码
1 A 1 1 0
2 B 0 1 0.5
3 B 0 1 0.5
4 A 1 1 0
5 B 0 2
6 A 0 2
7 B 1 2
用 Python 赢下 Kaggle 竞赛

使用折外进行训练集编码

训练ID 分类型 目标 均值编码
1 A 1 1 0
2 B 0 1 0.5
3 B 0 1 0.5
4 A 1 1 0
5 B 0 2 0
6 A 0 2 1
7 B 1 2 0
用 Python 赢下 Kaggle 竞赛

实践指南

用 Python 赢下 Kaggle 竞赛

实践指南

平滑

$$mean\_enc_i = \frac{target\_sum_i}{n_i}$$

$$smoothed\_mean\_enc_i = \frac{target\_sum_i + \alpha*global\_mean}{n_i + \alpha}$$

$$\alpha \in [5; 10]$$

用 Python 赢下 Kaggle 竞赛

实践指南

平滑

$$mean\_enc_i = \frac{target\_sum_i}{n_i}$$

$$smoothed\_mean\_enc_i = \frac{target\_sum_i + \alpha*global\_mean}{n_i + \alpha}$$

$$\alpha \in [5; 10]$$

新类别

  • 测试集中的新类别用global_mean填充
用 Python 赢下 Kaggle 竞赛

实践指南

 

训练ID 分类型 目标
1 A 1
2 B 0
3 B 0
4 A 0
5 B 1

 

测试ID 分类型 目标 均值编码
10 A ? 0.43
11 B ? 0.38
12 C ? 0.40
用 Python 赢下 Kaggle 竞赛

¡Vamos a practicar!

用 Python 赢下 Kaggle 竞赛

Preparing Video For Download...