随记——机器学习

前言

本来有个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.mfbz.cn/a/883808.html

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

相关文章

onload_tcpdump命令抓包报错Onload stack [7,] already has tcpdump process

最近碰到Onload 不支持同时运行多个 tcpdump 进程的报错,实际上使用了ps查询当时系统中并没有tcpdump相关进程存在。需要重启服务器本机使用onload加速的相关进程后才能使用onload_tcpdump正常抓包,很奇怪,之前确实没遇到这样的问题&#xff…

李宏毅机器学习2023-HW10-Adversarial Attack

文章目录 TaskBaselineFGSM (Fast Gradient Sign Method (FGSM)I-FGSM(Iterative Fast Gradient Sign Method)MI-FGSM(Momentum Iterative Fast Gradient Sign Method)M-DI2-FGSM(Diverse Input Momentum Iterative Fast Gradient Sign Method) Reportfgsm attackJepg Compress…

【ADC】ΔΣ ADC 中数字滤波器的延迟以及 SAR ADC 与 ΔΣ ADC 的差异对比总结

本文学习于TI 高精度实验室课程,深入探讨 delta-sigma 转换器中使用的数字滤波器。具体来说,本文将重点介绍数字滤波器如何引入延迟,因为这是 SAR 和 delta-sigma ADC 之间的显著差异。 文章目录 一、低延迟数字滤波器二、高延迟数字滤波器三…

探索EasyCVR视频融合平台:在视频编解码与转码领域的灵活性优势

随着视频监控技术的飞速发展,各类应用场景对视频数据的处理需求日益复杂多样。从公共安全到智慧城市,再到工业监控,高效、灵活的视频处理能力成为衡量视频融合平台性能的重要标准。在众多解决方案中,EasyCVR视频融合平台凭借其在视…

大规模预训练语言模型的参数高效微调

人工智能咨询培训老师叶梓 转载标明出处 大规模预训练语言模型(PLMs)在特定下游任务上的微调和存储成本极高,这限制了它们在实际应用中的可行性。为了解决这一问题,来自清华大学和北京人工智能研究院的研究团队探索了一种优化模型…

基础漏洞——SSRF

目录 一.原理 二.引起ssrf的函数 三.这些函数具体作用 (1)File_get_content() (2)Fsockopen() (3)Curl_exec() 四.常见的业务场景(可能出现的漏洞的地方,漏洞挖掘&#xff09…

展锐平台的手机camera 系统isptool 架构

展锐平台的isptool 主要用于支持展锐各代芯片isp的各效果模块快速tuning和参数生成打包。 具体需要: 一、工具段能在线实时预览到调试sensor经过isp 处理后的图像,也就是各模块的参数在当下实时生效,通过工具能在PC 上在线观看到修改的效果。…

【理解 Java 中的 for 循环】

理解 Java 中的 for 循环 for 循环是 Java 中用于迭代的常用控制结构,它可以帮助我们重复执行某段代码,直到满足特定条件。本文将介绍 for 循环的基本语法、执行流程、注意事项及一些练习。 基本语法 for 循环的基本语法如下: for (循环变…

FBX福币连续2天破万亿,沪指重回3000点,后续怎么走?

查查配分析今日,A股继续强势上攻。有关#A股重回3000点#、#A股成交额连续2天破万亿#的讨论迅速登上微博热搜。 FBX福币凭借用户友好的界面和对透明度的承诺,迅速在加密货币市场中崭露头角,成为广大用户信赖的平台。 白马蓝筹股领涨市场,上证50指数劲升逾4.69%,创近4个月来新高,…

Java语法-类和对象之继承与多态(中)

1. 继承 为什么要继承? 从生物学角度来说,继承就是把父辈的基因遗传给子代,然后子代再在细胞分裂的途中产生变异,生成比父辈更加适应环境的物种.其中很重要的就是继承给子代的基因(父类的方法和属性)和子代在父辈的基础上产生的变异(方法的重写). 比如猫和狗都是哺乳动物,是在…

了解独享IP的概念及其独特优势

在网络世界中,IP地址是用来识别和定位设备的标识符。独享IP是一种服务模式。使用代理服务器时,用户拥有一个不与其他用户共享的专用独立IP地址。与共享IP相比,独享IP为用户提供了更高的独立性和隐私保护。下面详细介绍独享IP的定义、工作原理…

什么是unix中的fork函数?

一、前言 在本专栏之前的文档中已经介绍过unix进程环境相关的概念了,本文将开始介绍unix中一个进程如何创建出新进程,主要是通过fork函数来实现此功能。本文将包含如下内容: 1.fork函数简介 2.父进程与子进程的特征 3.如何使用fork创建新进程…

C语言实现归并排序(Merge Sort)

目录 一、递归实现归并排序 1. 归并排序的基本步骤 2.动图演示 3.基本思路 4.代码 二、非递归实现 1.部分代码 2.代码分析 修正后代码: 归并过程打印 性能分析 复杂度分析 归并排序是一种高效的排序算法,采用分治法(Divide and Con…

Spring6梳理13——依赖注入之引入集合Bean属性

以上笔记来源: 尚硅谷Spring零基础入门到进阶,一套搞定spring6全套视频教程(源码级讲解)https://www.bilibili.com/video/BV1kR4y1b7Qc 13 依赖注入之引入集合Bean属性 13.1 创建Lesson类,student类和teacher实体类…

Ansbile-变量

文章目录 零、Ansible的事实变量和内置变量?Ansible 的内置变量Ansible 的事实变量示例 一、Ansible的事实变量有哪些(不全)1. ansible_hostname2. ansible_fqdn3. ansible_os_family4. ansible_distribution5. ansible_version6. ansible_al…

从 Shapley 到 SHAP — 数学理解

如何计算 SHAP 特征贡献的概述 假设你(玩家 1)和朋友(玩家 2)参加了一场 Kaggle 比赛,你最终赢得了 10,000 元的一等奖。现在,你想公平地分配这笔钱。你的朋友建议你平分。但是,你的超参数调整技能更出色。你相信你应该得到更大的份额,因为你为团队做出了更多贡献。考虑…

如何在Windows和Linux之间实现粘贴复制

第一步 sudo apt-get autorremove open-vm-tools第二步 sudo apt-get update第三步 sudo apt-get install open-vm-tools-desktop第四步 一直按Y,希望执行 Y第四步 重启 reboot然后可以实现粘贴复制。

MySQL连接查询解析与性能优化成本

文章目录 一、连接查询1.连接查询基础1. INNER JOIN内连接2. LEFT JOIN (或 LEFT OUTER JOIN)左外连接3. RIGHT JOIN (或 RIGHT OUTER JOIN)右外连接4. FULL OUTER JOIN 2.连接查询的两种过滤条件3.连接的原理 二、性能优化成本1.基于成本的优化2.调节成本常数(1)mysql.server_…

如何在Markdown写文章上传到wordpress保证图片不丢失

如何在Markdown写文章上传到wordpress保证图片不丢失 写文日期,2023-11-16 引文 众所周知markdown是一款nb的笔记软件,本篇文章讲解如何在markdown编写文件后上传至wordpress论坛。并且保证图片不丢失(将图片上传至云端而非本地方法) 一&…

WSL进阶体验:gnome-terminal启动指南与中文显示问题一网打尽

起因 我们都知道 wsl 启动后就死一个纯命令行终端,一直以来我都是使用纯命令行工具管理Linux的。今天看到网上有人在 wsl 中启动带图形界面的软件。没错,就是在wsl中启动带有图形界面的Linux软件。比如下面这个编辑器。 ​​ 出于好奇,我就…