类别型变量label encoding方法学习

  1. 参考博客:
  2. 为什么要对类别型变量做label encoding?
  3. 各种label-encoding的技术
  4. 我的学习
    1. 对于一般情况
      1. OneHot
      2. Binary
    2. 对于high-cardinality的情况
      1. Target

参考博客:

Categorical Encoding Techniques
[Smarter Ways to Encode Categorical Data for Machine Learning](Smarter Ways to Encode Categorical Data for Machine Learning)
kaggle编码categorical feature总结

为什么要对类别型变量做label encoding?

许多机器学习的算法需要,比如KNN、SVM、XGBoost等

各种label-encoding的技术

首先我们来看一下依赖于scikit-learn的开源包Category Encoders中包含的选项:

Backward Difference Coding
BaseN
Binary
CatBoost Encoder
Hashing
Helmert Coding
James-Stein Encoder
Leave One Out
M-estimate
One Hot
Ordinal
Polynomial Coding
Sum Coding
Target Encoder
Weight of Evidence

我的学习

对于一般情况

使用机器学习常用的编码方式,比如

  • Ordinal
  • OneHot
  • Binary

OneHot

One-Hot-Encoding(独热编码)特点是有多少个不同的值就有多少个新的特征,一个特征为1,其他特征只能为0
以一般介绍独热编码的常用例子来看

1
2
3
4
5
6
7
8
9
encoder = preprocessing.OneHotEncoder()
encoder.fit([
[0, 2, 1, 12],
[1, 3, 5, 3],
[2, 3, 2, 12],
[1, 2, 4, 3]
])
encoded_vector = encoder.transform([[2, 3, 5, 3]]).toarray()
print("\n Encoded vector =", encoded_vector)
1
2
# 输出
Encoded vector = [[ 0. 0. 1. 0. 1. 0. 0. 0. 1. 1. 0.]]

如何理解?
原先有四个特征,第一个特征有0、1、2三种取值,第二个特征有2、3两种取值,以此类推第三第四个特征分别有4个、2个取值,所以新生成的编码有3+2+4+2=11个特征
因此对于high-cardinality的情况,生成的新特征维度为极大,不仅有内存占用问题,还有可能出现“维度爆炸”的情况

Binary

先将字符型label以Ordinal的方式编码,再转换为二进制形式
优点是占用空间更少,缺点是相比于OneHot的编码方式,其实牺牲了一部分信息

对于high-cardinality的情况

一个类别特征中有大量不同的值时,可以尝试使用以下编码方式

  • Target
  • LeaveOneOut
  • WeightOfEvidence
  • James-Stein
  • M-estimator
    这些方式大都应用了贝叶斯统计的思路,在编码时考虑了target的值

    Target

    不仅考虑了该类别特征的属性值$$x_i$$,还考虑了target的值$$y_i$$。
    即假设为一个C分类问题对于任何一个待编码的$$x_i$$,包括了$$x=x_i$$时target依次取C个可能值的概率,又因为$$y_i$$的的先验概率也会有影响,所以又以一定权重考虑了$$y=y_i$$的概率
    $\displaystyle f(x_i,y_i)=\lambda(n_i)P(y=y_i|x=x_i)+[1-\lambda(n_i)]P(y=y_i)$
    对于回归问题,稍微更改一下公式

$\displaystyle f(x_i,y_i)=\lambda(n_i)\frac{\sum_{x=x_i}Y}{n_i}+[1-\lambda(n_i)]\frac{\sum_{}Y}{N_{target}}$

前一部分为$$x=x_i$$均值,后一部分为训练集上所有target中$$y$$的均值
相关参数文档见doc论文链接


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 carlos@sjtu.edu.cn

目录
×

恰饭