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

《机器学习》——支持向量机(SVM)

文章目录

  • 什么是支持向量机?
    • 基本原理
    • 数学模型
  • 支持向量机模型
    • 模型参数
    • 属性信息
  • 支持向量机实例(1)
    • 实例步骤
    • 读取数据
    • 可视化原始数据
    • 使用支持向量机训练
    • 可视化支持向量机结果
    • 完整代码
  • 支持向量机实例(2)
    • 实例步骤
    • 导入数据
    • 处理数据
    • 切分划分数据
    • 创建SVM模型
    • 训练数据
    • 测试数据
      • 自测
      • 测试集测试
    • 得到分类报告及准确率
    • 完整代码
    • 与KNN算法准确率做对比
      • KNN完整代码

什么是支持向量机?

  • 支持向量机(Support Vector Machine,SVM)是一种监督式学习的分类算法,也可用于回归分析。它的主要目标是在特征空间中找到一个最优的超平面,从而将不同类别的数据点尽可能分开。这个超平面被定义为能够使两类数据之间的间隔(Margin)最大的平面。

基本原理

  • 线性可分情况
    • 假设有两类数据点,分别标记为正类和负类。在二维空间中,这些数据点可以用平面直角坐标系中的点来表示。如果这些数据是线性可分的,那么可以找到一条直线(在高维空间中是超平面)将这两类数据分开。

    • 在这里插入图片描述

    • 支持向量机在寻找这个分离超平面时,不仅要找到能分开两类数据的平面,还要使这个平面到两类数据中最近的数据点的距离最大。这些最近的数据点就被称为支持向量。

  • 非线性可分情况
    • 当数据在原始空间中不是线性可分的时候,支持向量机通过使用核函数(Kernel Function)将原始数据映射到一个高维空间,使得在高维空间中数据变得线性可分。

    • 在这里插入图片描述

    • 例如,在二维平面上有一个圆形分布的数据,正类在圆内,负类在圆外,这在二维空间中无法用直线分开。但是通过核函数将其映射到三维空间后,就可能找到一个平面将它们分开。常用的核函数有线性核多项式核高斯核径向基函数核)等。

数学模型

  • 目标函数
    • 在这里插入图片描述
  • 拉格朗日乘子法求解
    • 在这里插入图片描述

支持向量机模型

在这里插入图片描述

模型参数

重要的参数有:C、kernel、degree、gamma。

  • C:
    • 惩罚因子【浮点数,默认为1.】【软间隔】
    • (1)C越大,对误分类的惩罚增大,希望松弛变量接近0,趋向于对训练集全分对的情况,这样对训练集测试时准确率很高,但泛化能力弱;
    • (2)C值小,对误分类的惩罚减小,允许容错,将他们当成噪声点,泛化能力较强。
    • ->>建议通过交叉验证来选择
  • kernel:
    • 核函数【默认rbf(径向基核函数|高斯核函数)】
    • 可以选择线性(linear)、多项式(poly)、sigmoid
    • ->>多数情况下选择rbf
  • degree:
    • 【整型,默认3维】
    • 多项式poly函数的维度,默认是3,选择其他核函数时会被忽略。
    • ->>按默认【选择rbf之后,此参数不起作用】
    • 在这里插入图片描述
    • 指上面式子中的n
  • gamma:
    • ‘rbf’,‘poly’ 和‘sigmoid’的核函数参数。默认是’auto’。
    • (1)如果gamma是’auto’,那么实际系数是1 / n_features,也就是数据如果有10个特征,那么gamma值维0.1。(sklearn0.21版本)
    • (2)在sklearn0.22版本中,默认为’scale’,此时gamma=1 / (n_features*X.var())#X.var()数据集所有值的方差。
    • <1>gamma越大,过拟合风险越高
    • <2> gamma越小,过拟合风险越低
    • ->>建议通过交叉验证来选择
  • coef0:
    • 核函数中的独立项。多项式的偏置项。它只在’poly’和’sigmoid’中很重要。
  • probability :
    • 是否启用概率估计。允许在模型训练完成后,使用predict_proba方法来预测每个类别的概率,而不是仅仅给出类别的预测结果。必须在调用fit之前启用它,并且会减慢该方法的速度。默认为False
    • ->>按默认即可【选择rbf之后,不起作用】
  • cache_size:
    • 核函数cache缓存大小,默认为200MB
    • ->>不用调整
  • class_weight:
    • 类别的权重,字典形式传递。默认’balanced’
    • ->>按默认设置

