实验五:BP 神经网络算法实现与测试
一、实验目的
深入理解 BP 神经网络的算法原理,能够使用 Python 语言实现 BP 神经网络的训练与测试,并且使用五折交叉验证算法进行模型训练与评估。
二、实验内容
(1)从 scikit-learn 库中加载 iris 数据集,使用留出法留出 1/3 的样本作为测试集(注意同分布取样);
(2)使用训练集训练 BP 神经网络分类算法;
(3)使用五折交叉验证对模型性能(准确度、精度、召回率和 F1 值)进行评估和选择;
(4)使用测试集,测试模型的性能,对测试结果进行分析,完成实验报告中实验五的部分。
三、算法步骤、代码、及结果
1. 算法伪代码
开始
加载 iris 数据集
将特征存储在 X 中
将标签存储在 y 中
使用留出法将数据集分为训练集和测试集
测试集占 1/3
确保训练集和测试集的类别比例相同
创建 MLPClassifier 实例
设置隐藏层大小为 10
设置最大迭代次数为 1000
使用训练集数据训练 BP 神经网络模型
定义评分指标(准确度、精度、召回率、F1 值)
进行五折交叉验证
计算并输出交叉验证的平均准确度
使用测试集进行预测
将预测结果存储在 y_pred 中
生成并输出分类报告(包括精度、召回率和 F1 值)
结束
2. 算法主要代码
完整源代码\调用库方法(函数参数说明)
'''
Created on 2024年12月12日
@author: 席酒
'''
# 导入必要的库
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 make_scorer, precision_score, recall_score, f1_score, classification_report
# 加载 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, stratify=y)
# 创建 BP 神经网络分类器
mlp = MLPClassifier(hidden_layer_sizes=(10,), max_iter=1000, random_state=42)
# 训练模型
mlp.fit(X_train, y_train)
# 定义评分指标
scoring = {
'accuracy': 'accuracy',
'precision': make_scorer(precision_score, average='weighted'),
'recall': make_scorer(recall_score, average='weighted'),
'f1': make_scorer(f1_score, average='weighted')
}
# 进行五折交叉验证
scores = cross_val_score(mlp, X_train, y_train, cv=5, scoring='accuracy')
# 输出交叉验证准确度
print("交叉验证准确度:", scores.mean())
# 使用测试集进行预测
y_pred = mlp.predict(X_test)
# 输出分类报告
print(classification_report(y_test, y_pred))
3. 训练结果截图(包括:准确率、精度(查准率)、召回率(查全率)、F1)
四、实验结果分析
1. 测试结果截图(包括:准确率、精度(查准率)、召回率(查全率)、
F1)
2. 对比分析
模型在 iris 数据集上的表现非常优秀,所有指标均为 1.00,表明模型能够完美地分类所有样本。iris 数据集相对较小且类别分布均匀,这可能是模型表现良好的原因之一。BP 神经网络在此任务中表现出色,但在更复杂或不平衡的数据集上,可能需要考虑其他模型或调整超参数。
标签:iris,train,神经网络,score,BP,测试,12.9 From: https://www.cnblogs.com/yindantong/p/18602392