随记——机器学习

前言

本来有个500块钱的单子,用机器学习做一个不知道什么鸟的识别,正好有数据集,跑个小项目,过一下机器学习图像识别的流程,用很短的时间记录下来.....

一、数据预处理

将数据集分为训练集和测试集,直接使用sklearn库就行,这是一个机器学习的库,我就知道这么多,能用就用上,怎么用,组织好prompt问gpt就好了,也足够了.....

使用train_test_split了解了一个参数,想了两个问题,记录一下吧!

random_state=42train_test_split 函数中的一个参数,用于控制随机数生成器的种子。

作用:

  1. 可重复性:设置随机种子后,每次运行代码时,数据集的划分结果(训练集和测试集的样本)都是相同的。这在调试和实验时非常重要,可以确保你得到一致的结果。

  2. 随机性:当你不设置 random_state(或者将其设为 None)时,train_test_split 每次运行可能会产生不同的训练集和测试集。这可能导致模型的性能评估不一致。

为什么是42?

42 常被用作随机数生成的“宇宙的终极答案”,这个数字在编程和数学中有一种幽默的文化象征。实际上,你可以选择任何整数作为种子,使用相同的种子将得到相同的划分结果。因此,选择42只是一个约定,任何其他整数都可以达到相同的效果。

from sklearn.model_selection import train_test_split
import os
import numpy as np
import cv2# 定义数据集的路径
dataset_path = './syh'  # 替换为你的小狗图片数据集的路径# 获取数据集中的所有图片文件名
all_images = [f for f in os.listdir(dataset_path) if f.endswith('.jpg') or f.endswith('.png')]
all_image_paths = [os.path.join(dataset_path, img) for img in all_images]# 使用train_test_split将数据集分为训练集和测试集
train_images, test_images = train_test_split(all_image_paths, test_size=0.1, random_state=42)
print(train_images)
print(test_images)

二、提取特征和标签

这个代码注意一下几点:

1、提取特征点有很多种方法,由于之前搞过视觉slam,知道slam系统的原理所以知道一些,这里用的是ORB,是因为情怀,我第一个slam系统就是ORB-slam,大家也可以试试其他SIFT、‌SURF等等.....

2、因为任务是识别是不是就ok了,我的label是随机0和1,但是图片应该都是正标签,我懒得找负标签了,大家可以多种类的话,标签是文件夹名称就好了(要改一下数据预处理的代码哦),可以改一下试试......

3、描述子我只取了前100个展平,是因为在对高维度list列表进行转换时,里面的子列表长度不同导致转换成numpy的失败,后续可以试试弄一个很长的全是0的去填充,效果可能会好,毕竟“特征”多了嘛.....

# 提取特征和标签
def extract_features(image_paths):features = []labels = []orb = cv2.ORB_create()  # 创建ORB特征检测器for img_path in image_paths:img = cv2.imread(img_path)  # 读取图像gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 转为灰度图keypoints, descriptors = orb.detectAndCompute(gray, None)  # 提取关键点和描述符if descriptors is not None:  # 如果有描述符# 仅保留前N个特征,或对描述符进行处理features.append(descriptors[:100].flatten())  # 保留前100个描述符并展平random_labels = np.random.randint(0, 2)labels.append(random_labels)  # 假设标签为文件名的前缀return np.array(features), np.array(labels)# 提取训练集和测试集的特征
X_train, y_train = extract_features(train_images)
print(X_train)
print(y_train)
X_test, y_test = extract_features(test_images)
print(X_test)
print(y_test)

三、定义模型、训练模型、推理模型

使用直接使用sklearn库,几行代码就ok了,刚开始学习的我建议,点进去看看源码(我没看过,有时间看看吧,不过估计过段时间就忘了,不会看的),根据自己掌握的原理,看看代码中模型是怎么定义的,用相同的数据集,可以看看这三个在图像识别上哪个效果好,有时候简单的任务可以直接用机器学习解决的最好用,就跟搞对象一样,合适才是最好的,哈哈哈!

