This tutorial讨论了有关BackWard差异编码的信息:
- 后向差异编码
该技术属于分类特征的对比度编码系统。 K个类别或级别的特征通常以K-1个虚拟变量序列的形式进入回归。在后向差分编码中,将一个级别的因变量的平均值与先前级别的因变量的平均值进行比较。这种类型的编码对于标称或有序变量可能很有用。
如果您想学习其他对比编码方法,可以查看此资源。
代码结构与category_encoders库中的任何方法几乎相同,只是这次您将从其中调用BackwardDifferenceEncoder
如前所述,它将把k个类别转换为k-1个二进制类别。
我在其数据库上使用了此方法。对于“载体”,我们有11个类别,编码后收到的也是11个类别。它不应该是10个类别或10列的二进制值吗?
df_flights = pd.read_csv('https://raw.githubusercontent.com/ismayc/pnwflights14/master/data/flights.csv')
df_flights.head()
df_flights['carrier'].unique()
所以我们有11个唯一的类别。
!pip install category_encoders
import category_encoders as ce
cat_df_flights = df_flights.select_dtypes(include=['object']).copy()
encoder = ce.BackwardDifferenceEncoder(cols=['carrier'])
df_bd = encoder.fit_transform(cat_df_flights)
df_bd.head()
结果也是11列二进制数据,但根据本教程所说,应该是10列...
答案 0 :(得分:1)
我不确定,但是可能是因为您可以推断剩余的课程。例如,假设您有两种颜色{red, blue}
,并且想要对该变量进行编码。一种选择是创建两列,一列用于红色,另一列用于蓝色,但是您也可以仅创建n - 1
列,例如“ red”;如果值为1,则样本为红色,否则为蓝色。
答案 1 :(得分:0)
如果您查看编码的输出,则正确的是有11列。但是,这些列中只有10个包含新的信息,这些信息基于载体列中类别之间的比较。第11列“拦截”只是一系列的1,对您的建模没有影响。
关于为什么存在第11列,我不确定。遵循后向差异编码表的逻辑,也许可以将其视为将最高级别与下一级别进行比较。假设该列中的每个值都属于最高级别或以下,那么此比较中编码列的所有值将为1(其他值(如果存在)将为0)。