机器学习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值,以全面评估模型的分类效果。在实际应用中,根据问题的具体需求,可能需要对这些指标进行不同的权衡。

 

posted @ 2024-11-27 10:58  痛苦代码源  阅读(19)  评论(0编辑  收藏  举报