如何使用已保存的Scikit-learn模型查看模型中的类别?
从已保存的Scikit-learn模型中查看类别信息
别担心,哪怕训练数据集找不到了,你照样能从已保存的模型里提取出类别相关信息,下面是具体的操作方法:
1. 先加载已保存的模型
首先用joblib把你的.sav模型文件加载进来:
import joblib # 替换成你的模型文件实际路径 trained_model = joblib.load("your_trained_model.sav")
2. 提取模型的类别
普通分类模型(如LogisticRegression、RandomForestClassifier等)
绝大多数Scikit-learn分类模型在训练完成后,会自动把类别信息存在classes_属性里——这个属性是模型训练时从目标变量(y)中获取并保存的,哪怕训练集丢了也不会消失。直接访问就行:
model_classes = trained_model.classes_ print("模型包含的类别:", model_classes)
输出结果会是一个数组,比如二分类任务可能返回[0, 1],多分类任务可能返回['cat', 'dog', 'bird']这类形式。
如果模型是Pipeline(流水线)
如果你的模型是用Pipeline封装的(比如包含了特征工程+分类器的完整流程),那得先定位到流水线里的最后一步分类器组件,再访问它的classes_属性:
from sklearn.pipeline import Pipeline if isinstance(trained_model, Pipeline): # 两种方式获取最后一步的分类器: # 方式1:通过索引直接取最后一步(推荐,更简便) final_classifier = trained_model[-1] # 方式2:通过组件名称获取(需要知道流水线里的组件命名) # final_classifier = trained_model.named_steps['classifier'] # 替换成你实际的组件名 model_classes = final_classifier.classes_ print("模型包含的类别:", model_classes)
注意事项
- 只有分类模型才有
classes_属性,如果你的模型是回归模型(比如LinearRegression),这个属性是不存在的——毕竟回归任务没有“类别”的概念。 - 如果是多标签分类模型(比如用
MultiOutputClassifier封装的),你需要遍历每个子分类器的classes_属性来获取每个输出的类别。
内容的提问来源于stack exchange,提问作者xScientist
相关产品推荐
相关产品推荐

