如何在Python中逆向转换标签编码特征

考虑以下我正在尝试进行预测的示例表格

enter image description here

如你所见,我混合使用了数值特征(Num1 & Num2)和分类特征(Cat1 & Cat2)来预测一个值,并且我使用随机森林回归来实现这一点

在读取文件后,我使用LabelEncoder将分类特征转换为数值特征,像这样

category_col =['Cat1', 'Cat2'] labelEncoder = preprocessing.LabelEncoder()# 创建每个分类标签的数值映射mapping_dict={}for col in category_col:    df[col] = labelEncoder.fit_transform(df[col])    le_name_mapping = dict(zip(labelEncoder.classes_, labelEncoder.transform(labelEncoder.classes_)))    mapping_dict[col]=le_name_mapping

转换完成后,我将数据框分割成训练集和测试集,并进行预测,像这样

train_features, test_features, train_labels, test_labels = train_test_split(df, labels, test_size = 0.30)rf = RandomForestRegressor(n_estimators = 1000)rf.fit(train_features, train_labels)predictions = rf.predict(test_features)

我的问题是,如何将Cat1和Cat2的数值转换回原始分类,以便我可以像这样导出预测结果

enter image description here

我知道需要使用labelEncoder.inverse_transform,但是我似乎无法正确使用语法来恢复分类文本以匹配结果。

任何帮助都将不胜感激!


回答:

基于你已有的代码的快速解决方案:

# 反转你创建的映射字典inv_mapping_dict = {cat: {v: k for k, v in map_dict.items()} for cat, map_dict in mapping_dict.items()}# 假设`predictions`是你得到的数据框。# 使用反转的映射字典替换预测结果。predictions.replace(inv_mapping_dict)

对于一种更优雅的实现方式,你也可以在创建初始映射字典时参考这里的答案:

在scikit-learn中跨多个列进行标签编码

你可以创建一个跨列的LabelEncoders字典,然后在开始和结束时一次性对所有列应用fit和inverse操作,而不是使用for循环在你的分类列上创建映射字典。

Related Posts

在使用k近邻算法时,有没有办法获取被使用的“邻居”?

我想找到一种方法来确定在我的knn算法中实际使用了哪些…

Theano在Google Colab上无法启用GPU支持

我在尝试使用Theano库训练一个模型。由于我的电脑内…

准确性评分似乎有误

这里是代码: from sklearn.metrics…

Keras Functional API: “错误检查输入时:期望input_1具有4个维度,但得到形状为(X, Y)的数组”

我在尝试使用Keras的fit_generator来训…

如何使用sklearn.datasets.make_classification在指定范围内生成合成数据?

我想为分类问题创建合成数据。我使用了sklearn.d…

如何处理预测时不在训练集中的标签

已关闭。 此问题与编程或软件开发无关。目前不接受回答。…

发表回复

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