当前位置: 首页 > news >正文

随记——机器学习

前言

本来有个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}%")  # 输出准确率

相关文章:

随记——机器学习

前言 本来有个500块钱的单子,用机器学习做一个不知道什么鸟的识别,正好有数据集,跑个小项目,过一下机器学习图像识别的流程,用很短的时间记录下来..... 一、数据预处理 将数据集分为训练集和测试集,直接…...

【在Linux世界中追寻伟大的One Piece】进程间通信

目录 1 -> 进程间通信介绍 1.1 -> 进程间通信目的 1.2 -> 进程间通信发展 1.3 -> 进程间通信分类 1.3.1 -> 管道 1.3.2 -> System V IPC 1.3.3 -> POSIX IPC 2 -> 管道 2.1 -> 什么是管道 2.2 -> 匿名管道 2.3 -> 实例代码 2.4 -…...

多路复用IO

一。进程处理多路IO请求 在没有多路复用IO之前,对于多路IO请求,一般只有阻塞与非阻塞IO两种方式 1.1 阻塞IO 需要结合多进程/多线程,每个进程/线程处理一路IO 缺点:客户端越多,需要创建的进程/线程越多&#xff0c…...

C++ prime plus-7-編程練習

1&#xff0c; #include <iostream>// 函数声明 double harmonicMean(double x, double y);int main() {double x, y, result;while (true) {std::cout << "请输入两个数&#xff08;其中一个为0时结束&#xff09;: ";std::cin >> x >> y;…...

计算1 / 1 - 1 / 2 + 1 / 3 - 1 / 4 + 1 / 5 …… + 1 / 99 - 1 / 100 的值,打印出结果

我们写这道题的时候需要俩变量接受&#xff0c;一个总数一个分母&#xff0c;我们发现分母变化是有规律的从1~100循环。 #include<stdio.h> int main() {int i 0;int tag 1;double sum 0.0;for (i 1; i < 101; i){if (i % 2 0){sum sum - 1.0 / i;}else{sum s…...

Linux本地服务器搭建开源监控服务Uptime Kuma与远程监控实战教程

文章目录 前言**主要功能**一、前期准备本教程环境为&#xff1a;Centos7&#xff0c;可以跑Docker的系统都可以使用本教程安装。本教程使用Docker部署服务&#xff0c;如何安装Docker详见&#xff1a; 二、Docker部署Uptime Kuma三、实现公网查看网站监控四、使用固定公网地址…...

JS 历史简介

目录 1. JS 历史简介 2. JS 技术特征 1. JS 历史简介 举例&#xff1a;在提交用户的注册信息的时候&#xff0c;为避免注册出现错误后重新填写信息&#xff0c;可以在写完一栏信息后进行校验&#xff0c;并提示是否出现错误&#xff0c;这样会大大提高用户提交的成功率&…...

爬虫逆向学习(七):补环境动态生成某数四代后缀MmEwMD

声明&#xff1a;本篇文章内容是整理并分享在学习网上各位大佬的优秀知识后的实战与踩坑记录 前言 这篇文章主要是研究如何动态生成后缀参数MmEwMD的&#xff0c;它是在文章爬虫逆向学习(六)&#xff1a;补环境过某数四代的基础上进行研究的&#xff0c;代码也是在它基础上增…...

光伏电站并网验收需要注意什么细节

一、设备质量及安装验收 光伏组件&#xff1a;检查光伏组件的外观是否完好无损&#xff0c;无明显的缺陷和破损&#xff0c;表面是否清洁无污染。同时&#xff0c;需要验证光伏组件的型号、参数是否与设备台账资料一致。 逆变器&#xff1a;确认逆变器具备防雷、防尘、防潮等…...

页面禁用鼠标右键属于反爬虫措施吗 ?

是的&#xff0c;禁用鼠标右键通常被视为一种反爬虫&#xff08;anti-scraping&#xff09;措施。网站开发者常常采用这种技术来防止用户通过右键菜单复制文本、图像或其他内容&#xff0c;特别是在内容保护和数据安全方面。以下是禁用鼠标右键的一些背景和目的&#xff1a; 1…...

视频理解大模型最新进展

