12.10
实验八:随机森林算法实现与测试
一、实验目的
深入理解随机森林的算法原理,进而理解集成学习的意义,能够使用 Python 语言实现随机森林算法的训练与测试,并且使用五折交叉验证算法进行模型训练与评估。
二、实验内容
(1)从 scikit-learn 库中加载 iris 数据集,使用留出法留出 1/3 的样本作为测试集(注意同分布取样);
(2)使用训练集训练随机森林分类算法;
(3)使用五折交叉验证对模型性能(准确度、精度、召回率和 F1 值)进行评估和选择;
(4)使用测试集,测试模型的性能,对测试结果进行分析,完成实验报告中实验八的部分。
三、算法步骤、代码、及结果
1. 算法伪代码
开始
加载iris数据集
将数据集分为训练集和测试集(留出法,1/3作为测试集)
训练随机森林模型
使用五折交叉验证评估模型性能
使用测试集测试模型性能
输出性能指标(准确率、精度、召回率、F1值)
结束
2. 算法主要代码
完整源代码\调用库方法(函数参数说明)
# 导入必要的库
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
# 加载iris数据集
iris = load_iris()
X = iris.data
y = iris.target
# 将数据集分为训练集和测试集(留出法,1/3作为测试集)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=1/3, random_state=42)
# 训练随机森林模型
rf = RandomForestClassifier(n_estimators=100, random_state=42)
rf.fit(X_train, y_train)
# 使用五折交叉验证评估模型性能
cv_scores = cross_val_score(rf, X_train, y_train, cv=5)
# 使用训练集测试模型性能
y_train_pred = rf.predict(X_train)
# 计算训练集性能指标
train_accuracy = accuracy_score(y_train, y_train_pred)
train_precision = precision_score(y_train, y_train_pred, average='macro')
train_recall = recall_score(y_train, y_train_pred, average='macro')
train_f1 = f1_score(y_train, y_train_pred, average='macro')
# 使用测试集测试模型性能
y_test_pred = rf.predict(X_test)
# 计算测试集性能指标
test_accuracy = accuracy_score(y_test, y_test_pred)
test_precision = precision_score(y_test, y_test_pred, average='macro')
test_recall = recall_score(y_test, y_test_pred, average='macro')
test_f1 = f1_score(y_test, y_test_pred, average='macro')
# 输出性能指标
print("训练集性能指标:")
print(f"训练集准确率: {train_accuracy:.4f}")
print(f"训练集精度: {train_precision:.4f}")
print(f"训练集召回率: {train_recall:.4f}")
print(f"训练集F1值: {train_f1:.4f}")
print("\n测试集性能指标:")
print(f"测试集准确率: {test_accuracy:.4f}")
print(f"测试集精度: {test_precision:.4f}")
print(f"测试集召回率: {test_recall:.4f}")
print(f"测试集F1值: {test_f1:.4f}")
print("\n五折交叉验证平均准确率: {cv_scores.mean():.4f}")
库函数参数说明:
train_test_split: 用于将数据集分为训练集和测试集。
test_size=1/3: 测试集占总数据集的比例。
random_state=42: 随机数生成器的种子,确保结果可复现。
RandomForestClassifier: 随机森林分类器。
n_estimators=100: 森林中树的数量。
random_state=42: 随机数生成器的种子,确保结果可复现。
cross_val_score: 用于进行交叉验证。
cv=5: 交叉验证的折数。
accuracy_score, precision_score, recall_score, f1_score: 分别用于计算准确率、精度、召回率和F1值。
average='macro': 用于多分类问题,计算所有类别的平均值。
3. 训练结果截图(包括:准确率、精度(查准率)、召回率(查全率)、F1)
四、实验结果分析
1. 测试结果截图(包括:准确率、精度(查准率)、召回率(查全率)、F1)
2. 对比分析
准确率(Accuracy):模型预测正确的样本占总样本的比例。
精度(Precision):预测为正类的样本中,实际为正类的比例。
召回率(Recall):实际为正类的样本中,被预测为正类的比例。
F1值(F1 Score):精度和召回率的调和平均值,用于衡量模型的整体性能。