机器学习B:实验五:BP 神经网络算法实现与测试
一、实验目的
深入理解 BP 神经网络的算法原理,能够使用 Python 语言实现 BP 神经网络的训练与测
试,并且使用五折交叉验证算法进行模型训练与评估。
二、实验内容
(1)从 scikit-learn 库中加载 iris 数据集,使用留出法留出 1/3 的样本作为测试集(注
意同分布取样);
(2)使用训练集训练 BP 神经网络分类算法;
(3)使用五折交叉验证对模型性能(准确度、精度、召回率和 F1 值)进行评估和选
择;
(4)使用测试集,测试模型的性能,对测试结果进行分析,完成实验报告中实验五的推荐
部分。
三、算法步骤、代码、及结果
1. 算法伪代码
输入:训练数据集 D,测试数据集 T,网络结构参数(如隐藏层神经元数量等)
输出:训练好的神经网络模型
1. 初始化神经网络参数(权重和偏置)
2. 对于 D 中的每一个样本 do
a. 前向传播:计算输出层的预测值
b. 计算误差:实际值与预测值之间的差异
c. 反向传播:根据误差调整权重和偏置
3. 重复步骤 2 直到满足停止条件(如最大迭代次数或最小误差阈值)
4. 使用训练好的模型在测试集 T 上进行测试
5. 计算性能指标(准确率、精度、召回率、F1值)
2. 算法主要代码
完整源代码\调用库方法(函数参数说明)
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.neural_network import MLPClassifier
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
# 加载数据集
iris = load_iris()
X, y = iris.data, iris.target
# 使用留出法留出1/3的样本作为测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=1/3, random_state=1)
# 创建BP神经网络模型
mlp = MLPClassifier(hidden_layer_sizes=(100,), max_iter=1000, alpha=1e-4,
solver='sgd', verbose=10, random_state=1,
learning_rate_init=.1)
# 训练模型
mlp.fit(X_train, y_train)
# 使用五折交叉验证评估模型性能
scores = cross_val_score(mlp, X_train, y_train, cv=5, scoring='accuracy')
print(f"五折交叉验证准确率平均值: {scores.mean()}")
# 在测试集上测试模型性能
y_pred = mlp.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')
# 输出性能指标结果
print(f"测试集准确率: {accuracy:.4f}")
print(f"测试集查准率(精度): {precision:.4f}")
print(f"测试集查全率(召回率): {recall:.4f}")
print(f"测试集F1值: {f1:.4f}")
3. 训练结果截图(包括:准确率、精度(查准率)、召回率(查全率)、F1)
四、实验结果分析
1. 测试结果截图(包括:准确率、精度(查准率)、召回率(查全率)、F1)
2. 对比分析
- 如果查准率和查全率之间存在较大差异,说明模型在这两个指标上存在偏差。例如,如果查全率较高而查准率较低,可能意味着模型倾向于将更多样本预测为正类别,这可能导致更多的误判。相反,如果查准率较高而查全率较低,可能意味着模型过于保守,错过了一些实际为正的样本。
- F1值可以帮助我们理解模型在查准率和查全率之间的权衡。一个高的F1值通常意味着模型在这两个指标上都表现不错。
- 通过比较五折交叉验证的准确率和测试集的准确率,我们可以评估模型是否过拟合。如果五折交叉验证的准确率远高于测试集的准确率,可能意味着模型在训练集上过拟合了。
总的来说,BP神经网络的性能不仅取决于准确率,还需要综合考虑查准率、查全率和F1值,以全面评估模型的分类效果。在实际应用中,根据问题的具体需求,可能需要对这些指标进行不同的权衡。