12.9实验五:BP 神经网络算法实现与测试

实验五: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 20241212

 

@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 神经网络在此任务中表现出色,但在更复杂或不平衡的数据集上,可能需要考虑其他模型或调整超参数。

posted @ 2024-12-12 14:25    阅读(339)  评论(0)    收藏  举报