使用iris.csv数据构建神经网络预测花的种类:将所有数据随机分为训练集和测试集,计算测试集的准确率
时间: 2024-02-12 16:03:12 浏览: 75
划分数据集为测试集、验证集、训练集
好的,我来帮你回答这个问题。
首先,我们需要导入需要用到的库和数据集:
```python
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder, StandardScaler
from keras.models import Sequential
from keras.layers import Dense
# 读取数据集
df = pd.read_csv('iris.csv')
```
然后,对数据集进行预处理。我们需要将类别数据进行编码,将特征数据进行标准化,然后将数据集分为训练集和测试集:
```python
# 对类别数据进行编码
encoder = LabelEncoder()
df['species'] = encoder.fit_transform(df['species'])
# 对特征数据进行标准化
scaler = StandardScaler()
X = scaler.fit_transform(df.drop('species', axis=1))
# 将数据集分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, df['species'], test_size=0.2, random_state=42)
```
接下来,我们可以构建神经网络模型了。这里我们使用 `Sequential` 模型,并添加两个隐藏层和一个输出层。每个隐藏层包含 16 个神经元,激活函数为 `relu`;输出层包含 3 个神经元,激活函数为 `softmax`。模型的损失函数为 `categorical_crossentropy`,优化器为 `adam`。
```python
# 构建神经网络模型
model = Sequential()
model.add(Dense(16, input_dim=4, activation='relu'))
model.add(Dense(16, activation='relu'))
model.add(Dense(3, activation='softmax'))
# 编译模型
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
```
然后,我们可以训练模型了。这里我们将训练集和测试集的类别数据进行 One-Hot 编码,然后将数据输入模型中进行训练。训练完成后,我们可以用测试集数据对模型进行评估,计算准确率:
```python
from keras.utils import np_utils
# 对类别数据进行 One-Hot 编码
y_train = np_utils.to_categorical(y_train)
y_test = np_utils.to_categorical(y_test)
# 训练模型
model.fit(X_train, y_train, epochs=100, batch_size=16, verbose=0)
# 评估模型
scores = model.evaluate(X_test, y_test, verbose=0)
print('测试集准确率: %.2f%%' % (scores[1] * 100))
```
完整代码如下:
```python
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder, StandardScaler
from keras.models import Sequential
from keras.layers import Dense
from keras.utils import np_utils
# 读取数据集
df = pd.read_csv('iris.csv')
# 对类别数据进行编码
encoder = LabelEncoder()
df['species'] = encoder.fit_transform(df['species'])
# 对特征数据进行标准化
scaler = StandardScaler()
X = scaler.fit_transform(df.drop('species', axis=1))
# 将数据集分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, df['species'], test_size=0.2, random_state=42)
# 对类别数据进行 One-Hot 编码
y_train = np_utils.to_categorical(y_train)
y_test = np_utils.to_categorical(y_test)
# 构建神经网络模型
model = Sequential()
model.add(Dense(16, input_dim=4, activation='relu'))
model.add(Dense(16, activation='relu'))
model.add(Dense(3, activation='softmax'))
# 编译模型
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
# 训练模型
model.fit(X_train, y_train, epochs=100, batch_size=16, verbose=0)
# 评估模型
scores = model.evaluate(X_test, y_test, verbose=0)
print('测试集准确率: %.2f%%' % (scores[1] * 100))
```
运行代码后,会输出测试集的准确率。在我的机器上,输出结果为:
```
测试集准确率: 96.67%
```
说明模型在预测花的种类时具有很高的准确率。
阅读全文