属性信息

  • support_vectors_ 【支持向量】
    • 以数组的形式储存
  • n_support_ 【每个类别支持向量的个数】
    • int类型
  • coef_ 【参数w】
    • 数组的形式储存
  • intercept_ 【偏置项参数b】
    • 数组的形式储存

支持向量机实例(1)

实例要求:从鸢尾花数据中,对鸢尾花进行分类。
数据内容:数据中共有100条样本数据,6列,其中第一列为编号数据,最后一列为标签数据,其余4列为特征数据。且前50行数据的标签为0,后50行数据标签为1.
在这里插入图片描述

数据:通过网盘分享的文件:iris.csv
链接: https://pan.baidu.com/s/1ssc_VSVSUbkzz2-SOipV9w 提取码: jq54

实例步骤

  • 读取数据
  • 可视化原始数据
  • 使用支持向量机训练
  • 可视化支持向量机结果
    • 绘制分割线和间隔边界、支持向量

读取数据

import pandas as pd
data = pd.read_csv(r'D:\where-python\python-venv\ji_qi_xue_xi_demo\朴素贝叶斯\iris.csv', header=None)
# header=None 为没有表头

可视化原始数据

import matplotlib.pyplot as plt# 选取数据的前 50 行
data1 = data.iloc[:50, :]
# 选取数据的 50 行之后的数据
data2 = data.iloc[50:, :]# 原始数据是四维,无法展示,选择两个维度进行展示,使用 scatter 函数绘制散点图
# 以数据 1 的第 1 列和第 3 列作为 x 和 y 轴,标记为 + 号
plt.scatter(data1[1], data1[3], marker='+')
# 以数据 2 的第 1 列和第 3 列作为 x 和 y 轴,标记为 o 号
plt.scatter(data2[1], data2[3], marker='o')
# 显示绘制的散点图
plt.show()

在这里插入图片描述

使用支持向量机训练

from sklearn.svm import SVC# 选取数据的第 1 列和第 3 列作为特征 x
x = data.iloc[:, [1, 3]]
# 选取数据的最后一列作为标签 y
y = data.iloc[:, -1]
# 创建 SVC 分类器,使用线性核,C 为无穷大,随机种子为 0
svm = SVC(kernel='linear', C=float('inf'), random_state=0)
# 用选取的特征和标签训练 SVC 分类器
svm.fit(x, y)

可视化支持向量机结果

# 获取训练好的分类器的系数
w = svm.coef_[0]
# 获取截距
b = svm.intercept_[0]import numpy as np
# 生成 0 到 7 之间的 300 个等间距的点
x1 = np.linspace(0, 7, 300)
# 计算分割超平面的直线方程,w[0] * x1 + w[1] * x2 + b = 0,解出 x2
x2 = -(w[0] * x1 + b) / w[1]
# 计算间隔边界直线方程,w[0] * x1 + w[1] * x2 + b = 1,解出 x2
x3 = (1 - (w[0] * x1 + b)) / w[1]
# 计算间隔边界直线方程,w[0] * x1 + w[1] * x2 + b = -1,解出 x2
x4 = (-1 - (w[0] * x1 + b)) / w[1]# 绘制分割超平面,线宽为 2,颜色为红色
plt.plot(x1, x2, linewidth=2, color='r')
# 绘制间隔边界,线宽为 1,颜色为红色,线条样式为虚线
plt.plot(x1, x3, linewidth=1, color='r', linestyle='--')
plt.plot(x1, x4, linewidth=1, color='r', linestyle='--')# 设置 x 轴范围
plt.xlim(4, 7)
# 设置 y 轴范围
plt.ylim(0, 5)# 获取支持向量
vets = svm.support_vectors_
# 绘制支持向量,颜色为蓝色,标记为 x
plt.scatter(vets[:, 0], vets[:, 1], c='b', marker='x')# 显示最终的图像
plt.show()

在这里插入图片描述

本次实例可看出在二维中支持向量机的情况,绘制分割线和支持向量的分布。

完整代码

