将不同的分类变量转换为虚拟变量

我正在尝试对包含3个分类变量的数据集应用回归(使用XGBRegressor)。

X_data

severity -> values S1,S2,S3priority -> values P1,P2,P3cluster -> values a,b,c,d

y_data要预测的标签是数值

为了将所有3列转换为分类变量,我使用:

pd.get_dummies(X_data['thecolumn'],drop_first =True)

转换所有变量后,我得到了7个新列(考虑到我总是删除第一列)。在应用算法时,来自priority或cluster的列是否会被误解为severity的第三列?我可能没有理解这个概念,但我看不出如何保持引用,我担心我做得不对。


回答:

不会。来自priority或cluster的列不会被误解为severity的第三列。

关于如何保持引用的回答如下:

pandas.get_dummies中有一个参数,即drop_first,它允许你选择是否保留或删除引用(是否保留k个分类级别中的k个或k-1个虚拟变量)。

请注意,drop_first = False意味着不删除引用,并从k个分类级别中创建k个虚拟变量!你设置drop_first = True,然后它会在编码后删除引用列。

这里是关于独热编码的链接。

在你的例子中,severity有3个类别S1、S2和S3。在创建虚拟变量后,这些类别中的一个总是1,其他的是0。

对于s1,它将是[1,0,0],s2将是[0,1,0],s3将是[0,0,1]

现在如果你删除了类别s1的列。

如果severity是S1,值将是[0,0]

如果severity是S2,值将是[1,0]

如果severity是S3,值将是[0,1]。

所以这里没有信息丢失,你的模型需要处理的列少了一个。这就是为什么总是建议将drop_first参数设置为True

编辑

应用虚拟变量后,你将得到如下列:

severity_S1   severity_S2   severity_S3    1              0              0                  # 当值为S1时  0              1              0                  # 当值为S2时    0              0              1                  # 当值为S3时

pandas.get_dummies()在创建上述引用后删除第一列。所以你的数据将如下所示:

 severity_S2   severity_S3   0              0                  # 当值为S1时   1              0                  # 当值为S2时     0              1                  # 当值为S3时

对于所有这些变量,你的最终数据将如下所示:由于空间问题,我使用了简短的列名

s2  s3  p2  p3  B  C  D0   0   1   0   1  0  0     # 对于S1, P2和B的行0   1   0   1   0  1  0     # 对于S3, P3和C的行1   0   0   0   0  0  1     # 对于S2, P1和D的行1   0   0   0   0  0  0     # 对于S2, P1和A的行

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注