from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score# 定义并训练SVM分类器
svm_classifier = SVC(kernel='linear')  # 使用线性核SVM
svm_classifier.fit(X_train, y_train)  # 训练模型
y_pred_svm = svm_classifier.predict(X_test)  # 对测试集进行预测
accuracy_svm = accuracy_score(y_test, y_pred_svm)  # 计算准确率
print(f"SVM测试集准确率: {accuracy_svm * 100:.2f}%")  # 输出准确率# 定义并训练决策树分类器
dt_classifier = DecisionTreeClassifier()  # 创建决策树分类器
dt_classifier.fit(X_train, y_train)  # 训练模型
y_pred_dt = dt_classifier.predict(X_test)  # 对测试集进行预测
accuracy_dt = accuracy_score(y_test, y_pred_dt)  # 计算准确率
print(f"决策树测试集准确率: {accuracy_dt * 100:.2f}%")  # 输出准确率# 定义并训练KNN分类器
knn_classifier = KNeighborsClassifier(n_neighbors=3)  # 使用KNN分类器,选择邻居数为3
knn_classifier.fit(X_train, y_train)  # 训练模型
y_pred_knn = knn_classifier.predict(X_test)  # 对测试集进行预测
accuracy_knn = accuracy_score(y_test, y_pred_knn)  # 计算准确率
print(f"KNN测试集准确率: {accuracy_knn * 100:.2f}%")  # 输出准确率

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于SpringBoot校园失物招领系统设计与实现

文未可获取一份本项目的java源码和数据库参考。 本课题的作用、意义,在国内外的研究现状和发展趋势,尚待研究的问题 作用:本课题的目的是使失物招领信息管理清晰化,透明化,便于操作,易于管理。通过功能模…

vue3 选择字体的颜色,使用vue3-colorpicker来选择颜色

1、有的时候我们会用到颜色的选择器,像element-plus提供了,但是ant-design-vue并没有: 这个暂时没有看到: 但是Ant Design 5的版本有,应该不是vue的。 2、使用第三方提供的vue3-colorpicker:storybook/cli…

【Gitee自动化测试3】Git的本地使用,和在Gitee上使用

一. 创建版本库 存放项目,项目的删除更改,版本库都能够监控。 创建一个文件夹(不要包含中文路径),右键选择Git Bash Here(打开Git终端) 输入git init 对文件夹进行版本库的初始化,…

【CSS】背景