import pandas as pd# 读取 csv 文件,文件路径需要注意转义字符,可使用原始字符串
data = pd.read_csv(r'D:\where-python\python-venv\ji_qi_xue_xi_demo\朴素贝叶斯\iris.csv', header=None)import matplotlib.pyplot as plt# 选取数据的前 50 行
data1 = data.iloc[:50, :]
# 选取数据的 50 行之后的数据
data2 = data.iloc[50:, :]# 原始数据是四维,无法展示,选择两个维度进行展示,使用 scatter 函数绘制散点图
# 以数据 1 的第 1 列和第 3 列作为 x 和 y 轴,标记为 + 号
plt.scatter(data1[1], data1[3], marker='+')
# 以数据 2 的第 1 列和第 3 列作为 x 和 y 轴,标记为 o 号
plt.scatter(data2[1], data2[3], marker='o')
# 显示绘制的散点图
plt.show()from sklearn.svm import SVC# 选取数据的第 1 列和第 3 列作为特征 x
x = data.iloc[:, [1, 3]]
# 选取数据的最后一列作为标签 y
y = data.iloc[:, -1]
# 创建 SVC 分类器,使用线性核,C 为无穷大,随机种子为 0
svm = SVC(kernel='linear', C=float('inf'), random_state=0)
# 用选取的特征和标签训练 SVC 分类器
svm.fit(x, y)# 获取训练好的分类器的系数
w = svm.coef_[0]
# 获取截距
b = svm.intercept_[0]import numpy as np
# 生成 0 到 7 之间的 300 个等间距的点
x1 = np.linspace(0, 7, 300)
# 计算分割超平面的直线方程,w[0] * x1 + w[1] * x2 + b = 0,解出 x2
x2 = -(w[0] * x1 + b) / w[1]
# 计算间隔边界直线方程,w[0] * x1 + w[1] * x2 + b = 1,解出 x2
x3 = (1 - (w[0] * x1 + b)) / w[1]
# 计算间隔边界直线方程,w[0] * x1 + w[1] * x2 + b = -1,解出 x2
x4 = (-1 - (w[0] * x1 + b)) / w[1]# 绘制分割超平面,线宽为 2,颜色为红色
plt.plot(x1, x2, linewidth=2, color='r')
# 绘制间隔边界,线宽为 1,颜色为红色,线条样式为虚线
plt.plot(x1, x3, linewidth=1, color='r', linestyle='--')
plt.plot(x1, x4, linewidth=1, color='r', linestyle='--')# 设置 x 轴范围
plt.xlim(4, 7)
# 设置 y 轴范围
plt.ylim(0, 5)# 获取支持向量
vets = svm.support_vectors_
# 绘制支持向量,颜色为蓝色,标记为 x
plt.scatter(vets[:, 0], vets[:, 1], c='b', marker='x')# 显示最终的图像
plt.show()

支持向量机实例(2)

对手写体图片进行识别。
在这里插入图片描述
共有2000个手写体数据,上面是一张已经经过一些初步处理过的图片,其中含有0~9的手写数字,且每一个数字都是5行,100列,共有5000个数字。
本次通过对这张分辨率为20001000的图片进行切分。将其划分成独立的数字,每个数字大小为2020像素,共计5000个。

实例步骤

  • 导入数据
  • 处理数据
  • 切分划分数据
  • 创建SVM模型
  • 训练数据
  • 测试数据
  • 得到分类报告及准确率

导入数据

import numpy as np
import cv2
# 读取图像文件 shu_zi.png
img = cv2.imread('shu_zi.png')

处理数据

# 将图像从 BGR 颜色空间转换为灰度空间
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 将灰度图像划分为 50 行,每行再划分为 100 列,生成一个二维列表 cells
cells = [np.hsplit(row, 100) for row in np.vsplit(gray, 50)]
# 将二维列表转换为 numpy 数组
x = np.array(cells)# 将数组重塑为 (-1, 400) 的形状,并将数据类型转换为 float32
x = x.reshape(-1, 400).astype(np.float32)# 创建一个从 0 到 9 的数组
k = np.arange(10)
# 将数组 k 中的元素重复 500 次,生成标签数组 y
y = np.repeat(k, 500)

切分划分数据

from sklearn.model_selection import train_test_split
# 将数据 x 和标签 y 划分为训练集和测试集,测试集占 20%,设置随机种子为 0
x_train_w, x_test_w, y_train_w, y_test_w = train_test_split(x, y, test_size=0.2, random_state=0)

