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

一、实验目的

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

二、实验内容
(1)从scikit-learn库中加载iris数据集或本地读取,进行数据分析:
(2)采用五折交叉验证划分训练集和测试集,使用训练集对BP神经网络分类算法进行训练;
(3)使用五折交叉验证对模型性能(准确度、精度、召回率和F1值)进行测试;
(4)通过对测试结果进行比较分析,评估模型性能:
(5)完成实验报告中实验五的部分。

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

def bp_neural_network_training(X, y):
    """
    BP神经网络训练与评估
    """
    print("\n" + "=" * 60)
    print("BP神经网络算法实现")
    print("=" * 60)

    # 数据标准化(神经网络对特征尺度敏感)
    scaler = StandardScaler()
    X_scaled = scaler.fit_transform(X)

    # 定义不同结构的BP神经网络
    network_architectures = {
        '单隐层(10节点)': MLPClassifier(hidden_layer_sizes=(10,), random_state=42),
        '单隐层(50节点)': MLPClassifier(hidden_layer_sizes=(50,), random_state=42),
        '双隐层(20,10)': MLPClassifier(hidden_layer_sizes=(20, 10), random_state=42),
        '三隐层(30,20,10)': MLPClassifier(hidden_layer_sizes=(30, 20, 10), random_state=42)
    }

    # 定义评估指标
    scoring = {
        'accuracy': 'accuracy',
        'precision': 'precision_macro',
        'recall': 'recall_macro',
        'f1': 'f1_macro'
    }

    results = {}

    for arch_name, model in network_architectures.items():
        print(f"\n正在训练 {arch_name} BP神经网络...")

        # 五折交叉验证
        cv_results = cross_validate(
            estimator=model,
            X=X_scaled,
            y=y,
            cv=5,
            scoring=scoring,
            return_train_score=True,
            return_estimator=True
        )

        results[arch_name] = {
            'test_accuracy': cv_results['test_accuracy'],
            'test_precision': cv_results['test_precision'],
            'test_recall': cv_results['test_recall'],
            'test_f1': cv_results['test_f1'],
            'train_accuracy': cv_results['train_accuracy'],
            'estimators': cv_results['estimator']
        }

    return results, X_scaled
posted @ 2025-11-27 09:19  Look_Back  阅读(3)  评论(0)    收藏  举报