随记——机器学习

news2024/9/27 11:30:58

前言

本来有个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.coloradmin.cn/o/2169845.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【HarmonyOS】SaveButton保存图片

SaveButton组件把图片显示到相册中的方法demo,支持组件截图、url网络图片、base64格式图片。注意事项: 1、不支持自定义SaveButton样式。 2、下载按钮被遮挡一部分,也无法保存到相册。 import photoAccessHelper from ohos.file.photoAcces…

使用 pypdf 给 PDF 添加目录书签

""" dir.txt的形式 第1章 计算机系统基础知识 1 1.1 嵌入式计算机系统概述 1 1.2 数据表示 4 1.2.1 进位计数制及转换 4 1.2.2 数值型数据的表示 6 第2章 嵌入式系统硬件基础知识 56 2.1 数字电路基础 56 2.1.1 信号特征 56 2.1.2 组合逻辑电路和时序逻辑电路 5…

为什么现在的网站设计大多都非常简洁,越来越扁平化

网站设计趋向简洁和扁平化,反映了现代设计理念的转变和技术的进步。以下是对这一现象的具体分析: 用户体验优先:用户更倾向于简单直接的界面,这有助于快速找到所需信息。扁平化设计通过减少视觉干扰,使得内容更加突出…

哪些因素会影响六西格玛效果的显现时间?

在探讨哪些因素会影响六西格玛效果的显现时间时,我们不得不深入剖析六西格玛管理方法的本质及其在企业中的实施过程。六西格玛作为一种旨在通过减少缺陷和变异来提高产品和服务质量的策略,其成功实施并非一蹴而就,而是受到多种复杂因素的共同…

Llama 系列简介与 Llama3 预训练模型推理

1. Llama 系列简介 1.1 Llama1 由 Meta AI 发布,包含 7B、13B、33B 和 65B 四种参数规模的开源基座语言模型 数据集:模型训练数据集使用的都是开源的数据集,总共 1.4T token 模型结构:原始的 Transformer 由编码器&#xff08…

Git 与远程分支

90.远程仓库和分支 我们经常需要对远程仓库里的分支进行更新。 ‍ 当从远程库 clone 时,默认情况下,只会拉取 master ​分支,并且会将本地的 master 分支和远程的 master 分支关联起来: $ git branch * master‍ ‍ 推送本地…

什么是分布式缓存,它是如何工作的?

嗨,你好啊,我是猿java 在日常开发中,我们经常会使用到缓存,当数据集较小时,通常将所有缓存数据保存在一台服务器上就足够了,但是当数据集较大时,我们需要将缓存数据分布在多个服务器上&#xf…

无线领夹麦克风怎么挑选?选购麦克风需要注意的五大选购陷阱!

无线领夹麦克风只所以成为现在自媒体行业的主流拾音设备,很大程度取决于它的轻巧的设计以及便携性。相较于传统的手持麦克风,领夹麦在使用时无需手持,直接佩戴在衣领上即可使用,腾出的双手可以更好的投入到录制当中,在…

Python与SQL Server数据库结合导出Excel并做部分修改

Python与SQL Server数据库结合导出Excel并做部分修改 需求:在数据库中提取需要的字段内容;并根据字段内容来提取与拆分数据做为新的列最后导出到Excel文件 # -*- coding: utf-8 -*- import pandas as pd import re import pymssql import timestart_ti…

Activiti的Web在线工作流设计器的几种搭建方式

说明 Activiti Activiti是一个使用Java开发的工作流流程管理(BPM)平台,可以帮助开发者和企业自动化管理业务流程。它提供了一整套工具,用于定义、执行、监控和优化业务流程。Activiti支持BPMN 2.0标准,具有强大的扩展能力和易用性&#xff…

Git GUI操作流程

1,点击运行 Gt GUI 2,界面如下 3,点击Creat new Repository或者在菜单栏点击Repository--new 4,点击Browse选择目录,点击create,创建本地git仓库 5,对应盘里生成一个.git文件,用于版本管理 6&am…

2024最新测评:低代码平台在企业复杂应用场景的适用性如何?

低代码平台种类多,不好一概而论。但最近有做部分低代码平台的测评,供大家参考。 一个月前接到老板紧急任务:调研有没有一款低代码平台能开发我司的软件场景。我司是一家快速发展中的制造业企业,业务遍布全国,需要一个…

DAY81服务攻防-开发框架安全SpringBootStruts2LaravelThinkPHPCVE 复现

知识点: 1、PHP-框架安全-Thinkphp&Laravel 2、J2EE-框架安全-SpringBoot&Struts2 常见语言开发框架: PHP:Thinkphp Laravel YII CodeIgniter CakePHP Zend等 JAVA:Spring MyBatis Hibernate Struts2 Springboot等 P…

Elasticsearch讲解

1.Elasticsearch基本知识 1.基本认识和安装 Elasticsearch是由elastic公司开发的一套搜索引擎技术,它是elastic技术栈中的一部分。完整的技术栈包括: Elasticsearch:用于数据存储、计算和搜索 Logstash/Beats:用于数据收集 Kib…

Dos.ORM简单说明

1 下载Dos.Tools-master 地址:Dos.Tool: 实体生成工具,成熟轻量级ORM、上手简单、性能高、功能强大! 2 Dos.ORM仅支持DbFirst模式,即必须先有数据库,这里以Sql Server为例 3 新建项目,添加引用Dos.ORM.dll&…

3.javaweb-Servlet与过滤器

javaweb-Servlet与过滤器 文章目录 javaweb-Servlet与过滤器一、Servlet:server applet二、Servlet做了什么?三、Servlet是什么?四、jsp与Servlet关系五、Servlet API1.主要Servlet API介绍2.如何创建Servlet3.Servlet中主要方法4.ServletReq…

使用Docker快速本地部署RSSHub结合内网穿透访问RSS订阅源

文章目录 前言1. Docker 安装2. Docker 部署Rsshub3. 本地访问Rsshub4. Linux安装Cpolar5. 配置公网地址6. 远程访问Rsshub7. 固定Cpolar公网地址8. 固定地址访问 前言 今天和大家分享的是如何在本地快速简单部署Rsshub工具,并结合cpolar内网穿透工具使用公网地址远…

ArcGIS Desktop使用入门(三)常用工具条——拓扑(下篇:地理数据库拓扑)

系列文章目录 ArcGIS Desktop使用入门(一)软件初认识 ArcGIS Desktop使用入门(二)常用工具条——标准工具 ArcGIS Desktop使用入门(二)常用工具条——编辑器 ArcGIS Desktop使用入门(二&#x…

mobaxterm、vscode通过跳板机连接服务器

目标服务器:111.111.11.11 跳板机:100.100.10.10 1. mobaxterm通过跳板机连接服务器 1.1 目标服务器信息 1.2 跳板机信息 1.3 登录 点击登录,会输入密码,成功 参考:https://blog.csdn.net/qq_40636486/article/det…

Linux 运维 | 6.从零开始,Shell编程中正则表达式 RegExp 速成指南

[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 ] 0x00 前言概述 在 Linux 运维以及Shell脚本编程中往往会使用到各种文本处理工具(例如,文本三剑客 awk、grep、sed)以及Shell脚本编程(后续作者会在#…