机器学习D2--Encoding:机器学习中类别变量的编码方法总结
这篇文章主要介绍一下encoding的几种类型。以下是一个最基础的分类:
什么是catergorical data
当一个数据的特征是有限的离散变量时,它分为Nominal, Ordinal and Continuous 这几个不同的种类;
为什么要进行encoding处理:
处理后可以放入
常见的encoding类型
1. Label Encoding
直观例子:
•根据数据的分类直接进行编码, 例子:classMap = {'大一':1,'大二':2,'大三':3,'大四':4}
适用情况
• 对于有固定类型,且类型之间有排序高低的离散变量
代码
• labelEncoder(sklearn), factorize (pandas)
优势
• 可以自由定义顺序
劣势
• 顺序的数值大小没有任何的含义,可以自己定义
• 自己定义的情况下,有些地方把它定义为ordinal encoding
下一步问题
• 如果想根据排列等级高级进行有序排序,可以使用怎样的方法?Ordinal Encoding
2. Ordinal Encoding
• 对于有固定类型,且类型之间有排序高低的离散变量;可以参照lable encoding
• 代码
• map in a dataframe(pandas)
• from sklearn.preprocessing import OrdinalEncoder
3. One hot Encoding
方法
• 根据离散特征值,有几种数值就建立几个特征向量,取值为(1,0,0)的情况
适用情况
• 离散特征值取值的大小没有意义的情况下
• 对于数值大小敏感的模型适用,如SVM,LR
代码
• 实现方法1: get_dummies from pandas
• 实现方法2:OneHotEncoder() from preprocessing
优势
• 不会人为引入有序性
• 让特征的距离更加合理:通过把特征向量投射到欧式空间,每个变量之间的距离是一样的,如果是3个向量的话,类比一个正方体,(1,0,0),(0,1,0),(0,0,1)
• 可以进行特征的归一化处理: 可以看做连续的特征,这样可以进行归一化处理
劣势
• 特征越多,产生的feature越多,容易sparse,导致模型的overfitting,如tree based model如果feature太多,就不适用这个方法
• Dummy variable trap
• 如果feature高度相似,容易陷入Dummy variable trap,即用过多的变量来描述类似的特征,但想解决需要前期有行业知识或经验来支撑你的推论。
4.Dummy Encoding
方法
• 和one hot encoding很相似,但是会去掉一个feature,即用N-1个feature来表示所有的离散变量,被去掉的那个用(0,0,0,0)来表示
5.Binary Encoding
方法
• 可以理解为lable encoding的变种,把数字转化为二进制的数,再根据有多少位数,把它分别转化成每一行
代码
• BinaryEncoder from category_encoders package
6.Target Encoding ----Mean Encoding
• 方法
• 这里涉及到两个因素,一个是特征向量本身,一个是target(往往是1,0的lable),通过计算一个类别中sum(target)/count(label)来算平均数,并把这个值作为计算的平均值
• 通常需要进行正则化
• 例子
•
• 优势
• kaggle比赛常用,可能效果比较好
• 既反映不同feature的特点(不同数值),也把target和lable的关系反应进去
• 不影响数据的量,且不影响机器学习效率
• 劣势
• 很难validate,必须进行cross validation
特点
• encoding的lable直接与target相关
7. Frequency Encoding
方法
• 把特征向量按照类别计数,并计算出每个类别的频率,用频率来代替特征向量的值
代码
• pandas,groupby,len(df)计算总数
优势
• 加入了频率的信息
其他还没有来得及介绍的Encoding:
8) Weight of Evidence Encoding
9) Probability Ratio Encoding
10) Hashing Encoding
11) Backward Difference Encoding
12) Leave One Out Encoding
13) James-Stein Encoding
14) M-estimator Encoding
15) Effect Encoding
16) BaseN Encoding
参考文献:
One hot Encoding
https://www.cnblogs.com/zongfa/p/9305657.html#:~:text=%E4%B8%BA%E4%BA%86%E8%A7%A3%E5%86%B3%E4%B8%8A%E8%BF%B0%E9%97%AE%E9%A2%98%EF%BC%8C%E5%85%B6%E4%B8%AD,%E5%85%B6%E4%B8%AD%E5%8F%AA%E6%9C%89%E4%B8%80%E4%BD%8D%E6%9C%89%E6%95%88%E3%80%82
Label encoding
https://zhuanlan.zhihu.com/p/42075740
other
https://towardsdatascience.com/all-about-categorical-variable-encoding-305f3361fd02
https://www.datacamp.com/community/tutorials/encoding-methodologies
https://www.analyticsvidhya.com/blog/2020/08/types-of-categorical-data-encoding/
作者:阿呆很忙
原文链接:https://www.jianshu.com/p/81b80989de62