创建SVM模型

from sklearn.svm import SVC# 创建 SVC 分类器,使用径向基核函数(rbf),C 为无穷大,随机种子为 0
svm = SVC(kernel='rbf', C=float('inf'), random_state=0)

训练数据

# 使用训练集数据 x_train_w 和标签 y_train_w 训练 SVC 分类器
svm.fit(x_train_w, y_train_w)

测试数据

自测

from sklearn import metrics
# 使用训练好的分类器对训练集数据进行预测
train_pred = svm.predict(x_train_w)

测试集测试

# 使用训练好的分类器对测试集数据进行预测
test_pred = svm.predict(x_test_w)

得到分类报告及准确率

# 输出训练集的分类性能报告,包括精确率、召回率、F1 分数等指标
print(metrics.classification_report(y_train_w, train_pred))
# 输出测试集的分类性能报告
print(metrics.classification_report(y_test_w, test_pred))
# 计算分类器在测试集上的准确率
m = svm.score(x_test_w, y_test_w)
# 打印手写数字用支持向量机的准确率
print(f'手写数字用支持向量机的准确率为:{m}')

在这里插入图片描述

完整代码

import numpy as np
import cv2
# 导入 cv2 库用于图像处理,导入 numpy 库用于数据处理
# 读取图像文件 shu_zi.png
img = cv2.imread('shu_zi.png')
# 将读取的图像从 BGR 颜色空间转换为灰度颜色空间
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 使用 np.vsplit 将灰度图像分割成 50 行,对每一行使用 np.hsplit 分割成 100 列
# 将结果存储在 cells 列表中,列表中的每个元素是分割后的图像块
cells = [np.hsplit(row, 100) for row in np.vsplit(gray, 50)]
# 将 cells 列表转换为 numpy 数组
x = np.array(cells)# 将数组重塑为 (-1, 400) 的形状,并将数据类型转换为 float32
# 目的是将数据处理为适合机器学习算法的格式
x = x.reshape(-1, 400).astype(np.float32)# 创建一个包含 0 到 9 的数组
k = np.arange(10)
# 将数组 k 中的元素重复 500 次,作为标签数据
y = np.repeat(k, 500)from sklearn.model_selection import train_test_split
# 将数据 x 和标签 y 按照 80:20 的比例划分为训练集和测试集
# random_state=0 保证每次运行代码划分结果相同
x_train_w, x_test_w, y_train_w, y_test_w = train_test_split(x, y, test_size=0.2, random_state=0)from sklearn.svm import SVC# 创建 SVC 分类器,使用径向基核函数(rbf),C 为无穷大,随机种子为 0
svm = SVC(kernel='rbf', C=float('inf'), random_state=0)
# 使用训练集数据 x_train_w 和标签 y_train_w 训练 SVC 分类器
svm.fit(x_train_w, y_train_w)from sklearn import metrics
# 使用训练好的分类器对训练集数据进行预测
train_pred = svm.predict(x_train_w)
# 输出训练集的分类性能报告,包括精确率、召回率、F1 分数等指标
print(metrics.classification_report(y_train_w, train_pred))# 使用训练好的分类器对测试集数据进行预测
test_pred = svm.predict(x_test_w)
# 输出测试集的分类性能报告
print(metrics.classification_report(y_test_w, test_pred))
# 计算分类器在测试集上的准确率
m = svm.score(x_test_w, y_test_w)
# 打印手写数字用支持向量机的准确率
print(f'手写数字用支持向量机的准确率为:{m}')

与KNN算法准确率做对比

KNN完整代码

