决策树完成图片分类任务

数据集要求: 训练集 和 验证集 (要求分好) 

图片放置规则 : 一个总文件夹 放类别名称的子文件夹 其中子文件夹 为存放同一类别图片

举个例子 分类动物 则 总文件夹名称为动物 子文件夹为 猫 狗 猪猪 。。。

其中猫的文件夹里面都是猫

给出代码:

import os
import cv2
import numpy as np
import logging
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score, confusion_matrix

# 设置日志
logging.basicConfig(filename='training_log.txt', level=logging.INFO, format='%(asctime)s - %(message)s')

# 读取图像数据和标签
def load_images_from_folder(folder):
    images = []
    labels = []
    label = 0
    for subdir in os.listdir(folder):
        subpath = os.path.join(folder, subdir)
        if os.path.isdir(subpath):
            for filename in os.listdir(subpath):
                if filename.endswith(".jpg"):
                    img_path = os.path.join(subpath, filename)
                    img = cv2.imread(img_path, cv2.IMREAD_GRAYSCALE)
                    img_normalized = cv2.resize(img, (256, 256))  # 归一化图像大小为256x256
                    images.append(img_normalized.flatten())
                    labels.append(label)
            label += 1
    return images, labels

# 主函数
def main():
    # train_folder = "YOUR_TRAIN_DATASET_FOLDER_PATH"  # 替换为你的训练集文件夹路径
    # test_folder = "YOUR_TEST_DATASET_FOLDER_PATH"    # 替换为你的测试集文件夹路径

    train_folder = "/Users/chen_dongdong/Desktop/宝钢项目/little_work/train"  # 替换为你的训练集文件夹路径
    test_folder = "/Users/chen_dongdong/Desktop/宝钢项目/little_work/val"    # 替换为你的测试集文件夹路径

    logging.info("Loading training data from %s", train_folder)
    X_train, y_train = load_images_from_folder(train_folder)
    logging.info("Loaded %d training samples", len(X_train))

    logging.info("Loading test data from %s", test_folder)
    X_test, y_test = load_images_from_folder(test_folder)
    logging.info("Loaded %d test samples", len(X_test))

    logging.info("Training DecisionTreeClassifier...")
    clf = DecisionTreeClassifier()
    clf.fit(X_train, y_train)
    logging.info("Training completed.")

    y_pred = clf.predict(X_test)
    accuracy = accuracy_score(y_test, y_pred)
    logging.info("Test Accuracy: %f", accuracy)

    cm = confusion_matrix(y_test, y_pred)
    cm_normalized = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]
    logging.info("Normalized Confusion Matrix:")
    for row in cm_normalized:
        logging.info(" - ".join(map(lambda x: "{:.2f}".format(x), row)))

    # 打印特征重要性
    feature_importances = clf.feature_importances_
    top_features = np.argsort(feature_importances)[-10:]  # 打印最重要的10个特征
    logging.info("Top 10 important features:")
    for idx in top_features:
        logging.info("Feature %d: %f", idx, feature_importances[idx])

if __name__ == "__main__":
    main()

使用DecisionTreeClassifierfeature_importances_属性。这个属性会返回一个数组,其中每个值表示相应特征的重要性。值越大,特征越重要。

我们使用的是图像的灰度值作为特征,所以特征的数量会非常大(例如,对于256x256的图像,有65536个特征)。为了简化输出,我们可以只打印出最重要的特征。

这是我们生成的日志文件 

使用sklearn的决策树分类器和opencv来处理图像数据。这个脚本将:

  1. 从指定的文件夹中读取所有子文件夹中的图像。
  2. 将图像转换为灰度。
  3. 将灰度图像转换为一维数组作为特征。
  4. 使用决策树分类器进行训练。
  5. 输出模型的准确性。

请确保已经安装了opencvsklearn库。

pip install opencv-python-headless
pip install scikit-learn


 可加镜像

pip install 镜像-CSDN博客

在训练过程中记录关键的信息,例如每次迭代的训练损失、验证损失、准确性等。但由于我们在此使用的是DecisionTreeClassifier,它不像深度学习模型那样进行多次迭代,所以我们只能记录模型的最终准确性和混淆矩阵。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/106422.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在windows服务器上部署一个单机项目以及前后端分离项目

目录 一. 单机项目在windows服务器上的部署 1.1 在本机上测试项目无误 1.1.1 在数据库中测试sql文件没问题 1.1.2 在tomcat中测试war文件无误 1.1.3 测试完成后,进入浏览器运行单机项目确保无误 1.2 在windows服务器中运行项目 二. 前后端分离项目在服务器上…

ChatGLM系列二:ChatGLM2的介绍及代码实践

一、介绍 2023年06月25日,清华大学开源了 ChatGLM2-6B 模型,是 ChatGLM 模型的升级版本。ChatGLM2-6B 在多个方面有显著提升:模型性能更强,在各种测试集上的表现更好;支持更长的上下文,最大上下文长度提升…

【Ubuntu 终端终结者Ctrl shift e无法垂直分页解决办法】

Ubuntu 终端终结者Ctrl shift e无法垂直分页解决办法 错误原因解决办法 错误原因 这是因为ibus输入法有一个快捷键占用了这个终端终结者的快捷键 解决办法 打开命令行输入 ibus-setup进入到如下页面随后将其中的表情注释的快捷键删除即可

postman接收后端返回的文件流并自动下载

