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, # 每个叶子节点最少样本数
                               min_samples_split=20, # 拆分节点所需最小样本数
                               max_features='sqrt', # 随机选择特征比例
                               ccp_alpha=0.01 # 设置剪枝系数
                              )

    # 训练模型
    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'决策树模型构建成功!\n模型预测准确率:{accuracy:.4%}\
模型精确度:{precision:.4%}\
模型召回率:{recall:.4%}\
模型F1值:{f1:.4%}')

代码说明:

这段代码构建了一个决策树模型,并通过以下参数调整来解决过拟合问题:

  • max_depth: 限制树的最大深度,防止模型过于复杂。
  • min_samples_leaf: 设置每个叶子节点最少包含的样本数,避免模型学习到过于细粒度的模式。
  • min_samples_split: 设置拆分节点所需最小样本数,与min_samples_leaf类似,防止过度拟合。
  • max_features: 限制每个节点在进行分支时随机选择特征的比例,增加随机性,降低过拟合风险。
  • ccp_alpha: 设置代价复杂度剪枝的系数,通过剪枝来简化模型,降低过拟合风险。

数据集说明:

您的数据集包含以下特征:

  • long_hair: 是否为长头发 (0/1)
  • forehead_width_cm: 前额宽度 (浮点数)
  • forehead_height_cm: 前额高度 (浮点数)
  • nose_wide: 是否为宽鼻子 (0/1)
  • nose_long: 是否为长鼻子 (0/1)
  • lips_thin: 是否为薄嘴唇 (0/1)
  • distance_nose_to_lip_long: 鼻子到嘴唇距离是否长 (0/1)
  • gender: 性别 (男性1,女性0)

您可以根据实际情况调整模型参数,并使用交叉验证等方法评估模型性能,以获得最佳结果。

决策树模型构建与优化-解决过拟合问题

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

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