import numpy as np
import cv2img =cv2.imread('shu_zi.png')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cells = [np.hsplit(row,100) for row in np.vsplit(gray,50)]
x =np.array(cells)train = x[:,:50]
test =x[:,50:100]# 将数据构造为符合KNN的输入,将每个数字的尺寸由20*20调整为1*400
train_new = train.reshape(-1,400).astype(np.float32)
test_new = test.reshape(-1,400).astype(np.float32)# 分配标签:分别为训练数据、测试数据分配标签
k = np.arange(10)
labels = np.repeat(k,250)
train_labels = labels[:,np.newaxis] # np.newaxis是numpy库中一个特殊对象用于增加一个新的维度
test_labels = np.repeat(k,250)[:,np.newaxis]# # # 构建+训练
knn =cv2.ml.KNearest_create() # 通过cv2创建一个knn模型
knn.train(train_new,cv2.ml.ROW_SAMPLE,train_labels)
ret,result,neighbours,dist=knn.findNearest(test_new,k=3)
# ret,result,neighbours,dist=knn.findNearest(a3,k=3)
# # ret:表示查找操作是否成功
# # result:浮点数数组,表示测试样本的预测标签
# # neighbours:这是一个整数数组,表示与测试样本最近的k个索引。
# # dist:这是一个浮点数组,表示测试样本与每一个最近邻居之间的距离。
matches = result==test_labels
correct = np.count_nonzero(matches)
accuracy = correct*100.0/result.size
print("当前使用KNN识别手写数字的准确率为:",accuracy)

在这里插入图片描述

从支持向量机算法和KNN算法对比,可看到支持向量机的准确率更高。

相关文章:

《机器学习》——支持向量机(SVM)

文章目录 什么是支持向量机&#xff1f;基本原理数学模型 支持向量机模型模型参数属性信息 支持向量机实例&#xff08;1&#xff09;实例步骤读取数据可视化原始数据使用支持向量机训练可视化支持向量机结果完整代码 支持向量机实例&#xff08;2&#xff09;实例步骤导入数据…...

【PPTist】公式编辑、插入音视频、添加动画

一、插入公式 点击公式的时候 latexEditorVisible 会变成 true src/views/Editor/CanvasTool/index.vue <Modalv-model:visible"latexEditorVisible" :width"880" ><LaTeXEditor close"latexEditorVisible false"update"data &…...

LeetCode - #186 翻转字符串里的单词 II(会员题)

网罗开发 &#xff08;小红书、快手、视频号同名&#xff09; 大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等…...

Kafka核心参数与使用02

一、从基础的客户端说起 Kafka 提供了非常简单的生产者&#xff08;Producer&#xff09;和消费者&#xff08;Consumer&#xff09;API。通过引入相应依赖后&#xff0c;可以快速上手编写生产者和消费者的示例。 1. 消息发送者主流程 一个最基础的 Producer 发送消息的步骤…...

Three.js 渲染技术:打造逼真3D体验的幕后功臣

文章目录 前言一、着色器&#xff08;Shaders&#xff09;二、后处理&#xff08;Post-processing&#xff09;三、抗锯齿&#xff08;Anti-aliasing&#xff09;四、实时渲染与离线渲染五、光照模型与材质优化六、环境映射&#xff08;Environment Mapping&#xff09;七、纹理…...

QTcpSocket 如何统计在线时长

基本原理 QTcpSocket是 Qt 库中用于 TCP 通信的类。要统计在线时长,关键思路是记录连接建立的时间和当前时间,通过计算两者的差值来得到在线时长。实现步骤 记录连接建立时间: 在连接成功的信号槽函数中记录开始时间。例如,当QTcpSocket成功连接到服务器时,会发出connecte…...

【Altium】AD使用智能粘贴功能把多个网络标签改成端口

1、 文档目标 使用智能粘贴功能把多个网络标签&#xff08;net lable&#xff09;改成端口&#xff08;port&#xff09; 2、 问题场景 客户有一份原理图&#xff0c;网络用的是net label&#xff0c;没用Port&#xff0c;然后创建一个sheet symbol&#xff0c;但是sheet sy…...

.NET 终止或结束进程

如何使用 C# 终止进程。 使用简单的方法终止.NET中的现有进程Process.Kill()。有一个可选参数 true 或 false&#xff0c;用于结束与要结束的进程相关的所有子进程。 了解如何创建流程。 结束当前进程&#xff1a; System.Diagnostics.Process.GetCurrentProcess().Kill(tru…...

R.swift库的详细用法

R.swift 是一个 Swift 工具库,它提供了一个自动生成的类 R,使得你可以通过类型安全的方式访问项目中的资源,例如图片、字体、颜色、XIB 文件等。通过 R.swift,你可以避免字符串类型的错误,提升代码的可维护性。 以下是 R.swift 库的详细用法: 1. 安装 R.swift 使用 Sw…...

Js的回调函数

