如何在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

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

发表回复

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