You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Scikit-learn的分类模型预测值转文本的替代方法问询

替代反转字典映射的标签解码方案

嘿,你当前手动构建反转字典来还原预测标签的做法很直观,不过确实有几个更简洁、更贴合机器学习工具链的替代方法,分享给你:

1. 用sklearn.preprocessing.LabelEncoder(最推荐)

Scikit-learn自带的LabelEncoder就是专门处理标签编码和解码的工具,自带inverse_transform方法,完全省去手动构建反转字典的步骤。

修改你的完整代码如下:

import matplotlib.pyplot as plt 
import pandas as pd 
from sklearn.model_selection import train_test_split 
from sklearn.naive_bayes import MultinomialNB 
import seaborn as sns 
from sklearn.feature_extraction.text import CountVectorizer
# 新增LabelEncoder导入
from sklearn.preprocessing import LabelEncoder

vect=CountVectorizer(min_df=1) 
df=pd.read_excel('Test_data.xlsx',sheet_name='Test') 
dff=pd.read_excel('Data_input.xlsx',sheet_name='Complaints') 
corpus=df["Complaint Description"] 
vectorizer=CountVectorizer(min_df=1) 
X=vectorizer.fit_transform(corpus).toarray() 
print(X.shape) 

# 替换原有的harms_dict和results构建逻辑
le = LabelEncoder()
results = le.fit_transform(df["Reported Harms"])

x_train,x_test,y_train,y_test=train_test_split(X,results,test_size=1,random_state=1,) 
clf=MultinomialNB() 
clf.fit(x_train,y_train) 
clf.score(x_test,y_test) 

vec_text=vectorizer.transform(dff["Complaint Description"]).toarray() 
ids=dff["Complaint Description"] 
# 直接用inverse_transform还原标签
dff['prediction'] = le.inverse_transform(clf.predict(vec_text))

s=dff['prediction'].value_counts() 
sns.barplot(x=s.index,y=s.values) 
writer = pd.ExcelWriter('Legacy_list.xlsx') 
dff.to_excel(writer, 'Complaints edit',index=False) 
writer.save()

为什么推荐这个?
LabelEncoder会自动维护标签与数值的对应关系,编码和解码逻辑完全封装,避免手动构建字典可能出现的错误(比如键值对遗漏、顺序混乱),而且和Scikit-learn的其他组件兼容性更好。

2. 利用pandas.Categorical类型

如果你习惯用Pandas处理数据,可以把标签列转为Categorical类型,它自带的codes属性就是编码后的数值,categories属性则是原始标签集合,解码时直接索引即可。

代码示例片段:

# 把Reported Harms转为分类类型
df["Reported Harms"] = pd.Categorical(df["Reported Harms"])
# 获取编码后的数值
results = df["Reported Harms"].cat.codes

# 预测后还原标签
predicted_codes = clf.predict(vec_text)
dff['prediction'] = df["Reported Harms"].cat.categories[predicted_codes]

适用场景:
如果你的数据预处理阶段已经在使用Pandas的分类变量功能,这种方法能让标签管理更统一,后续做数据分析时也能保留分类信息。

3. 手动反转字典的优化写法(保留原有逻辑)

如果你还是偏好手动映射的方式,可以给反转字典加个容错机制,避免模型预测出意外数值时出错:

# 原有的反转字典构建
inv_map={v:k for k, v in harms_dict.items()}
# 用get方法处理未知键,返回默认值
dff["prediction"] = dff["prediction"].map(lambda x: inv_map.get(x, "Unknown"))

优点:
保留了自定义映射的灵活性,同时通过get方法提升了代码的鲁棒性,万一出现不在原始标签中的预测值(虽然分类模型一般不会出现),会返回"Unknown"而不是报错。


内容的提问来源于stack exchange,提问作者Bjc51192

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:11:33