将二进制值数据转换为布尔值还是一个热值?

数据挖掘 Python 机器学习模型 编码 一热编码
2022-02-15 21:32:03

我正在处理一个包含多个包含二进制变量的列(特征)的数据集,例如,包含“男性”和“女性”的性别特征。

我想将一些监督学习模型应用于我的问题,并且将这些特征转换为数值很方便。我正在考虑两种方法来做到这一点:

  1. 转换为布尔值或整数:一种选择是将 'male' 转换为 True 或 1,将 'female' 转换为 False 或 0。这样做的风险是我在特征上引入了人为的顺序,一个在原始字符串数据。

  2. 使用一种热编码:根据特征值将每个二进制特征转换为包含 0 或 1 的两个新特征。这不会引入先前方法的顺序问题。

使用一种热编码通常更好吗?使用选项 1 是否安全,并且不必担心使用由于数据转换而引入的任何人工排序的 ML 模型?

1个回答

用两列对单个二进制变量进行编码几乎没有用处。原因是其中一列(等于 0,1)足以描述二进制内容。第二列只是另一列的线性组合,当第一列等于 1 时,第二列必须等于 0,反之亦然。所以第二列的信息是多余的。拥有这样两个(完全相关的)列甚至可能是有害的。

一个变量 (0,1) 区分组的情况:

作为“虚拟变量”的二进制编码通常用作“对比度”。你是对的,在这种类型的编码中有某种“顺序”。但是,顺序仅在对比方面很重要(“1”与“非 1”)。考虑一个具有两个“虚拟编码”组的简单线性回归。回想一下,只有截距项(或附加虚拟变量)的线性回归简单地给出了y.

df = data.frame(y=c(9,10,11,19,20,21),x=c(0,0,0,1,1,1))
summary(lm(y~x,data=df))

很容易看出,对于组x=0, 的平均值y=(9,10,11)将会10和团体x=1平均值是20. 线性回归y=β0+β1x将产生:

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  10.0000     0.5774   17.32 6.52e-05 ***
x            10.0000     0.8165   12.25 0.000255 ***

所以组的平均值x=010(截距)和组的平均值x=120(截距 + 系数x1[假人])。

第 0 组:y=10+100=10

第一组:y=10+101=20

现在,当您反转编码时(更改组的 0,1 指示符):

df = data.frame(y=c(9,10,11,19,20,21),x=c(1,1,1,0,0,0))
summary(lm(y~x,data=df))

结果将是:

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  20.0000     0.5774   34.64 4.14e-06 ***
x           -10.0000     0.8165  -12.25 0.000255 ***

第 0 组:y=20100=20

第一组:y=20101=10

所以只是“逆转”。现在,平均值为 20 的组是参考,另一组的平均值针对该参考定义为y=20101.

因此,“顺序”(编码 0,1 的方式)在这里有所不同,在一种情况下可以描述为“比另一组多 10”,在另一种情况下可以描述为“比另一组少 10”

然而,在预测模型中,这种“顺序”没有或几乎没有作用。仅当您想直接解释估计的系数时才重要。

具有两个变量 (0,1) 的案例- 每组一个:

df = data.frame(y=c(9,10,11,19,20,21),g0=c(1,1,1,0,0,0), g1=c(0,0,0,1,1,1))
summary(lm(y~g0+g1,data=df))

结果将是:

Coefficients: (1 not defined because of singularities)
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  20.0000     0.5774   34.64 4.14e-06 ***
g0          -10.0000     0.8165  -12.25 0.000255 ***
g1                NA         NA      NA       NA 

因此,由于完美共线性, “指标”之一被删除g1,g2. 所含信息g2是多余的,不能被线性回归消化。所以在这里它是“有害的”g1g2同时在模型中。

它可能有用g1g2(同时)在随机森林等模型中,因为这些模型的计算方式(完美共线性不一定是问题)。然而,这些信息通常不会带来“新的见解”(因为g2已经存在于g1反之亦然)。然而,它可能会导致“混乱”。