一、什么是回调函数&#xff08;Callback&#xff09;&#xff1f; 回调函数&#xff08;Callback Function&#xff09;是指一个函数被作为参数传递给另一个函数&#xff0c;并在特定事件发生或操作完成时执行。 可以通俗地理解为一种“委托”机制。 在JavaScript中&#xff0…...

flutter 独立开发之笔记

1、# use: - [flutter_launcher_icons:] 每次修改完icon后&#xff0c;都需要执行一遍 dart run flutter_launcher_icons 2、开启混淆并打包apk flutter build apk --obfuscate --split-debug-info./out/android/app.android-arm64.symbols 3、开启windows支持 flutter con…...

PHP的扩展Imagick的安装

windows下的安装 下载&#xff1a;Imagick扩展 PECL :: Package :: imagick 3.7.0 for Windows​​​​​​​ 下载&#xff1a;ghostscript&#xff08;PDF提取图片时用到&#xff0c;不处理PDF可以不安装&#xff09; Ghostscript : Downloads 安装扩展 Imagick解压后&…...

【git】在服务器使用docker设置了一个gogs服务器,访问和现实都不理想

以下问题应该都可以通过设置custom/conf/app.ini来解决 配置文档参考地址:https://www.bookstack.cn/read/gogs_zh/advanced-configuration_cheat_sheet.md domain显示的事localhost&#xff0c;实际上应该是一个IP地址。 关键字&#xff1a; DOMAIN ROOT_URL 因为是docker…...

多台PC共用同一套鼠标键盘

当环境中有多个桌面 pc 需要操作的时候&#xff0c;在 多台 pc 之间切换会造成很多的不方便 可以通过远程进行连接&#xff0c;但是有一个更好的方案是让多台机器之间共用同一套键盘鼠标 常用的解决方案 synergy 和 sharemouse&#xff0c;通过移动光标在不同的 pc 间切换 s…...

大语言模型是如何训练出来的?

近期听了不少与AI相关的播客&#xff0c;有理想转型AI的分享&#xff0c;有Character.ai出来同事的分享等&#xff0c;结合对Transformer架构的理解尝试大致还原大语言模型的训练过程。不过&#xff0c;当我这样的“中国大妈”也能够大致琢磨明白大语言模型是如何训练出来的时候…...

Vue2与Vue3在项目开发中的选择:深入探讨

文章目录 前言一、Vue2的优势与挑战二、Vue3的进步与特性三、如何做出选择&#xff1f;结语 前言 Vue.js 是一个用于构建用户界面的渐进式JavaScript框架。Vue2和Vue3是其两个主要版本&#xff0c;它们各自拥有一系列特点和优势。随着Vue3的发布&#xff0c;开发者们面临着在新…...

Web枚举:深入了解目标应用系统

Web枚举是渗透测试中重要的第一步&#xff0c;旨在全面收集目标系统的信息&#xff0c;以便后续攻击载荷的构建更具针对性和效率。本文将详细讨论如何通过各种方法识别目标Web应用的技术栈&#xff0c;并提取关键信息。 1. 识别目标系统的技术栈 技术栈指Web应用所依赖的技术组…...

RabbitMQ介绍与使用

RabbitMQ官网 RabbitMQ 介绍 RabbitMQ 是一个开源的消息代理和队列服务器&#xff0c;基于 AMQP&#xff08;高级消息队列协议&#xff09;标准&#xff0c;使用 Erlang 编程语言构建。它是消息队列&#xff08;MQ&#xff09;的一种&#xff0c;广泛应用于分布式系统中&#x…...

从0到机器视觉工程师(六):配置OpenCV和Qt环境

CMake配置OpenCV CMakeLists.txt文件的编写 cmake_minimum_required(VERSION 3.20) project(test_opencv LANGUAGES CXX) #寻找Opencv库 FIND_PACKAGE(OpenCV REQUIRED) include_directories(test_opencv ${OpenCV_INCLUDE_DIRS}) add_executable(test_opencv main.cpp) TARGE…...

计算机毕业设计Python机器学习农作物健康识别系统 人工智能 图像识别 机器学习 大数据毕业设计 算法

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API&#xff0c;查询的是单条数据&#xff0c;比如根据主键ID查询用户信息&#xff0c;sql如下&#xff1a; select id, name, age from user where id #{id}API默认返回的数据格式是多条的&#xff0c;如下&#xff1a; {&qu…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...