background-color 颜色background-image 图像background-size 缩放background-repeat 平铺background-position 定位background-clip 裁剪区域background-origin 开始区域background-attachment 滚动方式 background-color 颜色 <style>div{width: 200px;height: 100px;…

LeetCode - 850 矩形面积 II

题目来源 850. 矩形面积 II - 力扣&#xff08;LeetCode&#xff09; 题目描述 给你一个轴对齐的二维数组 rectangles 。 对于 rectangle[i] [x1, y1, x2, y2]&#xff0c;其中&#xff08;x1&#xff0c;y1&#xff09;是矩形 i 左下角的坐标&#xff0c; (xi1, yi1) 是该…

【机器学习】探索LSTM:深度学习领域的强大时间序列处理能力

目录 &#x1f354; LSTM介绍 &#x1f354; LSTM的内部结构图 2.1 LSTM结构分析 2.2 Bi-LSTM介绍 2.3 使用Pytorch构建LSTM模型 2.4 LSTM优缺点 &#x1f354; 小结 学习目标 &#x1f340; 了解LSTM内部结构及计算公式. &#x1f340; 掌握Pytorch中LSTM工具的使用. &…

【react案例】实现评论列表

1. 需求 展示评论列表实现删除功能 2.1 只有自己的评论才展示删除按钮 2.2 点击删除按钮&#xff0c;删除当前评论tab切换&#xff08;点击对应tab&#xff0c;对tab文案高亮处理&#xff09;评论高亮评论排序&#xff08;最新、最热&#xff09; 2. 实现思路 useState维护评…

【小程序】uniapp自定义图标组件可动态更换svg颜色

组件描述 通过图标名称加载对应svg&#xff0c;size参数调整图标大小&#xff0c;color参数调整图标颜色 解决思路&#xff1a; 存svg获svg&#xff0c;对象方式正则替换svg的fill值&#xff0c;不改变源文件&#xff0c;通过base64直接加载缓存svg源文件&#xff0c;避免重…

Android 通过自定义注解实现Activity间跳转时登录路由的自动拦截

应用场景 在Android 中部分软件需要登录才能使用&#xff0c;但是有的页面又不需要登录&#xff0c;Android不同于Web可以直接拦截重定向路由&#xff0c;因此如果在Android中如果需要检测是否登录&#xff0c;如果没登录跳转登录的话就需要再每个页面中判断&#xff0c;当然也…

Leetcode面试经典150题-39.组合总和

给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的 同一个 数字可以 无限制重复被选取 。如…

高级算法设计与分析 学习笔记9 跳表

单链表的样子我们很熟悉了&#xff1a; 怎么加快查找&#xff1f;&#xff1a; 查找的具体方法&#xff1a; 超过了就回头下去。 这条“快速路”最好是几个节点呢&#xff1f;&#xff1a; 假如我们弄好多层跳表呢&#xff1f;&#xff1a; 给弄成2叉树了&#xff01; 如何插入…

堆的数组实现

目录 一、堆 二叉树的顺序结构 堆的概念及结构 1.概念 2.堆的分类 (1)大堆 (2)小堆 二、利用数组(顺序结构)实现堆的过程 1.利用数组实现堆的思路 2.堆是用数组实现的&#xff0c;在数组中通过双亲找自己左右孩子、通过左右孩子找自己双亲的思路 2.1.思路 2.2.孩子与…

【YashanDB知识库】YMP迁移oracle不兼容给用户授权高级包

本文转自YashanDB官网&#xff0c;具体内容请见https://www.yashandb.com/newsinfo/7441382.html?templateId1718516 【标题】YMP迁移oracle不兼容给用户授权高级包 【关键字】oracle迁移&#xff0c;高级包授权 【问题描述】迁移评估任务中&#xff0c;oracle迁移YashanDB…

FOC电机驱动开发踩坑记录

关键技术 SVPWM电机磁场控制电流采样park变换和Clark变换滑膜观测器&#xff08;无感FOC&#xff09; SVPWM电机磁场控制 SVPWM主要思想是通过精确的对UVW三相电流的分时控制&#xff0c;来控制转子的合成力矩&#xff0c;达到目标方向&#xff0c;常用的是6分区的设计&…

RabbitMQ 高级特性——重试机制

文章目录 前言重试机制配置文件设置生命交换机、队列和绑定关系生产者发送消息消费消息 前言 前面我们学习了 RabbitMQ 保证消息传递可靠性的机制——消息确认、持久化和发送发确认&#xff0c;那么对于消息确认和发送方确认&#xff0c;如果接收方没有收到消息&#xff0c;那…

C++类和对象——第二关

目录 类的默认成员函数&#xff1a; &#xff08;一&#xff09;构造函数 &#xff08;二&#xff09;析构函数 &#xff08;三&#xff09;拷贝构造函数 类的默认成员函数&#xff1a; 类里面有6个特殊的成员函数分别包揽不同的功能; &#xff08;一&#xff09;构造函数…

极狐GitLab 17.4 升级指南

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab https://dl.gitlab.cn/6y2wxugm 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 本文分享极狐GitLab 17.4 升级…

老人跌倒扶不扶?涪城三职工给出响亮答案

一、关键时刻的选择 于绵阳市三江湖湿地公园&#xff0c;平凡午后&#xff0c;三名环卫人员刘后刚、严荣礼及杨树坤正紧张作业。突闻呼救声&#xff0c;一位老人在石阶上跌倒需援手。在紧急关头&#xff0c;他们果断抛却工具&#xff0c;疾速赶至老人身边。此举不仅展现了他们…

MySQL数据库进阶知识(四)《视图、存储过程、触发器》

学习目标&#xff1a; 掌握数据库视图基础知识 掌握数据库存储过程原理 掌握数据库触发器相关知识 学习内容&#xff1a; 一. 视图 介绍 视图&#xff08;View&#xff09;是一种虚拟存在的表。视图中的数据并不在数据库中实际存在&#xff0c;行和列数据来自定义视图的查询…

JPEG图像的DCT(Discrete Cosine Transform)变换公式代码详解

引 言 网络上图像在传输过程中为节省内存空间主要采用jpeg格式。jpeg图属于有损压缩图像的一种。在图像篡改检测过程中&#xff0c;可以利用jpeg图像的单双压缩伪影的不同而判别图像为伪造图并可以定位伪造区域。RGB图像变成jpeg图像过程中涉及从RGB图变成YCbCr图像&#xff0c…