用python编写一个浅层(包含1到3隐层)的神经网络程序完成sklearn中鸢尾花数据集(isis)鸢尾花分类。要求: 1、损失函数用交叉熵函数 2、模型评价采用 分类精度 3、程序需要运行,且有输出结果
时间: 2024-09-13 11:12:03 浏览: 42
在Python中,我们可以使用Keras库,它是一个高级神经网络API,可以轻松构建包括1到3层的深度学习模型。这里我们使用鸢尾花数据集(Iris dataset)作为示例,该数据集已经在scikit-learn中内置。以下是创建一个简单的三层神经网络并进行训练的代码:
```python
# 导入必要的库
from sklearn import datasets
import numpy as np
from keras.models import Sequential
from keras.layers import Dense
from keras.utils import to_categorical
from sklearn.metrics import accuracy_score
# 加载鸢尾花数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target
# 将类别标签转换为one-hot编码
num_classes = len(np.unique(y))
y_one_hot = to_categorical(y, num_classes)
# 创建一个顺序模型
model = Sequential()
# 添加输入层和隐藏层
model.add(Dense(16, input_dim=X.shape[1], activation='relu')) # 第一层隐藏层
model.add(Dense(8, activation='relu')) # 第二层隐藏层
model.add(Dense(num_classes, activation='softmax')) # 输出层
# 使用交叉熵作为损失函数
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
# 划分训练集和测试集
split_ratio = 0.8
train_size = int(len(X) * split_ratio)
X_train, X_test = X[:train_size], X[train_size:]
y_train, y_test = y_one_hot[:train_size], y_one_hot[train_size:]
# 训练模型
history = model.fit(X_train, y_train, validation_data=(X_test, y_test), epochs=50, batch_size=10)
# 预测并计算分类精度
y_pred = model.predict_classes(X_test)
accuracy = accuracy_score(y_test.argmax(axis=1), y_pred)
print("Model accuracy on test set:", accuracy)
# 可视化训练过程中的损失和准确率变化
import matplotlib.pyplot as plt
plt.plot(history.history['loss'], label='Training Loss')
plt.plot(history.history['val_loss'], label='Validation Loss')
plt.plot(history.history['accuracy'], label='Training Accuracy')
plt.plot(history.history['val_accuracy'], label='Validation Accuracy')
plt.legend()
plt.show()
阅读全文