如何在notebook里面训练一个BP神经网络用于实现鸢尾花的准确分类,给出完整代码,从scikit-learn导入数据
时间: 2025-06-26 19:15:30 浏览: 10
### 使用 BP 神经网络对鸢尾花数据集进行分类
以下是基于 `scikit-learn` 和 `MLPClassifier` 实现的完整代码示例,用于对鸢尾花数据集 (`iris`) 进行分类。此代码展示了如何加载数据、预处理、训练模型以及评估性能。
```python
# 导入必要的库
import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neural_network import MLPClassifier
from sklearn.metrics import classification_report, confusion_matrix
# 加载 iris 数据集
data = load_iris()
X = data.data # 特征矩阵
y = data.target # 标签向量
# 将数据划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 对特征进行标准化处理
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
# 定义并初始化多层感知机 (MLP) 模型
mlp = MLPClassifier(hidden_layer_sizes=(10, 10), max_iter=1000, activation='relu', solver='adam', random_state=42)
# 训练模型
mlp.fit(X_train, y_train)
# 预测测试集标签
predictions = mlp.predict(X_test)
# 输出混淆矩阵和分类报告
print(confusion_matrix(y_test, predictions))
print(classification_report(y_test, predictions))
```
上述代码实现了以下功能:
- **数据加载与分割**:使用 `load_iris()` 函数加载数据,并将其拆分为训练集和测试集[^1]。
- **特征标准化**:为了提高神经网络的收敛速度和精度,采用 `StandardScaler` 对输入特征进行了标准化处理。
- **模型定义与训练**:通过 `MLPClassifier` 构建了一个具有两层隐藏层(每层 10 个节点)的前馈神经网络,并指定激活函数为 ReLU,优化器为 Adam。
- **性能评估**:计算了预测结果的混淆矩阵和详细的分类报告,以便分析模型的表现。
#### 关于线性分类的相关说明
在此任务中,虽然 Iris 数据集中部分类别可能满足线性可分条件[^2],但由于引入了非线性的激活函数(ReLU),该神经网络能够捕捉更复杂的模式,从而适用于非线性分类场景。
---
###
阅读全文