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

我正在尝试对包含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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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