基于Python,将数据集bezdekIris.data划分为测试集和训练集,并利用训练集训练一个能实现三分类的神经网络模型,隐含层数可以自己设定,给出具体可运行代码。
时间: 2024-11-12 15:38:34 浏览: 4
python 划分数据集为训练集和测试集的方法
在Python中,我们可以使用scikit-learn库来处理数据集划分以及构建神经网络模型。以下是一个示例,展示了如何使用`sklearn.model_selection.train_test_split`函数将数据集划分为训练集和测试集,并使用Keras库创建一个多层感知机(MLP)进行三分类:
首先,确保已安装必要的库:
```bash
pip install numpy pandas scikit-learn tensorflow keras
```
然后,以下是实现这个任务的代码:
```python
import numpy as np
import pandas as pd
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
# 加载贝兹德鸢尾花数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target
# 数据预处理:标准化数据
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# 划分数据集(假设70%用于训练,30%用于测试)
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.3, random_state=42)
# 设定隐藏层数(这里设置两层隐藏层)
num_hidden_layers = 2
num_units_per_layer = [16, 8] # 每层神经元的数量
# 创建Sequential模型并添加隐藏层和输出层
model = Sequential()
model.add(Dense(num_units_per_layer[0], input_dim=X_train.shape[1], activation='relu'))
for _ in range(1, num_hidden_layers):
model.add(Dense(num_units_per_layer[1], activation='relu'))
model.add(Dense(3, activation='softmax')) # 输出层,三分类,使用softmax激活函数
# 编译模型,指定损失函数、优化器和评估指标
model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
# 训练模型
model.fit(X_train, y_train, epochs=100, batch_size=10, validation_data=(X_test, y_test))
# 打印训练结果
print("Training accuracy:", model.evaluate(X_train, y_train)[1])
print("Validation accuracy:", model.evaluate(X_test, y_test)[1])
阅读全文