实战机器学习--决策树分类器在蘑菇分类中的应用

news/2024/10/22 14:37:32/

数据集:https://pan.quark.cn/s/4d3526600c0c

机器学习领域,图像分类是一个常见的任务,尤其是在自然语言处理和生物识别等领域。本文将通过一个简单的例子,展示如何使用Python和一些流行的库来实现蘑菇的分类,区分可食用蘑菇和毒蘑菇。以下是详细的步骤和代码解析。

1. 导入必要的库

首先,我们需要导入一些必要的Python库:

import os  # 用于文件和目录操作
import cv2  # 用于图像读取和处理
import numpy as np  # 用于数值计算
from sklearn.model_selection import train_test_split  # 用于数据集分割
from sklearn.tree import DecisionTreeClassifier  # 用于创建决策树分类
from sklearn.metrics import classification_report  # 用于生成分类报告

2. 设置数据路径

我们需要为可食用蘑菇和毒蘑菇的图片设置存储路径。这里假设图片存储在本地磁盘上:

edible_path = r'Mushroom dataset\Edible'
poisonous_path = r'Mushroom dataset\Poisonous'

3. 初始化数据和标签列表

在开始读取图片之前,我们需要初始化两个列表:X用于存储图像数据,y用于存储对应的标签。

X = []  # 存储图像数据的列表
y = []  # 存储标签的列表

4. 读取图片并处理

接下来,我们遍历存储路径中的每个文件,读取图片,调整图片大小,并将其展平成一维向量。同时,根据图片的类型(可食用或毒蘑菇),添加相应的标签。

for filename in os.listdir(edible_path):  # 遍历可食用蘑菇图片目录img_path = os.path.join(edible_path, filename)  # 获取图片的完整路径image = cv2.imread(img_path)  # 读取图片if image is not None:  # 确保图片被成功读取image = cv2.resize(image, (64, 64))  # 将图片调整为64x64像素image = image.flatten()  # 将图片数据展平成一维数组X.append(image)  # 添加到X列表y.append('Edible')  # 添加标签到y列表for filename in os.listdir(poisonous_path):  # 遍历毒蘑菇图片目录img_path = os.path.join(poisonous_path, filename)  # 获取图片的完整路径image = cv2.imread(img_path)  # 读取图片if image is not None:  # 确保图片被成功读取image = cv2.resize(image, (64, 64))  # 将图片调整为64x64像素image = image.flatten()  # 将图片数据展平成一维数组X.append(image)  # 添加到X列表y.append('Poisonous')  # 添加标签到y列表

5. 转换为NumPy数组

Xy列表转换为NumPy数组,以便进行机器学习处理。

X = np.array(X)
y = np.array(y)

6. 划分数据集

使用train_test_split函数将数据集划分为训练集和测试集。这里,测试集占总数据的20%。

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

7. 创建决策树分类器实例

初始化一个决策树分类器,并设置random_state参数以确保结果的可复现性。

clf = DecisionTreeClassifier(random_state=42)

8. 训练模型

使用训练集数据训练决策树模型。

clf.fit(X_train, y_train)

9. 预测测试集

使用训练好的模型对测试集进行预测。

y_pred = clf.predict(X_test)

10. 打印评价报告

最后,使用classification_report函数打印出模型在测试集上的性能评价报告。

print(classification_report(y_test, y_pred))

11. 总代码

