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

使用DecisionTreeClassifier可视化决策树时遭遇NotFittedError问题求助

解决DecisionTreeClassifier出现NotFittedError的问题

问题分析

你遇到的sklearn.exceptions.NotFittedError错误,核心诱因如下:

  1. 代码中调用了DT_model.print_tree()——DecisionTreeClassifier类不存在该方法,这会直接触发报错,中断后续代码执行,导致模型拟合后的可视化逻辑无法运行。
  2. 目标变量Y以二维DataFrame格式传入,sklearn分类模型的目标变量通常要求为一维数组,格式不匹配可能导致模型拟合不彻底。
  3. 预测时输入的data维度不符合要求,可能引发异常导致模型状态异常。
  4. class_names参数传入的是列名而非实际类别标签,虽不直接引发拟合错误,但会影响可视化效果,也可能间接导致模型相关异常。

修正后的代码

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier, plot_tree
import matplotlib.pyplot as plt

# 读取数据集
datapisang = pd.read_csv('DataModusdiperbaiki.csv') 
X = datapisang[['ModusH']] 
# 将目标变量转为一维数组,适配sklearn分类模型要求
Y = datapisang['Index'].values.ravel()  

# 划分训练测试集,添加random_state保证结果可复现
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, random_state=42) 

# 初始化并拟合模型
DT_model = DecisionTreeClassifier() 
DT_model.fit(X_train, Y_train) 

# 修正预测输入格式:确保为二维数组,与训练数据维度匹配
Modus_citra =  # 替换为你的图像Modus实际数值
hasilprediksi = DT_model.predict([[Modus_citra]]) 

# 定义特征名和实际类别名(类别名需根据Index列的真实取值调整)
fn = ['ModusH'] 
# 示例:若Index取值为0、1、2,对应标签改为你的业务场景名称
cn = ['正常', '轻度异常', '重度异常']  

# 可视化决策树
fig, axes = plt.subplots(nrows=1, ncols=1, figsize=(4,4), dpi=300)
plot_tree(DT_model,
          feature_names=fn, 
          class_names=cn,
          filled=True)

fig.savefig('imagename.png')
plt.show()

关键修正点说明

  • 移除无效方法调用:直接删除DT_model.print_tree(),该方法不属于DecisionTreeClassifier的API。
  • 调整目标变量格式:用values.ravel()将二维DataFrame转为一维数组,满足sklearn分类模型的输入规范。
  • 修正预测输入维度:predict()要求输入为二维数组,因此将[data]改为[[Modus_citra]],与训练数据的维度保持一致。
  • 规范类别名称参数:传入实际的类别标签字符串列表,而非列名,让可视化结果更具可读性。
  • 添加随机种子:在train_test_split中加入random_state,保证数据划分结果可复现,便于调试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 14:50:33