使用iris.csv数据构建神经网络预测花的种类:将所有数据随机分为训练集和测试集,分别计算测试集上总的准确率和不同类的准确率。
时间: 2024-02-01 14:14:05 浏览: 67
花朵数据集-用于训练各种类型的生成模型
好的,我将为您提供一个基于Python的神经网络模型来预测鸢尾花的种类。请先确保安装了以下必要的包:numpy, pandas, tensorflow, sklearn。
首先,我们需要导入数据集和必要的库。
```python
import numpy as np
import pandas as pd
import tensorflow as tf
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
```
然后,我们可以使用Pandas库的read_csv()函数从iris.csv文件中读取数据,并将其分为特征和标签。
```python
dataset = pd.read_csv('iris.csv')
X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, -1].values
```
接下来,我们需要对标签进行编码。这里我们使用LabelEncoder来将标签转换为数字,然后使用OneHotEncoder将数字编码为二进制值。
```python
# 标签编码
le = LabelEncoder()
y = le.fit_transform(y)
# 二进制编码
ohe = OneHotEncoder()
y = ohe.fit_transform(y.reshape(-1,1)).toarray()
```
现在我们已经将标签编码为二进制值,我们可以将数据集分为训练集和测试集。这里我们使用train_test_split()函数来分割数据集。我们将80%的数据用于训练,20%的数据用于测试。
```python
# 训练集和测试集分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
```
接下来,我们需要对特征进行归一化处理。这里我们使用StandardScaler来将特征缩放到一个标准正态分布。
```python
# 特征缩放
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
```
现在我们已经完成了数据预处理,我们可以开始构建神经网络模型了。这里我们使用Sequential模型来构建模型。
```python
# 神经网络模型
model = tf.keras.models.Sequential([
tf.keras.layers.Dense(units=128, activation='relu', input_dim=4),
tf.keras.layers.Dense(units=64, activation='relu'),
tf.keras.layers.Dense(units=3, activation='softmax')
])
```
这个模型有一个输入层,两个隐藏层和一个输出层。我们使用ReLU作为激活函数,使用softmax作为输出层的激活函数。
接下来,我们需要编译模型并使用fit()函数来训练它。
```python
# 模型编译和训练
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(X_train, y_train, epochs=100, batch_size=32, validation_data=(X_test, y_test))
```
在训练过程中,我们使用adam优化器和交叉熵损失函数。我们还使用准确率作为评估指标。
最后,我们可以使用evaluate()函数计算测试集上的准确率和不同类的准确率。
```python
# 测试集评估
loss, accuracy = model.evaluate(X_test, y_test)
print("总准确率: {:.2f}%".format(accuracy*100))
# 不同类的准确率
y_pred = model.predict(X_test)
y_pred = np.argmax(y_pred, axis=1)
y_test = np.argmax(y_test, axis=1)
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred)
print("不同类的准确率:")
print(cm.diagonal()/cm.sum(axis=1)*100)
```
这里我们使用混淆矩阵来计算不同类的准确率。我们可以看到,模型在测试集上的总准确率为96%,在不同类中的准确率也很高。
我希望这个例子能够帮助您了解如何使用神经网络模型来预测鸢尾花的种类。
阅读全文