文章目录 Video-LLaMAVision-Language BranchAudio-Language Branch Video-ChatGPTMiniGPT4-videoCogVLM2-Video&#xff08;1&#xff09;Pre-training&#xff08;2&#xff09;Post-training Qwen2-VLMA-LMMChat-UniVi大模型对比 Video-LLaMA 2023&#xff1a;阿里达摩院的…...

cocos creator 使用 protobuf 的步骤与注意事项

移除可能曾安装过的protobuf // 移除全局 npm remove -g protobufjs npm remove -g protobufjs-cli npm remove -g pbjs // 移除项目中的 npm remove --save protobufjs npm remove --save protobufjs-cli npm remove --save pbjs全局安装 npm i -g protobufjs //或者 cnpm …...

mac访达查找文件目录

mac访达查找文件目录 在Mac上使用访达&#xff08;Finder&#xff09;查找文件或目录的方法如下&#xff1a; 打开访达。 在访达窗口的侧边栏中&#xff0c;选择“ Go to Folder”&#xff08;转到文件夹&#xff09;选项&#xff0c;或者使用快捷键ShiftCommandG打开一个对…...

【数据结构】点分治 点分树

求树上长度小于等于k的路径 #include <iostream> #include <cstring> #include <algorithm>using namespace std;const int N 10010, M N * 2;int n, m; int h[N], e[M], w[M], ne[M], idx; //邻接表 bool st[N]; //记录每个点是否被删掉 int p[N]; //存储…...

K8s Calico替换为Cilium,以及安装Cilium过程(鲁莽版)

迁移CNI插件的3种办法&#xff1a; 1、创建一个新的集群&#xff0c;通过Gitops的方式迁移负载&#xff0c;然而&#xff0c;这可能涉及大量的准备工作和潜在的中断。 2、另一种方法是重新配置/etc/cni/net.d/指向Cilium。但是&#xff0c;现有的pod仍将由旧的…...

背景图鼠标放上去切换图片过渡效果