不要点send,点send and download,postman接受完文件流会弹出文件保存框让你选择保存路径

【Linux】MAC帧协议 + ARP协议

文章目录 📖 前言1. 数据链路层2. MAC帧格式3. 再谈局域网4. ARP协议4.1 路由器的转发过程:4.2 ARP协议格式: 5. 如何获得目的MAC地址 📖 前言 在学完网络层IP协议之后,本章我们将继续向下沉一层,进入到数…

ARM,汇编指令

一、汇编指令 1、搬移指令 mov r0 ,#3 mov r1,r0 msr cpsr,r0 mrs r0,cpsr 2、条件执行及标志位 cmp moveq movgt 3、机器码 1)、立即数合法性 2)、立即数不合法 ldr r0,0x12345678 伪指令解决不合法的问题 前4位表示16个数,一个数移动2次。 …

C# Socket通信从入门到精通(4)——多个异步TCP客户端C#代码实现

前言: 在之前的文章C# Socket通信从入门到精通(3)——单个异步TCP客户端C#代码实现我介绍了单个异步Tcp客户端的c#代码实现,但是有的时候,我们需要连接多个服务器,并且对于每个服务器,我们都有一些比如异步连接、异步发送、异步接收的操作,那么这时候我们使用之前单个…

代码随想录 | Day56

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 今日学习目标一、算法题1.最长公共子序列2.不相交的线3.最大子数组和 今日心得学习及参考书籍 今日学习目标 最长公共子序列(1143) 不相交的…

LVS集群-DR模式

概念: LVS-DR模式,也是最常用的lVS负载方式,DR DIRECT ROUTING 直接路由模式 负载均衡器lVS调度器,只负责请求和转发到后端的真实服务器,但是影响结果,由后端服务器直接转发给客户端,不需要经…

Chimera:混合的 RLWE-FHE 方案

参考文献: [HS14] S. Halevi and V. Shoup. Algorithms in HElib. In Advances in Cryptology–CRYPTO 2014, pages 554–571. Springer, 2014.[HS15] S. Halevi and V. Shoup. Bootstrapping for HElib. In Advances in Cryptology–EUROCRYPT 2015, pages 641–6…

【vue3 】 创建项目vscode 提示无法找到模块

使用命令创建 vue3 创建新应用 npm create vuelatest会看到一些可选功能的询问? √ 请输入项目名称: … vue-project √ 是否使用 TypeScript 语法? … 否 / 是 √ 是否启用 JSX 支持? … 否 / 是 √ 是否引入 Vue Router 进行单…

Jenkins CLI二次开发工具类

使用Jenkins CLI进行二次开发 使用背景 公司自研CI/DI平台,借助JenkinsSonarQube进行代码质量管理。对接版本 Jenkins版本为:Version 2.428 SonarQube版本为:Community EditionVersion 10.2.1 (build 78527)技术选型 Java对接Jenkins有第…

Python —— UI自动化用例前置处理日志封装

1、UI自动化用例增加前置 1、fixture(夹具)的使用 前置顾名思义是在执行测试用例之前做的一些事情,在自动化测试时会碰到用例执行前需要做一些前置操作,以及用例执行后需要做一些后置操作,比如登录、退出等&#xff…

Leetcode—80.删除有序数组中的重复项II【中等】

2023每日刷题&#xff08;十&#xff09; Leetcode—80.删除有序数组中的重复项II 双指针实现代码 int removeDuplicates(int* nums, int numsSize){int i 0;int j 1;int k 1;int tmp nums[i];while(j < numsSize) {if(nums[j] tmp && k < 2) {nums[i] n…

YOLOv5— Fruit Detection

&#x1f368; 本文为[&#x1f517;365天深度学习训练营学习记录博客 &#x1f366; 参考文章&#xff1a;365天深度学习训练营-第7周&#xff1a;咖啡豆识别&#xff08;训练营内部成员可读&#xff09; &#x1f356; 原作者&#xff1a;[K同学啊 | 接辅导、项目定制](https…

P1868 饥饿的奶牛

根据题意可以知道是一个动态规划&#xff0c;看完数据范围之后可以知道是一个线性DP。 解决方法有点类似于背包问题&#xff0c;枚举背包的每一个空间。 如果把坐标轴上每个点都看成一个块儿&#xff0c;只需要按顺序求出前 i 个块儿的最大牧草堆数&#xff0c;f[i] 就是前i的…

【软考系统架构设计师】2023年系统架构师冲刺模拟习题之《软件工程》

在软考中软件工程模块主要包含以下考点&#xff1a; 文章目录 软件过程模型&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f;逆向工程&#x1f31f;基于构件的软件工程&#x1f31f;&#x1f31f;软件开发与软件设计与维护净室软件工程软件模型软件需求 软件过程模型&am…

支持向量机(SVM)

一. 什么是SVM 1. 简介 SVM&#xff0c;曾经是一个特别火爆的概念。它的中文名&#xff1a;支持向量机&#xff08;Support Vector Machine, 简称SVM&#xff09;。因为它红极一时&#xff0c;所以关于它的资料特别多&#xff0c;而且杂乱。虽然如此&#xff0c;只要把握住SV…

Kotlin中使用ViewBinding绑定控件并添加点击事件

文章目录 效果1、加入依赖2、与控件进行绑定在 Activity 中使用视图绑定 3、监听控件 效果 实现源码 class MainActivity : AppCompatActivity() {lateinit var binding:ActivityMainBindingoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstan…