首页 > 分享 > 基于Python的人工智能应用案例系列(8):鸢尾花分类

基于Python的人工智能应用案例系列(8):鸢尾花分类

        鸢尾花数据集(Iris Dataset)是机器学习入门最经典的分类数据集之一。它包含150个样本,4个特征,用于分类3种不同的鸢尾花类(Iris setosa, Iris virginica, Iris versicolor)。本篇文章将通过一个简单的深度学习模型来实现对鸢尾花的分类。

1. 数据加载与探索性数据分析(EDA)

加载数据

        首先,加载鸢尾花数据集,并查看数据的基本信息。

import pandas as pd

df = pd.read_csv('../data/iris.csv')

df.head()

        数据集包含以下4个特征:

sepal_length:花萼长度(cm)sepal_width:花萼宽度(cm)petal_length:花瓣长度(cm)petal_width:花瓣宽度(cm) 目标列是target,表示鸢尾花的分类。 数据可视化

        我们可以通过绘制特征之间的散点图来直观地观察不同鸢尾花类别在不同特征上的分布。

import matplotlib.pyplot as plt

fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(10,7))

fig.tight_layout()

plots = [(0,1),(2,3),(0,2),(1,3)]

colors = ['b', 'r', 'g']

labels = ['Iris setosa', 'Iris virginica', 'Iris versicolor']

for i, ax in enumerate(axes.flat):

for j in range(3):

x = df.columns[plots[i][0]]

y = df.columns[plots[i][1]]

ax.scatter(df[df['target']==j][x], df[df['target']==j][y], color=colors[j])

ax.set(xlabel=x, ylabel=y)

fig.legend(labels=labels, loc=3, bbox_to_anchor=(1.0,0.85))

plt.show()

        从图中可以看出,某些特征组合可以明显区分不同的鸢尾花类别。

2. 数据预处理与训练集/测试集划分

        接下来,将数据集分为训练集和测试集。

from sklearn.model_selection import train_test_split

import torch

X = df.drop('target', axis=1).values

y = df['target'].values

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=33)

X_train = torch.tensor(X_train, dtype=torch.float)

X_test = torch.tensor(X_test, dtype=torch.float)

y_train = torch.tensor(y_train, dtype=torch.long)

y_test = torch.tensor(y_test, dtype=torch.long)

使用DataLoader进行批处理

        虽然数据集较小,但使用DataLoader工具有助于更好地处理大数据集。

from torch.utils.data import DataLoader

trainloader = DataLoader(X_train, batch_size=60, shuffle=True)

testloader = DataLoader(X_test, batch_size=60, shuffle=False)

3. 模型构建

定义神经网络模型

        这个模型将包含两个隐藏层,使用ReLU作为激活函数。

import torch.nn as nn

import torch.nn.functional as F

class Model(nn.Module):

def __init__(self, in_features=4, h1=8, h2=9, out_features=3):

super().__init__()

self.fc1 = nn.Linear(in_features, h1)

self.fc2 = nn.Linear(h1, h2)

self.out = nn.Linear(h2, out_features)

def forward(self, x):

x = F.relu(self.fc1(x))

x = F.relu(self.fc2(x))

x = self.out(x)

return x

定义损失函数和优化器

        我们将使用交叉熵损失函数(Cross Entropy Loss)和Adam优化器进行模型的训练。

criterion = nn.CrossEntropyLoss()

optimizer = torch.optim.Adam(model.parameters(), lr=0.01)

4. 模型训练

        模型训练过程包括前向传播、计算损失、反向传播和优化参数。

epochs = 150

losses = []

for epoch in range(epochs):

y_pred = model.forward(X_train)

loss = criterion(y_pred, y_train)

losses.append(loss.item())

optimizer.zero_grad()

loss.backward()

optimizer.step()

if epoch % 10 == 0:

print(f'epoch: {epoch:2}, loss: {loss.item():10.8f}')

绘制损失函数曲线

        我们可以绘制损失函数随迭代次数的变化曲线。

plt.plot(range(epochs), losses)

plt.ylabel('Loss')

plt.xlabel('Epoch')

plt.show()

5. 模型测试与评估

        现在,我们使用测试集评估模型的性能,计算分类的准确率。

correct = 0

with torch.no_grad():

y_val = model.forward(X_test)

loss = criterion(y_val, y_test)

print(f'Test Loss: {loss.item()}')

for i, data in enumerate(X_test):

prediction = y_val[i].argmax().item()

true_label = y_test[i].item()

if prediction == true_label:

correct += 1

accuracy = correct / len(y_test) * 100

print(f'Accuracy: {accuracy:.2f}%')

6. 模型保存与加载

        为了便于之后的模型推理,我们可以将训练好的模型保存到文件中。

torch.save(model.state_dict(), 'models/IrisModel.pth')

        在需要时,我们可以重新加载模型并进行推理。

loaded_model = Model()

loaded_model.load_state_dict(torch.load('models/IrisModel.pth'))

loaded_model.eval()

7. 使用模型进行推理

        我们可以创建一个新的鸢尾花样本并通过模型进行分类。

mystery_iris = torch.tensor([5.6, 3.7, 2.2, 0.5])

with torch.no_grad():

prediction = loaded_model(mystery_iris)

print(f'Predicted class: {prediction.argmax().item()}')

结语

        在本案例中,我们使用了经典的鸢尾花数据集,构建了一个简单但有效的神经网络模型来进行多分类任务。通过神经网络的构建、训练、测试和推理,我们实现了对不同类别鸢尾花的准确分类。这一过程展示了如何处理多类别分类问题,如何对模型进行训练和评估,以及如何保存和加载训练好的模型以便后续使用。

        尽管鸢尾花数据集相对简单,但这一流程可以很好地拓展至更复杂的分类任务。通过该案例,你不仅能够理解神经网络的基本构建过程,还能掌握一些处理分类问题的核心技巧,如交叉熵损失函数的使用、数据的批处理以及模型的推理和持久化。未来,你可以在更大、更复杂的数据集上应用类似的技术来解决实际问题,从而进一步提高模型的预测性能和应用范围。

如果你觉得这篇博文对你有帮助,请点赞、收藏、关注我,并且可以打赏支持我!

欢迎关注我的后续博文,我将分享更多关于人工智能、自然语言处理和计算机视觉的精彩内容。

谢谢大家的支持!

相关知识

《Python程序设计:人工智能案例实践》((美) 保罗·戴特尔(Paul Deitel))【简介
卷积神经网络实现鸢尾花数据分类python代码实现
深度学习应用开发
python 使用Tensorflow训练BP神经网络实现鸢尾花分类
Python 基于BP神经网络的鸢尾花分类
人工智能毕业设计基于python的花朵识别系统
【机器学习】基于KNN算法实现鸢尾花数据集的分类
[Python机器学习]鸢尾花分类 机器学习应用
手把手教你学Python之鸢尾花分类(scikit
探秘花语:基于Python的智能花卉图像识别系统

网址: 基于Python的人工智能应用案例系列(8):鸢尾花分类 https://m.huajiangbk.com/newsview1544663.html

所属分类:花卉
上一篇: 鸢尾花数据集可视化与机器学习模型
下一篇: 鸢尾花数据集决策树模型的可视化图