文章目录 css鼠标放上去之前效果鼠标放上去时效果 css <li class"message"></li>.message {width: 22px;height: 22px;background-image: url(/assets/message-01.png);background-size: cover;background-position: center;transition: background-ima…...

【Linux】当前进展

驱动层日志添加了下文件目录&#xff0c;函数&#xff0c;代码行的打印&#xff08;这里要小心&#xff0c;驱动目录源代码打印日志里边添进程号可能有问题&#xff0c;因为在驱动初始化的时候&#xff0c;内核还没有创建进程&#xff0c;不过猜测可以先不打印进程相关信息&…...

阿里云云效多个ssh密钥对配置

实现功能 windows本地多个ssh密钥对,分别对应不同的阿里云账号的云效 实现办法 1.生成ssh密钥对 ssh-keygen -t rsa -f C:\xxx\id_rsa_customname(我这里C:\Users\admin\.ssh\id_rsa_customname) 2.配置.ssh目录的config文件 # ruiyi Host customnameHostName codeup.al…...

前后端跨域问题及其在ThinkPHP中的解决方案

在现代Web开发中&#xff0c;前后端分离的架构越来越普遍&#xff0c;但这也带来了跨域问题。跨域指的是在一个域下的网页试图请求另一个域的资源&#xff0c;浏览器出于安全考虑会限制这种行为。本文将探讨如何在ThinkPHP中解决跨域问题。 #### 1. 什么是跨域&#xff1f; 跨…...

基于CentOS7上安装MicroK8s(最小生产的 Kubernetes)

简介 MicroK8s是一个轻量级的Kubernetes发行版,其内存和存储要求远低于全尺寸Kubernetes集群。它可以在几分钟内通过一条命令快速创建功能齐全的Kubernetes集群,极大地简化了部署过程。 兼容性:MicroK8s与Kubernetes全面兼容,确保用户可以无缝迁移和扩展他们的应用程序。 …...

实时行情系统设计:从协议选择到高可用架构,再到数据源选型

一、核心问题及解决方案&#xff08;按踩坑频率排序&#xff09; 问题 1&#xff1a;误删他人持有锁——最基础也最易犯的漏洞 成因&#xff1a;释放锁时未做身份校验&#xff0c;直接执行 DEL 命令删除键。典型场景&#xff1a;服务 A 持有锁后&#xff0c;业务逻辑耗时超过锁…...

VideoSrt:零基础视频字幕自动化解决方案

VideoSrt&#xff1a;零基础视频字幕自动化解决方案 【免费下载链接】video-srt-windows 这是一个可以识别视频语音自动生成字幕SRT文件的开源 Windows-GUI 软件工具。 项目地址: https://gitcode.com/gh_mirrors/vi/video-srt-windows 视频创作者的效率痛点&#xff1a…...

提升开发效率:IntelliJ IDEA必备插件推荐与安装指南(2023最新版)

2023年IntelliJ IDEA插件生态深度解析&#xff1a;从效率工具到全栈开发支持 JetBrains家族的IntelliJ IDEA早已超越普通代码编辑器的范畴&#xff0c;成为现代开发者手中的瑞士军刀。但鲜有人意识到&#xff0c;真正让这把军刀所向披靡的&#xff0c;是背后超过5000个官方认证…...

Virtualbox “Kernel driver not installed (rc=-1908)”问题全面解析与修复指南

1. 遇到Virtualbox "Kernel driver not installed (rc-1908)"错误怎么办&#xff1f; 最近在Ubuntu系统上更新后&#xff0c;突然发现Virtualbox无法正常启动虚拟机了&#xff0c;屏幕上赫然显示着"Kernel driver not installed (rc-1908)"的错误提示。作为…...

Matlab数字图像处理核心项目实践:包含直方图均衡、空间过滤器增强、傅立叶变换与频域滤波、噪...

Matlab数字图像处理 包含以下内容&#xff1a; 项目 1&#xff1a;直方图均衡 项目 2&#xff1a;使用空间过滤器增强图像 项目 3&#xff1a;频域中的傅立叶变换和滤波 项目 4&#xff1a;噪声模型和降噪 项目 5&#xff1a;使用逆滤波器和维纳滤波器进行图像恢复 项目 6&…...

Lychee Rerank MM GPU算力:Qwen2.5-VL 7B模型在A10上16GB显存高效运行

Lychee Rerank MM GPU算力&#xff1a;Qwen2.5-VL 7B模型在A10上16GB显存高效运行 1. 引言&#xff1a;当多模态检索遇到“选择困难症” 想象一下&#xff0c;你正在一个庞大的多媒体资料库里搜索。你输入“一只在草地上玩耍的棕色小狗”&#xff0c;系统返回了100个结果&…...

HUNYUAN-MT 7B翻译终端性能展示:并发请求压力测试与响应时间报告

HUNYUAN-MT 7B翻译终端性能展示&#xff1a;并发请求压力测试与响应时间报告 最近在星图GPU平台上部署了HUNYUAN-MT 7B翻译终端&#xff0c;很多朋友都好奇它的实际表现到底怎么样。特别是当多个用户同时使用时&#xff0c;它还能不能保持快速响应&#xff1f;会不会因为压力太…...

Windows 11本地Ollama大模型部署实战指南

1. Windows 11本地部署Ollama大模型的前期准备 最近在折腾本地大模型部署&#xff0c;发现Ollama这个工具确实挺适合新手入门的。相比其他复杂的部署方案&#xff0c;Ollama在Windows平台上的安装过程简单明了&#xff0c;而且支持多种主流开源大模型。不过在实际操作中&#x…...

Nano Banana Images API 集成指南

本文将介绍如何集成和使用 Nano Banana Images API。这一接口支持两种功能&#xff1a;图像生成 (generate) 和 图像编辑 (edit)。无论是创建独特的艺术作品&#xff0c;还是对现有图像进行修改&#xff0c;Nano Banana 都能满足您的需求。 环境准备 在使用该 API 之前&#…...

COMSOL实现煤层注气THM耦合的甲烷开采效果模拟与可视化分析

一、COMSOL实现煤层注气热力流THM耦合下增强甲烷开采 本案例采用热力流三场耦合&#xff0c;分析煤层注入CO2增强甲烷开采效果&#xff0c;涉及热-流-固数学模型、多气相介质作用&#xff0c;全部为PDE模块 二、可以出煤层温度、瓦斯含量、渗透率等许多云图及数据&#xff0c;仅…...