Python学习笔记:实现哑变量编码

1.虚拟变量

定义:虚拟变量(Dummy Variable) 也叫哑变量,它算不上一种变量类型,确切地说,是将多分类变量转换为二分类变量的一种形式。如果数据为定类数据,比如专业、性别等,其数字仅代表类别,数字大小并没有意义,此时可以考虑引入哑变量,将不能够定量处理的变量量化,再进行分析。

2.什么情况下需要设置虚拟变量

2.1对于无序多分类变量

举一个例子,如血型,一般分为A、B、O、AB四个类型,为无序多分类变量,通常情况下在录入数据的时候,为了使数据量化,我们常会将其赋值为1、2、3、4。

从数字的角度来看,赋值为1、2、3、4后,它们是具有从小到大一定的顺序关系的,而实际上,四种血型之间并没有这种大小关系存在,它们之间应该是相互平等独立的关系。如果按照1、2、3、4赋值并带入到回归模型中是不合理的,此时我们就需要将其转化为哑变量。

2.2对于有序多分类变量

例如疾病的严重程度,一般分为轻、中、重度,可认为是有序多分类变量,通常情况下我们也常会将其赋值为1、2、3(等距)或1、2、4(等比)等形式,通过由小到大的数字关系,来体现疾病严重程度之间一定的等级关系。

但需要注意的是,一旦赋值为上述等距或等比的数值形式,这在某种程度上是认为疾病的严重程度也呈现类似的等距或等比的关系。而事实上由于疾病在临床上的复杂性,不同的严重程度之间并非是严格的等距或等比关系,因此再赋值为上述形式就显得不太合理,此时可以将其转化为哑变量进行量化。

2.3对于连续性变量

对于连续性变量,很多人认为可以直接将其带入到回归模型中即可,但有时我们还需要结合实际的临床意义,对连续性变量作适当的转换。例如年龄,以连续性变量带入模型时,其解释为年龄每增加一岁时对于因变量的影响。但往往年龄增加一岁,其效应是很微弱的,并没有太大的实际意义。

此时,我们可以将年龄这个连续性变量进行离散化,按照10岁一个年龄段进行划分,如0-10、11-20、21-30、31-40等等,将每一组赋值为1、2、3、4,此时构建模型的回归系数就可以解释为年龄每增加10岁时对因变量的影响。

以上赋值方式是基于一个前提,即年龄与因变量之间存在着一定的线性关系。但有时候可能会出现以下情况,例如在年龄段较低和较高的人群中,某种疾病的死亡率较高,而在中青年人群中,死亡率却相对较低,年龄和死亡结局之间呈现一个U字型的关系,此时再将年龄段赋值为1、2、3、4就显得不太合理了。

因此,当我们无法确定自变量和因变量之间的变化关系,将连续性自变量离散化时,可以考虑进行哑变量转换。

还有一种情况,例如将BMI按照临床诊断标准分为体重过低、正常体重、超重、肥胖等几种分类时,由于不同分类之间划分的切点是不等距的,此时赋值为1、2、3就不太符合实际情况,也可以考虑将其转化为哑变量。

3.创建虚拟变量

pandas.get_dummies

get_dummies(data,prefix=None,prefix_sep="_",dummy_na=False,columns=None,drop_first=False)

① data 要处理的DataFrame
② prefix 列名的前缀,在多个列有相同的离散项时候使用
③ prefix_sep 前缀和离散值的分隔符,默认为下划线,默认即可
④ dummy_na 是否把NA值,作为一个离散值进行处理,默认为不处理
⑤ columns 要处理的列名,如果不指定该列,那么默认处理所有列
⑥ drop_first 是否从备选项中删除第一个,建模的时候为避免共线性使用

上一篇:【python】【学习笔记七】异常处理机制


下一篇:python pyenv