Python类别变量处理

Categorical Encoding Methods

  categorical feature(类别变量)是在数据分析中十分常见的特征变量,但是在进行建模时,python不能像R那样去直接处理非数值型的变量,因此我们往往需要对这些类别变量进行一系列转换,如哑变量或是独热编码。
  在查找后发现一个开源包category_encoders,可以使用多种不同的编码技术把类别变量转换为数值型变量,并且符合sklearn模式的转换。

以下是对category_encoders使用方法的介绍:

category_encoders的下载

  在cmd使用pip或conda两种下载方式均可下载,下载命令如下:

pip install category_encoders
conda install -c conda-forge category_encoders

category_encoders的使用

All of these are fully compatible sklearn transformers, so they can be used in pipelines or in your existing scripts. Supported input formats include numpy arrays and pandas dataframes. If the cols parameter isn't passed, all columns with object or pandas categorical data type will be encoded. Please see the docs for transformer-specific configuration options.

  上述是的原文介绍,大意为"所有的这些方法都完全兼容sklearn的转换模式,因此他们呢能够直接用到管道函数或者你先前的脚本中。支持numpy数值pandas数据框的输入格式。如果没有传递cols=[...]的参数,将对对象或数据框的所有的类别型变量进行编码。"

  在使用前可以通过import category_encoders as ce加载包,并以ce.的形式调用不同的编码方法,各种不同的编码方法及对应代码如下:

  • Backward Difference Contrast
    ncoder = ce.BackwardDifferenceEncoder(cols=[...])

  • BaseN
    encoder = ce.BaseNEncoder(cols=[...])

  • Binary
    encoder = ce.BinaryEncoder(cols=[...])

  • Hashing
    encoder = ce.HashingEncoder(cols=[...])

  • Helmert Contrast
    encoder = ce.HelmertEncoder(cols=[...])

  • LeaveOneOut
    encoder = ce.LeaveOneOutEncoder(cols=[...])

  • Ordinal
    encoder = ce.OrdinalEncoder(cols=[...])

  • One-Hot
    encoder = ce.OneHotEncoder(cols=[...])

  • Polynomial Contrast
    encoder = ce.PolynomialEncoder(cols=[...])

  • Sum Contrast
    encoder = ce.SumEncoder(cols=[...])

  • Target Encoding
    encoder = ce.TargetEncoder(cols=[...])

  • Weight of Evidence
    encoder = ce.WOEEncoder(cols=[...])

  使用时在函数的cols参数中带入需要转换的列名组成的列表即可,在下面的示例中以binary encoding的方法为例,介绍了category_encoders内编码函数的使用方法。

示例

  在下列的例子中构建了一个含有G(good)和B(bad)为评分的数据框,使用category_encoders中的BinaryEncoder方法对该类别变量进行编码,下列是整个转换过程的代码实现,转换后的数据形式如下所示。

# 相关模块加载
import pandas as pd
import category_encoders as ce

# 准备数据
df = pd.DataFrame({'ID':[1,2,3,4,5,6],
                   'RATING':['G','B','G','B','B','G']})

# 使用binary编码的方式来编码类别变量
encoder = ce.BinaryEncoder(cols=['RATING']).fit(df)

# 转换数据
numeric_dataset = encoder.transform(df)

df # 转换前的数据

ID RATING
0 1 G
1 2 B
2 3 G
3 4 B
4 5 B
5 6 G

numeric_dataset # 转换后的数据

RATING_0 RATING_1 ID
0 0 1 1
1 1 0 2
2 0 1 3
3 1 0 4
4 1 0 5
5 0 1 6

  由于包含的编码方式过多,不对所有编码方法的作用和原理进行详细介绍,需要深究各个编码方法的原理的同学可阅读category_encoders在github下方的参考文献。

Escher
2018/10/30

你可能感兴趣的:(Python类别变量处理)