2024.10.5

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

一、实验目的

深入理解 BP 神经网络的算法原理,能够使用 Python 语言实现 BP 神经网络的训练与测试,并且使用五折交叉验证算法进行模型训练与评估。

二、实验内容

(1)从 scikit-learn 库中加载 iris 数据集,使用留出法留出 1/3 的样本作为测试集(注

意同分布取样);

(2)使用训练集训练 BP 神经网络分类算法;

(3)使用五折交叉验证对模型性能(准确度、精度、召回率和 F1 值)进行评估和选

择;

(4)使用测试集,测试模型的性能,对测试结果进行分析,完成实验报告中实验五的部分

三、算法步骤、代码、及结果

   1. 算法伪代码

(1) 加载Iris数据集,获取特征集X和标签集y

(2) 使用留出法将数据集分为训练集(X_train, y_train)和测试集(X_test, y_test),测试集大小为1/3,保持类别比例

(3) 创建BP神经网络模型,设置隐藏层大小为10,最大迭代次数为1000

(4) 使用训练集(X_train, y_train)训练BP神经网络模型

(5) 定义评分标准,包括准确率、加权精确率、加权召回率和加权F1

(6) 使用五折交叉验证评估模型性能,并计算每个评分标准的平均值和标准差

(7) 打印每个评分标准的平均值和标准差

(8) 使用测试集(X_test)对训练好的BP神经网络模型进行预测,得到预测结果y_pred

(9) 输出分类报告和混淆矩阵

   2. 算法主要代码

import numpy as np
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, accuracy_score, precision_score, recall_score, f1_score
from sklearn.metrics import classification_report, confusion_matrix

# 1. 加载 Iris 数据集
iris = load_iris()
X, y = iris.data, iris.target

# 2. 留出法分割数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42, stratify=y)

# 3. 创建并训练 BP 神经网络模型
model = MLPClassifier(hidden_layer_sizes=(10,), max_iter=1000, random_state=42)
model.fit(X_train, y_train)

# 4. 五折交叉验证评估模型性能
scoring = {
    '准确率': make_scorer(accuracy_score),
    '精确率': make_scorer(precision_score, average='weighted'),
    '召回率': make_scorer(recall_score, average='weighted'),
    'F1 ': make_scorer(f1_score, average='weighted')
}

scores = {}
for metric in scoring:
    scores[metric] = cross_val_score(model, X_train, y_train, cv=5, scoring=scoring[metric])

# 打印各项指标的平均值和标准差
for metric, values in scores.items():
    print(f"{metric}:\n 平均值: {np.mean(values):.2f}, 标准差: {np.std(values):.2f}\n")

# 5. 使用测试集评估模型性能
y_pred = model.predict(X_test)

# 生成分类报告
print("分类报告:")
print(classification_report(y_test, y_pred, target_names=iris.target_names))

# 计算混淆矩阵
conf_matrix = confusion_matrix(y_test, y_pred)
print("混淆矩阵:")
print(conf_matrix)

 

调用库方法(函数参数说明)

1.load_iris()

 

来源:sklearn.datasets

作用:加载Iris数据集。

train_test_split()

 

来源:sklearn.model_selection

参数:

X:特征数据。

y:目标数据。

test_size:测试集的比例。

random_state:随机数生成器的种子。

stratify:保持训练集和测试集的类别比例。

作用:将数据集划分为训练集和测试集。

2.MLPClassifier()

 

来源:sklearn.neural_network

参数:

hidden_layer_sizes:隐藏层的大小。

max_iter:最大迭代次数。

random_state:随机数生成器的种子。

作用:创建一个多层感知器(BP神经网络)分类器实例。

3.fit()

 

来源:sklearn.base

参数:

X_train:训练集的特征数据。

y_train:训练集的目标数据。

作用:训练BP神经网络模型。

4.cross_val_score()

 

来源:sklearn.model_selection

参数:

model:要评估的模型。

X_train:训练集的特征数据。

y_train:训练集的目标数据。

cv:交叉验证的折数。

scoring:评分标准。

作用:使用交叉验证评估模型性能,并返回给定评分标准的平均分数。

5.make_scorer()

 

来源:sklearn.metrics

参数:

score_func:评分函数。

average:评分平均策略。

作用:创建一个评分函数。

6.classification_report()

 

来源:sklearn.metrics

参数:

y_test:测试集的真实目标数据。

y_pred:模型预测的目标数据。

target_names:类别名称。

作用:输出一个详细的分类报告。

7.confusion_matrix()

 

来源:sklearn.metrics

参数:

y_test:测试集的真实目标数据。

y_pred:模型预测的目标数据。

作用:输出混淆矩阵。

   3. 训练结果截图(包括:准确率、精度(查准率)、召回率(查全率)、F1

posted @ 2024-10-05 00:13  kuku睡  阅读(35)  评论(0)    收藏  举报