算法伪代码
BEGIN
// 1. 导入必要的库
导入 numpy 作为 np
从 sklearn 导入 datasets
从 sklearn.model_selection 导入 train_test_split, cross_val_score
从 sklearn.ensemble 导入 RandomForestClassifier
从 sklearn.metrics 导入 accuracy_score, precision_score, recall_score, f1_score
// 2. 加载 iris 数据集
iris = datasets.load_iris()
设置 X = iris.data // 特征数据
设置 y = iris.target // 真实标签
// 3. 使用留出法分割数据集 (1/3 测试集, 2/3 训练集)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=1/3, random_state=42, stratify=y)
// 4. 创建并训练随机森林分类器
rf_clf = RandomForestClassifier(random_state=42)
rf_clf.fit(X_train, y_train) // 训练模型
// 5. 使用五折交叉验证评估模型性能
cross_val_scores_accuracy = cross_val_score(rf_clf, X, y, cv=5, scoring='accuracy')
cross_val_scores_precision = cross_val_score(rf_clf, X, y, cv=5, scoring='precision_weighted')
cross_val_scores_recall = cross_val_score(rf_clf, X, y, cv=5, scoring='recall_weighted')
cross_val_scores_f1 = cross_val_score(rf_clf, X, y, cv=5, scoring='f1_weighted')
// 输出五折交叉验证结果
打印 "五折交叉验证准确度: ", cross_val_scores_accuracy.mean()
打印 "五折交叉验证精度: ", cross_val_scores_precision.mean()
打印 "五折交叉验证召回率: ", cross_val_scores_recall.mean()
打印 "五折交叉验证 F1 值: ", cross_val_scores_f1.mean()
// 6. 使用测试集进行预测
y_pred = rf_clf.predict(X_test)
// 7. 测试集性能评估
accuracy = accuracy_score(y_test, y_pred)
precision = precision_score(y_test, y_pred, average='weighted')
recall = recall_score(y_test, y_pred, average='weighted')
f1 = f1_score(y_test, y_pred, average='weighted')
// 输出测试集性能评估
打印 "测试集准确度: ", accuracy
打印 "测试集精度: ", precision
打印 "测试集召回率: ", recall
打印 "测试集 F1 值: ", f1
END
2. 算法主要代码
完整源代码\调用库方法(函数参数说明)
import numpy as np
from sklearn import datasets
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
# 1. 加载 iris 数据集
iris = datasets.load_iris()
X = iris.data # 特征数据
y = iris.target # 真实标签
# 2. 使用留出法分割数据集,1/3 的数据作为测试集,2/3 的数据作为训练集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=1/3, random_state=42, stratify=y)
# 3. 创建并训练随机森林分类器
rf_clf = RandomForestClassifier(random_state=42)
rf_clf.fit(X_train, y_train)
# 4. 使用五折交叉验证评估模型性能
cross_val_scores_accuracy = cross_val_score(rf_clf, X, y, cv=5, scoring='accuracy')
cross_val_scores_precision = cross_val_score(rf_clf, X, y, cv=5, scoring='precision_weighted')
cross_val_scores_recall = cross_val_score(rf_clf, X, y, cv=5, scoring='recall_weighted')
cross_val_scores_f1 = cross_val_score(rf_clf, X, y, cv=5, scoring='f1_weighted')
# 输出五折交叉验证结果
print(f"五折交叉验证准确度: {cross_val_scores_accuracy.mean():.4f}")
print(f"五折交叉验证精度: {cross_val_scores_precision.mean():.4f}")
print(f"五折交叉验证召回率: {cross_val_scores_recall.mean():.4f}")
print(f"五折交叉验证 F1 值: {cross_val_scores_f1.mean():.4f}")
# 5. 使用测试集进行预测
y_pred = rf_clf.predict(X_test)
# 6. 测试集性能评估
accuracy = accuracy_score(y_test, y_pred)
precision = precision_score(y_test, y_pred, average='weighted')
recall = recall_score(y_test, y_pred, average='weighted')
f1 = f1_score(y_test, y_pred, average='weighted')
# 输出测试集的性能评估
print(f"\n测试集准确度: {accuracy:.4f}")
print(f"测试集精度: {precision:.4f}")
print(f"测试集召回率: {recall:.4f}")
print(f"测试集 F1 值: {f1:.4f}")
3. 训练结果截图(包括:准确率、精度(查准率)、召回率(查全率)、F1)
四、实验结果分析
1. 测试结果截图(包括:准确率、精度(查准率)、召回率(查全率)、F1)
2. 对比分析
交叉验证结果:
五折交叉验证的多个评分结果(准确度、精度、召回率和F1值均为0.9667)显示出模型在训练集上表现良好。这表明随机森林分类器对数据的适应性和稳定性都比较强。
测试集性能:
测试集上的所有评估指标(准确度、精度、召回率和F1值均为1.0000)表明模型在未见过的数据上表现得非常好,成功识别了所有类别的样本。这通常表示模型的泛化能力很强。
模型评估的一致性:
在交叉验证中较高的一致性和在测试集上的完美表现,暗示了在此数据集上的随机森林模型能够较好地分辨不同类别的样本。
规格化性能指标:
使用 weighted 计算的精度、召回率和F1值表明模型对每个类别进行了加权,这对类别不均衡的数据集尤为重要。然而,在Iris数据集中,由于各类别样本数量相等,因此无论是加权还是非加权,最终结果都非常相似。
浙公网安备 33010602011771号