(带有预剪枝和后剪枝)算法实现与测试

一、实验目的

 

深入理解决策树、预剪枝和后剪枝的算法原理,能够使用 Python 语言实现带有预剪枝和后剪枝的决策树算法 C4.5 算法的训练与测试,并且使用五折交叉验证算法进行模型训练与评估。

 

 

二、实验内容

 

(1)从 scikit-learn 库中加载 iris 数据集,使用留出法留出 1/3 的样本作为测试集(注

意同分布取样);

(2)使用训练集训练分类带有预剪枝和后剪枝的 C4.5 算法;

(3)使用五折交叉验证对模型性能(准确度、精度、召回率和 F1 值)进行评估和选

择;

(4)使用测试集,测试模型的性能,对测试结果进行分析,完成实验报告中实验三的

部分。

 

 

三、算法步骤、代码、及结果

   1. 算法伪代码

1. 加载iris数据集

2. 将数据集分为特征集X和目标集y

3. 使用留出法将数据集分为训练集和测试集,测试集占1/3

4. 创建决策树分类器对象,设置预剪枝参数max_depthmin_samples_split

5. 使用训练集数据训练决策树分类器

6. 使用五折交叉验证评估模型的准确度,并打印准确度分数和平均准确度

7. 使用五折交叉验证评估模型的精度、召回率和F1值,并打印这些指标

8. 使用训练好的决策树分类器对测试集进行预测

9. 输出测试集上的分类报告,包括准确度、精度、召回率和F1

10. 输出测试集上的准确度

   2. 算法主要代码

  

函数参数说明

 

load_iris(): 加载iris数据集。没有参数。

train_test_split(X, y, test_size=1/3, random_state=42): 将数据集分为训练集和测试集。test_size参数指定测试集的比例,random_state参数用于确保每次分割的一致性。

DecisionTreeClassifier(criterion="gini", max_depth=3, min_samples_split=5, random_state=42): 创建决策树分类器。criterion参数指定分裂质量的衡量标准,max_depth参数限制树的最大深度,min_samples_split参数限制分裂内部节点所需的最小样本数,random_state参数用于确保每次训练的一致性。

fit(X_train, y_train): 训练决策树模型。X_trainy_train分别是训练集的特征和目标。

cross_val_score(clf, X_train, y_train, cv=5, scoring='accuracy'): 使用五折交叉验证评估模型性能。cv参数指定交叉验证的折数,scoring参数指定评分标准。

predict(X_test): 使用训练好的模型对测试集进行预测。X_test是测试集的特征。

classification_report(y_test, y_pred): 输出分类报告,包括准确度、精度、召回率和F1值。y_test是测试集的真实目标,y_pred是预测的目标。

accuracy_score(y_test, y_pred): 计算准确度。y_test是测试集的真实目标,y_pred是预测的目标。

 

 

3. 训练结果截图(包括:准确率、精度(查准率)、召回率(查全率)、F1

 

 

 

 

四、实验结果分析

1. 测试结果截图(包括:准确率、精度(查准率)、召回率(查全率)、F1

 

 

2. 对比分析

 C4.5决策树:使用信息增益比作为分裂标准,带有预剪枝和后剪枝,通常可以防止过拟合,提高模型的泛化能力。

ID3决策树:使用信息增益作为分裂标准,通常可以捕捉到更多的特征交互,但可能导致过拟合。

随机森林:集成学习方法,使用多个决策树进行分类,通常具有较高的准确度和稳定性,但计算成本较高。

posted @ 2024-11-20 10:04  艾鑫4646  阅读(26)  评论(0编辑  收藏  举报