def build_clf1(): global data, clf, X_train, X_test, Y_train, Y_test # 对用户输入值的合法性判断 if data is None: messagebox.showerror('错误', '请先读取数据!') return

# 创建决策树模型
clf = DecisionTreeClassifier(max_depth=5, min_samples_leaf=10)

# 训练模型
clf.fit(X_train, Y_train)
Y_pred = clf.predict(X_test)
accuracy = accuracy_score(Y_test, Y_pred)
precision = precision_score(Y_test, Y_pred, average='macro')
recall = recall_score(Y_test, Y_pred, average='macro')
f1 = f1_score(Y_test, Y_pred, average='macro')

messagebox.showinfo('提示', f'决策树模型构建成功!

模型预测准确率:{accuracy:.4%} 模型精确度:{precision:.4%} 模型召回率:{recall:.4%} 模型F1值:{f1:.4%}')

# 使用交叉验证判断模型是否过拟合
from sklearn.model_selection import cross_val_score

scores_train = cross_val_score(clf, X_train, Y_train, cv=5)
scores_test = cross_val_score(clf, X_test, Y_test, cv=5)

mean_score_train = scores_train.mean()
mean_score_test = scores_test.mean()

if mean_score_train > mean_score_test:
    messagebox.showwarning('警告', '模型可能存在过拟合现象!')
else:
    messagebox.showinfo('提示', '模型没有过拟合现象。')

要判断模型是否过拟合,可以通过比较模型在训练集和测试集上的表现来确定。如果模型在训练集上表现很好,但在测试集上表现差,就说明模型过拟合了。

可以使用交叉验证来评估模型的性能。具体来说,可以将数据集分成几个部分,每次使用其中一部分作为测试集,其余部分作为训练集,然后计算模型在测试集上的表现。重复这个过程多次,每次使用不同的测试集和训练集,最后将所有测试集的表现取平均值作为模型的性能评估指标。

上面的代码使用 cross_val_score 函数进行交叉验证,并计算模型在训练集和测试集上的平均分数。如果训练集上的分数明显高于测试集上的分数,则说明模型可能过拟合了。

建议:

  • 调整模型参数,例如树的深度、叶子节点数量等,以减少过拟合现象。
  • 使用正则化技术来限制模型的复杂度。
  • 增加训练数据量,以提高模型的泛化能力。
Python 决策树模型构建与过拟合判断

原文地址: http://www.cveoy.top/t/topic/f1gh 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录