决策树模型构建与优化-解决过拟合问题
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 著作权归作者所有。请勿转载和采集!