import os
import cv2
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import classification_report
# 数据路径
edible_path = r'Mushroom dataset\Edible'
poisonous_path = r'Mushroom dataset\Poisonous'
# 初始化数据和标签列表,用于存储图片数据和对应的标签。
X = []
y = []
# 遍历 edible_path 目录中的每个文件,读取图片,调整图片大小到 64x64 像素
# 然后将图片展平成一维向量,并将其添加到 X 列表中,同时将标签 "Edible" 添加到 y 列表中。
# 读取可食用蘑菇图片并添加标签
for filename in os.listdir(edible_path):img_path = os.path.join(edible_path, filename)image = cv2.imread(img_path)if image is not None:image = cv2.resize(image, (64, 64))  # 调整图片大小以保证一致性image = image.flatten()  # 将图片展平成一维向量X.append(image)y.append('Edible')
# 读取毒蘑菇图片并添加标签
for filename in os.listdir(poisonous_path):img_path = os.path.join(poisonous_path, filename)image = cv2.imread(img_path)if image is not None:image = cv2.resize(image, (64, 64))  # 调整图片大小以保证一致性image = image.flatten()  # 将图片展平成一维向量X.append(image)y.append('Poisonous')
# 转换为numpy数组
X = np.array(X)
y = np.array(y)
# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建决策树分类器实例
clf = DecisionTreeClassifier(random_state=42)
# 训练模型
clf.fit(X_train, y_train)
# 预测测试集
y_pred = clf.predict(X_test)
# 打印评价报告
print(classification_report(y_test, y_pred))

总结

通过以上步骤,我们成功地使用决策树分类器对蘑菇图片进行了分类。这种方法可以扩展到其他图像分类任务中,只需调整数据路径和相应的处理逻辑即可。决策树是一种简单但有效的分类方法,适合初学者理解和应用。然而,对于更复杂的任务,可能需要更高级的模型,如深度学习模型。


http://www.ppmy.cn/news/1501270.html

相关文章

LLM 大语言模型显存消耗估计与计算

LLM 大语言模型显存消耗估计与计算 1. LLM 大语言模型开发流程 在大模型(如 LLaMA-7B、GPT-3 等)的开发、训练、微调、推理和部署过程中,各个阶段的流程都涉及多个复杂的步骤。以下是详细的流程描述,涵盖训练和微调的区别&#…

Unity学习笔记之Inspector窗口可编辑的变量

笔记: using System.Collections; using System.Collections.Generic; using UnityEngine;public enum TypeEnum {Normal,Player } [System.Serializable] public struct MyStruct {public int ages;public bool sex; } [System.Serializable] public class MyClas…

【React】通过实际示例详解评论列表渲染和删除

文章目录 一、引言二、初始状态与状态更新1. 使用useState钩子管理状态2. 评论列表的初始数据 三、列表渲染的实现1. list.map(item > { ... })2. return 语句3. JSX 语法4. 为什么这样设计5. 完整解读 四、列表项的唯一标识1. key 的作用2. key 的用法3. 可以没有 key 吗&a…

Postman中的数据驱动测试:API测试数据准备全攻略

Postman中的数据驱动测试:API测试数据准备全攻略 在API测试中,数据准备是确保测试覆盖全面性和准确性的关键步骤。Postman,作为业界领先的API开发工具,提供了强大的数据准备功能,允许用户轻松创建动态测试脚本。本文将…

解决python bug(关于Paddle分布式训练):Exit with signal X

解决python bug[关于Paddle分布式训练]:Exit with signal X 多卡训练(需根据自己需求进行更改)单卡训练(需根据自己需求进行更改) 本人在通过Paddle实现多目标检测跟踪时遇到了一个小bug。 Exit with signal X 后来通过查询相关资料得知,引发这个bug的原…

英特尔宣布针对对Llama 3.1进行优化 以提升所有产品的性能

日前Meta正式发布了Llama 3.1开源大模型,以其庞大的参数量和卓越性能,首次在多项基准测试中击败了GPT-4o等业界领先的闭源模型。允许开发者自由地进行微调、蒸馏,甚至在任何地方部署,这种开放性为AI技术的普及和创新提供了无限可能…

godot新建项目及设置外部编辑器为vscode

一、新建项目 初次打开界面如下所示,点击取消按钮先关闭掉默认弹出的框 点击①新建弹出中间的弹窗②中填入项目的名称 ③中设置项目的存储路径,点击箭头所指浏览按钮,会弹出如下所示窗口 根据图中所示可以选择或新建自己的游戏存储路径&…

Django 表单常用字段参数

Django Form表单,常用表单字段-CSDN博客 在Django中,表单(Form)是用来处理HTML表单数据的重要工具。Django的表单API允许你定义表单字段及其验证规则。每个表单字段都可以通过多种参数来定制其行为。以下是一些常用的表单字段参数…