如何在编码分类变量后跟踪列?

我想知道在对数据集进行预处理后,如何跟踪原始数据集的列?

在下面的代码中,df_columns 会告诉我 df_array 中的列 0A,列 1B,以此类推…

然而,一旦我对分类列 B 进行编码,df_columns 就不再适用于跟踪 df_dummies

解决方案应该不受分类列位置的影响,无论是 ABC 还是 D。我可以做一些繁琐的工作,不断更新 df_columns 字典…但这既不优雅也不“Pythonic”

此外…如何跟踪分类变量的含义?{0,0,1} 表示猫,{0,1,0} 表示狗,等等?

附注 – 我知道虚拟变量陷阱,在实际使用它来训练模型时,我会使用 df_dummies[:,1:]


回答:

你能确认未来的数据集是否会继续拥有相同的列名吗?如果我正确理解了你的问题,你所需要做的就是保存原始数据框中的 df_columns,并用它来重新索引你的新数据框。

new_df_reindexed = new_df[df_columns]

为了回答你的其他问题,你可以使用 pandas 的 get_dummies() 函数对数据进行独热编码。使用 drop_first 参数来删除生成的一个列值,以避免虚拟变量陷阱。同时,保存独热编码数据框的列列表。

为了确保你的新/测试/保留数据集具有与模型训练时相同的列定义,

  • 首先使用 get_dummies() 对新数据集进行独热编码。
  • 使用 pandas 的 reindex 函数,将新数据框调整为与模型训练时使用的结构相同 – df.reindex(columns=train_one_hot_encode_col_list, axis="columns")
  • 上述操作将为训练数据集中存在的但不在新数据集分类列中的分类列值创建虚拟变量列。
  • 最后,使用上述方法删除新数据集中不存在于旧数据集中的任何列 – test_df_reindexed = test_df_onehotencode[train_one_hot_encode_col_list]

如果你遵循这些步骤,你可以完全依赖原始列名列表,而不需要跟踪列位置或分类值定义。

我还建议你阅读以下内容以供进一步参考:Pandas 中的独热编码 – https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.get_dummies.html列重新索引 – https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.reindex.html

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中创建了一个多类分类项目。该项目可以对…

发表回复

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