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

支持向量机算法:原理、实现与应用

摘要: 本文深入探讨支持向量机(Support Vector Machine,SVM)算法,详细阐述其原理、数学模型、核函数机制以及在分类和回归问题中的应用方式。通过以 Python 和 C# 为例,展示 SVM 算法在不同编程环境下的具体实现步骤,包括数据准备、模型构建、训练与评估等过程。同时,讨论 SVM 算法的优势、局限性以及在实际领域如数据分类、图像识别、生物信息学等中的应用案例,旨在为读者全面呈现 SVM 算法的全貌,使其能够深入理解并在相关领域中有效应用该算法。

一、引言

在机器学习领域,支持向量机算法是一种极具影响力且广泛应用的监督学习算法。它在数据分类、回归分析以及异常检测等任务中都展现出卓越的性能。SVM 算法基于统计学习理论,通过寻找一个最优的超平面来对数据进行分类或回归预测,其核心思想是最大化分类间隔,使得分类结果具有良好的泛化能力。无论是在学术研究还是工业应用中,SVM 都占据着重要的地位,例如在图像识别中对图像中的物体进行分类,在生物信息学中对基因数据进行分析和预测等。本文将详细介绍 SVM 算法的原理、实现及应用,以帮助读者深入理解这一重要的机器学习工具。

二、支持向量机算法原理

(一)线性可分情况

在线性可分的情况下,SVM的目标是找到一个超平面,使得该超平面到最近的数据点的距离(称为间隔)最大化。这个间隔最大化问题可以转化为一个凸二次规划问题,通过求解这个凸二次规划问题,可以得到唯一的超平面和相应的分类决策函数‌。支持向量是那些距离超平面最近的样本点,它们决定了超平面的位置和方向‌。

(二)线性不可分情况与核函数

当数据集线性不可分时,SVM引入了核函数的概念。核函数可以将数据映射到高维空间,使得在高维空间中数据变得线性可分。常用的核函数包括多项式核函数、高斯核函数(RBF核)和Sigmoid核函数。通过核函数,SVM可以在高维空间中找到一个最优的超平面进行分类‌。

(三)支持向量

在SVM中,支持向量是那些距离超平面最近的样本点。这些点决定了超平面的位置和方向。在训练过程中,只有支持向量对最终的分类结果有影响,其他的数据点对分类器的训练没有贡献‌。

三、Python 实现支持向量机算法

(一)环境搭建与数据准备

  1. 安装相关库
    在 Python 中,常用的机器学习库 scikit-learn 提供了 SVM 算法的实现。可以使用 pip 命令安装:
pip install scikit-learn
  1. 数据准备
    以经典的鸢尾花数据集为例,该数据集包含三种不同类型的鸢尾花(Setosa、Versicolor 和 Virginica)的花瓣和花萼的长度与宽度信息。scikit-learn 库中已经内置了该数据集,可以直接使用。
from sklearn.datasets import load_iris
# 加载鸢尾花数据集
iris = load_iris()
X = iris.data
y = iris.target

这里,X 是特征矩阵,每一行代表一个样本,每一列代表一个特征(如花瓣长度、花瓣宽度等);y 是目标向量,存储了每个样本对应的类别标签。

(二)模型构建与训练

使用 scikit-learn 中的 SVC(支持向量分类器)类来构建 SVM 分类模型,并对数据进行训练。

from sklearn.svm import SVC
# 创建 SVM 分类器对象,使用线性核函数
svm = SVC(kernel='linear', C=1.0)
# 训练模型
svm.fit(X, y)

在上述代码中,kernel='linear' 表示使用线性核函数,C=1.0 是惩罚参数。可以根据实际情况调整核函数类型和惩罚参数的值。

(三)模型评估与预测

  1. 模型评估
    可以使用一些评估指标来衡量模型的性能,如准确率(Accuracy)。将数据集划分为训练集和测试集,使用训练集训练模型,然后在测试集上进行评估。
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 重新训练模型
svm.fit(X_train, y_train)
# 在测试集上进行预测
y_pred = svm.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)
  1. 模型预测
    对于新的数据,可以使用训练好的模型进行预测。例如,假设有一个新的鸢尾花样本,其特征为 [5.1, 3.5, 1.4, 0.2](花瓣长度、花瓣宽度、花萼长度、花萼宽度),可以使用以下代码进行预测:
new_sample = [[5.1, 3.5, 1.4, 0.2]]
predicted_class = svm.predict(new_sample)
print("Predicted class:", iris.target_names[predicted_class[0]])

这里,predicted_class 是预测的类别索引,通过 iris.target_names 可以获取对应的类别名称。

(四)使用不同核函数

  1. 多项式核函数
    如果要使用多项式核函数,可以在创建 SVC 对象时设置 kernel='poly',并可以指定多项式的次数 degree。例如:
# 创建 SVM 分类器对象,使用多项式核函数,次数为 3
svm_poly = SVC(kernel='poly', degree=3, C=1.0)
svm_poly.fit(X, y)
  1. 高斯径向基核函数
    对于高斯径向基核函数,设置 kernel='rbf',并可以调整参数 gamma。例如:
# 创建 SVM 分类器对象,使用高斯径向基核函数,gamma=0.7
svm_rbf = SVC(kernel='rbf', gamma=0.7, C=1.0)
svm_rbf.fit(X, y)

四、C# 实现支持向量机算法

(一)环境搭建与数据准备

  1. 创建项目与安装包
    在 C# 中,可以使用 Accord.NET 库来实现 SVM 算法。首先创建一个新的 C# 项目,然后通过 NuGet 包管理器安装 Accord.MachineLearning 和 Accord.Statistics.Kernels 包。
  2. 数据准备
    同样以鸢尾花数据集为例,不过需要将数据转换为 C# 中的数据结构。可以创建一个类来表示鸢尾花的数据样本:
public class IrisData
{public float SepalLength { get; set; }public float SepalWidth { get; set; }public float PetalLength { get; set) { get; set; }public float PetalWidth { get; set; }public int Label { get; set; }
}

然后读取数据集文件(假设数据集存储在一个 CSV 文件中)并将其转换为 IrisData 类型的列表。

using System;
using System.Collections.Generic;
using System.IO;
using Accord.MachineLearning;
using Accord.Statistics.Kernels;class Program
{static readonly string _dataPath = "iris.csv";static void Main(){// 读取数据集var data = new List<IrisData>();using (var reader = new StreamReader(_dataPath)){// 跳过标题行reader.ReadLine();string line;while ((line = reader.ReadLine())!= null){var values = line.Split(',');var sample = new IrisData{SepalLength = float.Parse(values[0]),SepalWidth = float.Parse(values[1]),PetalLength = float.Parse(values[2]),PetalWidth = float.Parse(values[3]),Label = int.Parse(values[4])};data.Add(sample);}}}
}

(二)模型构建与训练

使用 Accord.NET 构建 SVM 分类模型并进行训练。

// 创建输入和输出数组
double[][] inputs = new double[data.Count][];
int[] outputs = new int[data.Count];for (int i = 0; i < data.Count; i++)
{inputs[i] = new double[] { data[i].SepalLength, data[i].SepalWidth, data[i].PetalLength, data[i].PetalWidth };outputs[i] = data[i].Label;
}// 创建 SVM 学习器,使用线性核函数
var teacher = new SupportVectorMachineLearning<Linear>()
{// 设置惩罚参数Complexity = 1.0
};// 训练模型
var svm = teacher.Learn(inputs, outputs);

在上述代码中,首先将数据转换为 Accord.NET 所需的数组格式,然后创建 SupportVectorMachineLearning 对象,指定线性核函数并设置惩罚参数,最后使用 Learn 方法训练模型。

(三)模型评估与预测

  1. 模型评估
    将数据集划分为训练集和测试集,在训练集上训练模型后,使用测试集对模型进行评估。可以使用准确率等指标进行评估。
// 划分训练集和测试集
var (trainInputs, testInputs, trainOutputs, testOutputs) = CrossValidation.Create(inputs, outputs, 0.2);// 训练模型
var trainedSvm = teacher.Learn(trainInputs, trainOutputs);// 在测试集上进行预测
int[] predictions = trainedSvm.Decide(testInputs);// 计算准确率
double accuracy = new ZeroOneLoss(testOutputs).Loss(predictions);
Console.WriteLine($"Accuracy: {accuracy}");
  1. 模型预测
    对于新的数据样本,可以使用训练好的模型进行预测。
// 创建新的样本数据
var newSample = new double[] { 5.1, 3.5, 1.4, 0.2 };
// 进行预测
int predictedClass = svm.Decide(newSample);
Console.WriteLine($"Predicted class: {predictedClass}");

(四)使用不同核函数

  1. 多项式核函数
    如果要使用多项式核函数,在创建 SupportVectorMachineLearning 对象时指定 Polynomial 核函数,并可以设置多项式次数等参数。例如:
// 创建 SVM 学习器,使用多项式核函数,次数为 3
var teacherPoly = new SupportVectorMachineLearning<Polynomial>()
{// 设置惩罚参数Complexity = 1.0,Degree = 3
};
var svmPoly = teacherPoly.Learn(inputs, outputs);
  1. 高斯径向基核函数
    对于高斯径向基核函数,指定 Gaussian 核函数,并调整参数 Sigma。例如:
// 创建 SVM 学习器,使用高斯径向基核函数,Sigma=0.7
var teacherRbf = new SupportVectorMachineLearning<Gaussian>()
{// 设置惩罚参数Complexity = 1.0,Sigma = 0.7
};
var svmRbf = teacherRbf.Learn(inputs, outputs);

五、支持向量机算法的应用案例

(一)数据分类任务

  1. 文本分类
    在文本分类中,SVM 算法可用于将文档分类到不同的类别,如新闻分类(体育、政治、娱乐等)、邮件分类(垃圾邮件与正常邮件)等。首先将文本进行特征提取,例如使用词袋模型或 TF-IDF 方法将文本转换为特征向量,然后使用 SVM 算法对这些特征向量进行分类。由于 SVM 能够处理高维数据且具有较好的泛化能力,在文本分类任务中表现出色。
  2. 图像分类
    在图像识别领域,SVM 算法可以用于对图像中的物体进行分类。例如,将图像中的人脸分类为不同的表情(高兴、悲伤、愤怒等),或者将图像中的物体分类为不同的类别(汽车、飞机、动物等)。通常需要先对图像进行特征提取,如使用卷积神经网络(CNN)提取图像的特征图,然后将这些特征输入到 SVM 算法中进行分类。

(二)回归分析应用

  1. 时间序列预测
    在时间序列分析中,SVM 算法可用于预测未来的值。例如,预测股票价格、电力负荷需求等。将时间序列数据转换为特征向量,例如使用过去一段时间的数据作为特征来预测未来的值,然后使用 SVM 的回归模型进行预测。通过调整核函数和模型参数,可以适应不同的时间序列数据特点,提高预测的准确性。
  2. 生物数据建模
    在生物信息学中,SVM 回归模型可以用于建立生物数据之间的关系模型。例如,根据蛋白质的结构特征预测其活性,或者根据基因表达数据预测疾病的发生风险等。通过对大量生物数据的学习,SVM 回归模型能够挖掘出数据中的潜在关系,为生物医学研究提供有价值的信息。

六、支持向量机算法的优势与局限性

(一)优势

  1. 良好的泛化能力
    SVM 算法通过最大化分类间隔来构建模型,使得模型在处理新数据时能够保持较高的准确性,有效避免了过拟合问题。即使在数据量相对较小的情况下,只要数据具有一定的代表性,SVM 也能学习到数据的关键特征和模式,从而对未知数据进行可靠的预测或分类。例如在一些医学影像诊断应用中,训练数据可能有限,但 SVM 仍能基于已有的病例影像特征建立起较为精准的疾病分类模型,对新的患者影像进行有效判断,为医生提供辅助诊断建议,且在不同医疗机构的相似病例数据上都能展现出较好的适应性和准确性。
  2. 处理高维数据有效
    由于核函数的巧妙运用,SVM 能够在不直接计算高维特征空间向量内积的情况下处理高维数据。这一特性使其在面对诸如文本分类、图像识别等涉及大量特征的数据时游刃有余。以文本分类为例,使用词袋模型或 TF-IDF 等方法将文本转化为特征向量后,特征维度往往很高,但 SVM 可以借助核函数将这些高维特征映射到合适的空间进行分类决策,不会因维度灾难而导致性能急剧下降。在图像识别中,一幅图像经过特征提取后可能产生数以千计的特征值,SVM 依然能够利用核函数在这个高维特征空间中找到最优的分类超平面,准确区分不同类别的图像,如区分不同种类的动物图像或不同风格的艺术作品图像等。
  3. 全局最优解
    SVM 的优化问题是一个凸二次规划问题,这就保证了其能够找到全局最优解。相较于一些基于梯度下降等方法的算法可能陷入局部最优解的困境,SVM 在理论上能够确保所得到的模型是在给定条件下的最优模型。例如在一些复杂的工业生产过程质量控制场景中,需要精确地对产品质量进行分类判断,SVM 能够基于各种生产参数和质量检测指标数据找到全局最优的分类模型,从而准确地将合格产品与不合格产品区分开来,为企业生产决策提供可靠依据,避免因模型不准确而导致的误判和资源浪费。

(二)局限性

  1. 计算复杂度高
    当处理大规模数据集时,SVM 的计算复杂度会显著增加。无论是求解二次规划问题以确定支持向量和超平面参数,还是计算核函数矩阵,都需要消耗大量的计算资源和时间。例如在处理海量的互联网用户行为数据进行精准营销分类时,数据量可能达到数亿甚至数十亿条记录,SVM 的训练过程可能会耗费数小时甚至数天的时间,这在实际应用中往往是难以接受的。而且随着数据量的进一步增大,计算资源的需求呈指数级增长,可能导致普通计算机无法完成计算任务,需要借助大规模集群计算资源,这无疑增加了应用成本和技术难度。
  2. 对核函数和参数敏感
    核函数的选择以及相关参数(如惩罚参数 C、多项式核函数的次数 d、高斯径向基核函数的参数 γ 等)的设置对 SVM 的性能有着至关重要的影响。不同的核函数适用于不同类型的数据分布和问题场景,如果选择不当,可能导致模型性能不佳。例如在处理具有复杂非线性关系的数据时,若错误地选择了线性核函数,模型将无法准确捕捉数据的内在规律,分类或预测效果会大打折扣。同时,参数的调整也需要丰富的经验和大量的实验。以惩罚参数 C 为例,如果 C 设置过大,模型会过于关注训练数据的准确性,容易导致过拟合;而 C 设置过小,则可能使模型对错误分类过于宽容,导致泛化能力下降。在实际应用中,找到合适的核函数和参数组合往往需要反复尝试和优化,这增加了使用 SVM 算法的复杂性和不确定性。
  3. 不适用于多分类问题的直接处理
    SVM 原本是为二分类问题设计的,虽然有一些方法可以将其扩展到多分类问题,如一对一(One-vs-One)和一对多(One-vs-Rest)方法,但这些方法在一定程度上增加了计算复杂度和模型的复杂性。在一对一方法中,需要为每两个类别构建一个 SVM 分类器,对于 k 个类别,总共需要构建 k (k - 1)/2 个分类器,然后通过投票等方式确定最终的分类结果。在一对多方法中,需要为每个类别构建一个 SVM 分类器,将该类别与其他所有类别区分开来,总共需要构建 k 个分类器,同样需要额外的决策规则来确定最终类别。例如在对多种语言的文本进行分类时,若采用 SVM 算法,无论是一对一还是一对多方法,都需要构建多个二分类 SVM 模型并进行复杂的结果整合,这不仅增加了训练时间和计算资源消耗,还可能因为模型之间的相互影响而导致分类准确率有所下降。

尽管支持向量机算法存在上述局限性,但其在众多领域的成功应用以及在理论研究上的重要地位不可忽视。通过不断的研究和改进,如采用近似算法来降低大规模数据计算复杂度、开发自动化的核函数和参数选择方法以及优化多分类扩展策略等,SVM 算法有望在未来继续发挥重要作用,并在更广泛的领域得到更高效的应用。

相关文章:

支持向量机算法:原理、实现与应用

摘要&#xff1a; 本文深入探讨支持向量机&#xff08;Support Vector Machine&#xff0c;SVM&#xff09;算法&#xff0c;详细阐述其原理、数学模型、核函数机制以及在分类和回归问题中的应用方式。通过以 Python 和 C# 为例&#xff0c;展示 SVM 算法在不同编程环境下的具体…...

蓝桥杯分治

P1226 【模板】快速幂 题目描述 给你三个整数 &#x1d44e;,&#x1d44f;,&#x1d45d;a,b,p&#xff0c;求 &#x1d44e;&#x1d44f; mod &#x1d45d;abmodp。 输入格式 输入只有一行三个整数&#xff0c;分别代表 &#x1d44e;,&#x1d44f;,&#x1d45d;a,b,p。…...

群控系统服务端开发模式-应用开发-邮件工厂结构封装

首先在系统根目录下extend文件夹下创建邮件工厂文件夹并更名叫Mail。 一、邮件发送父类 在Mail目录下创建邮件发送父类并更名为MailSenderInterface.php&#xff0c;代码如下 <?php /*** 邮件发送父类* User: 龙哥三年风水* Date: 2024/12/5* Time: 14:22*/ namespace Ma…...

COCO数据集理解

COCO&#xff08;Common Objects in Context&#xff09;数据集是一个用于计算机视觉研究的广泛使用的数据集&#xff0c;特别是在物体检测、分割和图像标注等任务中。COCO数据集由微软研究院开发&#xff0c;其主要特点包括&#xff1a; 丰富的标签&#xff1a;COCO数据集包含…...

数据结构与算法学习笔记----堆

数据结构与算法学习笔记----堆 author: 明月清了个风 first publish time: 2024.12.2 revised: 2024.12.3 - 例题标题错误&#xff0c;已修改。 ps⛹从这里开始调整了文章结构&#xff0c;先讲解算法和数据结构基本原理&#xff0c;再给出例题&#xff0c;针对例题中的应用再…...

在玩“吃鸡”的时候游戏崩溃要如何解决?游戏运行时崩溃是什么原因?

“吃鸡”游戏崩溃问题深度解析与解决方案&#xff1a;原因、修复与预防 在紧张刺激的“吃鸡”&#xff08;即《绝地求生》&#xff09;游戏中&#xff0c;突然遭遇游戏崩溃无疑会让玩家倍感沮丧。作为一名经验丰富的软件开发从业者&#xff0c;我深知游戏崩溃可能由多种因素引…...

AndroidAutoSize实战教程:今日头条屏幕适配方案详解

如何在项目中结合 AndroidAutoSize 来进行今日头条屏幕适配&#xff0c;我会具体讲解如何用 AndroidAutoSize 实现屏幕适配&#xff0c;并结合 Kotlin 代码举例分析。 通过 AndroidAutoSize 库来实现屏幕适配&#xff0c;确保在不同的屏幕尺寸、分辨率、密度下&#xff0c;应用…...

学习threejs,通过设置纹理属性来修改纹理贴图的位置和大小

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️Texture 贴图 二、&#x1…...

图生3d 图生全景 学习笔记

目录 Aluciddreamer ZoeDepth 会自动下载模型&#xff1a; 图生全景图SD-T2I-360PanoImage&#xff1a; Aluciddreamer GitHub - luciddreamer-cvlab/LucidDreamer: Official code for the paper "LucidDreamer: Domain-free Generation of 3D Gaussian Splatting Sce…...

Delphi 实现键盘模拟、锁定键盘,锁定鼠标等操作

Delphi 模拟按键的方法 SendMessageA 说明: 调用一个窗口的窗口函数&#xff0c;将一条消息发给那个窗口。除非消息处理完毕&#xff0c;否则该函数不会返回SendMessage所包含4个参数: 1. hwnd 32位的窗口句柄窗口可以是任何类型的屏幕对象&#xff0c;因为Win32能够维护大多数…...

6. 一分钟读懂“抽象工厂模式”

6.1 模式介绍 书接上文&#xff0c;工厂方法模式只能搞定单一产品族&#xff0c;遇到需要生产多个产品族时就歇菜了。于是&#xff0c;在需求的“花式鞭策”下&#xff0c;程序员们再次绷紧脑细胞&#xff0c;创造出了更强大的抽象工厂模式&#xff0c;让工厂一次性打包多个产品…...

(四)lerobot开源项目的主从臂的远程操作(带相机)(操作记录)

目录 《项目简介》 一、​B站视频参考&#xff08;推荐&#xff09; 二、确定两个usb相机的端口号 三、远程操作&#xff08;带相机&#xff09; 四、遇到问题 《项目简介》 项目地址&#xff1a;GitHub - huggingface/lerobot: &#x1f917; LeRobot: Making AI for Ro…...

离线安装ollama到服务器

搜了很多教程不满意,弄了半天才弄好&#xff0c;这里记录下&#xff0c;方便以后的人用&#xff0c;那个在线下载太慢&#xff0c;怕不是得下载到明年。 一.从官网下在liunx版的tgz安装包 Releases ollama/ollama (github.com) 查看自己的服务器信息&#xff08;参考 https:/…...

Vue前端开发-多级路由配置

在Vue 路由数组中&#xff0c;允许配置多级的路由对象结构&#xff0c;可以是二级、三级或者更多级别&#xff0c;最大级别原则上没有限制&#xff0c;但通常最大的是三或四级&#xff0c;这种路由结构&#xff0c;称之为多级路由。 例如&#xff1a;一级路由地址/list&#x…...

Yocto bitbake and codeSonar

1 mdm 1.1 屏蔽mdm sysvinit的console输出 - uboot传入参数的时候传入consolenull&#xff0c;这样Linux启动信息没有了 - 还需要在Linux配置中去掉Support for console on AMBA serial port - 文件系统/etc/inittab文件里注释掉::respawn:/sbin/getty -L ttyS000 115200 vt100…...

sheng的学习笔记-【中】【吴恩达课后测验】Course 5 -序列模型 - 第二周测验 - 自然语言处理与词嵌入

课程5_第2周_测验题 目录 第一题 1.假设你为10000个单词学习词嵌入&#xff0c;为了捕获全部范围的单词的变化以及意义&#xff0c;那么词嵌入向量应该是10000维的。 A. 【  】正确 B. 【  】错误 答案&#xff1a; B.【 √ 】错误 第二题 2.什么是t-SNE&#xff1f…...

数字图像处理内容详解

1.对比度 最大亮度 / 最小亮度 2.邻域 m邻接&#xff1a;对于像素p和q&#xff0c;如果p和q四临接&#xff0c;或p和q八临接且两者的四邻域的交集为空 通路&#xff1a;如果俩点全部是K邻接&#xff08;K代表4&#xff0c;8&#xff0c;m&#xff09;&#xff0c;则说明存在K…...

python通过ODBC连接神通数据库

1、安装神通数据库 2、安装python 3、安装pyodbc pip3 install pyodbc-5.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl 注&#xff1a;pyodbc要和python版本相对应 4、安装unixodbc 5、配置神通数据库ODBC数据源 6、示例代码如下 #!/usr/bin/python…...

QNX的PPS发布/订阅模型

参考资料: QNX官方文档 以下摘自官网介绍: TheQNX NeutrinoPersistent Publish/Subscribe (PPS) service is a small, extensible publish/subscribe service that offers persistence across reboots. It’s designed to provide a simple and easy-to-use solution for b…...

Ubuntu——extrepo添加部分外部软件源

extrepo 是一个用于 Ubuntu 和其他基于 Debian 的系统的工具&#xff0c;它的主要作用是简化和管理外部软件源&#xff08;repositories&#xff09;的添加和更新。通过使用 extrepo&#xff0c;用户可以方便地添加、删除和管理第三方软件源&#xff0c;而不需要手动编辑源列表…...

java基础教程第16篇( 正则表达式)

Java 正则表达式 正则表达式定义了字符串的模式。 正则表达式可以用来搜索、编辑或处理文本。 正则表达式并不仅限于某一种语言&#xff0c;但是在每种语言中有细微的差别。 Java 提供了 java.util.regex 包&#xff0c;它包含了 Pattern 和 Matcher 类&#xff0c;用于处理正…...

【Shell 脚本实现 HTTP 请求的接收、解析、处理逻辑】

以下是一个实现客户端对 Shell HTTP 服务发起 POST 请求并传入 JSON 参数的完整示例。Shell 服务会解析收到的 JSON 数据&#xff0c;根据内容执行操作。 服务端脚本&#xff1a;http_server.sh 以下脚本使用 netcat (nc) 来监听 HTTP 请求&#xff0c;并通过 jq 工具解析 JSO…...

Leetcode 每日一题 290.单词规律

目录 一、问题分析 二、解题思路 三、代码实现 四、复杂度分析 五、总结 在编程的世界里&#xff0c;我们常常会遇到各种有趣的字符串匹配问题。今天要探讨的就是这样一个问题&#xff1a;给定一种规律 pattern 和一个字符串 s&#xff0c;判断 s 是否遵循与 pattern 相同…...

图像滤波和卷积的不同及MATLAB应用实例

滤波与卷积在图像处理中都是非常重要的运算&#xff0c;但它们有着明显的区别。以下是滤波与卷积的主要不同点&#xff0c;并附带一个MATLAB实例来展示两者在图像处理中的效果差异。 一、滤波与卷积的不同 定义与目的&#xff1a; 1&#xff09;滤波&#xff1a;滤波是一种信…...

【AI模型对比】AI新宠Kimi与ChatGPT的全面对比:技术、性能、应用全揭秘

文章目录 Moss前沿AI技术背景Kimi人工智能的技术积淀ChatGPT的技术优势 详细对比列表模型研发Kimi大模型的研发历程ChatGPT的发展演进 参数规模与架构Kimi大模型的参数规模解析ChatGPT的参数体系 模型表现与局限性Kimi大模型的表现ChatGPT的表现 结论&#xff1a;如何选择适合自…...

详细解读CMA实验室认可

CMA实验室认可&#xff0c;即中国计量认证&#xff08;China Metrology Accreditation&#xff09;的实验室资质认定&#xff0c;以下是对其的详细解读&#xff1a; 一、定义与目的 CMA认证是经省级以上人民政府计量行政部门对实验室的计量检定、测试能力和可靠性考核合格后进…...

H5与支付宝小程序通信,调起扫一扫

1.public/index.html加入代码 <script>if (navigator.userAgent.indexOf(AliApp) > -1) {document.writeln(<script src"https://appx/web-view.min.js" > < / script>);}window.$my my </script>2.vue其他具体页面加入代码 metho…...

Lighthouse(灯塔)—— Chrome 浏览器性能测试工具

1.认识 Lighthouse Lighthouse 是 Google 开发的一款开源性能测试工具&#xff0c;用于分析网页或 Web 应用的性能、可访问性、最佳实践、安全性以及 SEO 等关键指标。开发人员可以通过 Lighthouse 快速了解网页的性能瓶颈&#xff0c;并基于优化建议进行改进。 核心功能&…...

深入浅出机器学习中的梯度下降算法

大家好&#xff0c;在机器学习中&#xff0c;梯度下降算法&#xff08;Gradient Descent&#xff09;是一个重要的概念。它是一种优化算法&#xff0c;用于最小化目标函数&#xff0c;通常是损失函数。梯度下降可以帮助找到一个模型最优的参数&#xff0c;使得模型的预测更加准…...

AIGC 012-Video LDM-更进一步,SD作者将LDM扩展到视频生成任务!

AIGC 012-Video LDM-Stable Video diffusion前身&#xff0c;将LDM扩展到视频生成任务&#xff01; 文章目录 0 论文工作1论文方法实验结果 0 论文工作 Video LDM作者也是Stable diffusion的作者&#xff0c;作者在SD的架构上进行扩展&#xff0c;实现了视频的生成。后续在Vid…...

Rust常用命令总结

安装Rust 检查并更新Ubuntu的软件包 $ sudo apt update $ sudo apt upgrade安装相关依赖&#xff1a;安装GCC、G、MAKE、curl $ sudo apt install build-essential $ sudo apt install curl安装Rust $ curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh执行命令…...

docker部署RustDesk自建服务器

客户端&#xff1a; Releases rustdesk/rustdesk GitHub 服务端&#xff1a; 项目官方地址&#xff1a;GitHub - rustdesk/rustdesk-server: RustDesk Server Program 1、拉取RustDesk库 docker pull rustdesk/rustdesk-server:latest 阿里云库&#xff1a; docker pu…...

QT4和 QT5 槽函数连接的区别

正常连接方式 //QT4官方用列QLabel *label new QLabel;QScrollBar *scrollBar new QScrollBar;QObject::connect(scrollBar, SIGNAL(valueChanged(int)),label, SLOT(setNum(int)));//QT5官方用列QLabel *label new QLabel;QLineEdit *lineEdit new QLineEdit;QObject::c…...

【C++】入门【六】

本节目标 一、继承的概念及定义 二、基类和派生类对象赋值转换 三、继承中的作用域 四、派生类的默认成员函数 五、继承与友元 六、继承与静态成员 七、复杂的菱形继承及菱形虚拟继承 八、继承的总结和反思 九、笔试面试题 一、继承的概念及定义 1.继承的概念 继承是面向对象…...

Ansible 运维工具

安装 apt install ansible /etc/ansible/hosts , 指定密码或密钥访问分组机器 [k8s_masters] master0.c0.k8s.sb[k8s_nodes] node0.c0.k8s.sb node1.c0.k8s.sb[k8s:children] k8s_masters k8s_nodes[k8s_masters:vars] ansible_ssh_usersbadmin ansible_ssh_pass"***&q…...

【分布式】分布式缓存

一、什么是分布式缓存 分布式缓存是一种将缓存数据存储在多个节点上的缓存方案。它通过将数据分散存储在多个节点的内存中&#xff0c;以提高系统的读取性能、降低数据库压力和提高系统可扩展性。 二、分布式缓存的优点 优点明细提高性能&#xff1a;分布式缓存可以将数据缓…...

uni-app简洁的移动端登录注册界面

非常简洁的登录、注册界面模板&#xff0c;使用uni-app编写&#xff0c;直接复制粘贴即可&#xff0c;无任何引用&#xff0c;全部公开。 废话不多说&#xff0c;代码如下&#xff1a; login.vue文件 <template><view class"content"><view class&quo…...

传奇996_47——前端ui

方式一&#xff1a; 后端写ui&#xff0c;前端通过触发函数进行截取。然后获取标签名进行补充或附加动画 这种方式很好用。 问题1&#xff1a;获取不到标签名&#xff0c;标签名就是标签id&#xff0c;当id数字时不需要处理即可直接获取到&#xff0c;但是id如果时汉字就会获取…...

nlp培训重点

1. SGD梯度下降公式 当梯度大于0时&#xff0c;变小&#xff0c;往左边找梯度接近0的值。 当梯度小于0时&#xff0c;减去一个负数会变大&#xff0c;往右边找梯度接近0的值&#xff0c;此时梯度从负数到0上升 2.Adam优化器实现原理 #coding:utf8import torch import torch.n…...

ARM A32多数据处理汇编指令理解分享

ARM A32多数据处理汇编指令理解分享 1 多数据存储指令1.1 push指令1.2 STMFD/STMDB指令1.3 STMED/STMDA指令1.4 STMFA/STMIB指令1.5 STMEA/STMIA指令 2 多数据加载指令2.1 pop指令2.2 LDMFD/LDMIA指令2.3 LDMFA/LDMDA指令2.4 LDMEA/LDMDB指令2.5 LDMED/LDMIB指令 在ARM A32多数…...

【人工智能】Transformers之Pipeline(二十七):蒙版生成(mask-generation)

​​​​​​​ 目录 一、引言 二、蒙版生成&#xff08;mask-generation&#xff09; 2.1 概述 2.2 facebook/sam-vit-base 2.3 pipeline参数 2.3.1 pipeline对象实例化参数 2.3.2 pipeline对象使用参数 2.3.3 pipeline对象返回参数 2.4 pipeline实战 2.5 模型排…...

数据挖掘之逻辑回归

逻辑回归&#xff08;Logistic Regression&#xff09;是数据挖掘中一种经典且广泛应用的算法&#xff0c;主要用于解决分类问题。尽管名字中带有“回归”&#xff0c;它的核心目标却是预测离散的类别&#xff0c;而不是连续的数值。逻辑回归凭借其简单、高效、易于解释的特性&…...

PH热榜 | 2024-12-05

1. Oopsie 标语&#xff1a;用AI和会话回放调试Flutter和React Native应用 介绍&#xff1a;Zipy推出的Oopsie是一款你唯一需要的AI赋能移动端调试工具&#xff0c;它能提供▶️会话回放、&#x1f916;错误监控、&#x1f4a1;AI生成的概要分析&#xff0c;以及&#x1f525…...

docker-常用应用部署dockerfile模板

文章目录 概述Springboot-Djava.security.egdfile:/dev/./urandom参数说明 vue应用部署nginx.conf配置Dockerfile 概述 本文列举了Java开发中常用如SpringBoot、Vue前端等类型的应用Docker部署所需的DockerFile Springboot FROM anapsix/alpine-java:8_server-jre_unlimited…...

LabVIEW中“this VI‘s owning library is missing”错误及解决

问题描述 当加载或打开一个VI时&#xff0c;如果其所属的项目库未加载到内存&#xff0c;LabVIEW将提示错误&#xff1a;“this VIs owning library is missing”&#xff08;该VI的所属库不存在&#xff09;。 该问题通常发生在以下情况下&#xff1a; 项目库文件丢失或路径…...

【算法】棋盘覆盖问题源代码及精简版

目录 一、题目 二、样例 三、示例代码 四、精简代码 五、总结 对于棋盘覆盖问题的解答和优化。 一、题目 输入格式&#xff1a; 第一行&#xff0c;一个整数n&#xff08;棋盘n*n&#xff0c;n确保是2的幂次&#xff0c;n<64&#xff09; 第二行&#xff0c;两个整数…...

剖析kubernetes service的IP能否在宿主机中ping通

文章目录 前言一、serviceIP是怎么产生的二、宿主机中ping serviceIP地址1.ping示例2.为什么ping不通剖析2.1.封装及解封装过程2.2.ICMP报文以太网数据帧格式2.3.原因 三、ping不通svcIP是否跟iptables规则有关&#xff1f;四、为什么ipvs的的clusterIP类型的service能够ping通…...

路由VueRouter的基本使用

1.下载VueRouter到当前工程。 vue2&#xff1a;VueRouter3.x Vuex3.x。 vue3&#xff1a;VueRouter4.x Vuex4.x。 在终端使用命令&#xff1a; year add vue-router3.6.5 2.引入。 import VueRouter from vue-router 3,安装注册。 Vue.use(VueRouter) 4…...

学习记录,正则表达式, 隐式转换

正则表达式 \\&#xff1a;表示正则表达式 W: 表示一个非字&#xff08;不是一个字&#xff0c;例如&#xff1a;空格&#xff0c;逗号&#xff0c;句号&#xff09; W: 多个非字 基本组成部分 1.字符字面量&#xff1a; 普通字符&#xff1a;在正则表达式中&#xff0c;大…...

Spring Boot + MySQL 多线程查询与联表查询性能对比分析

Spring Boot MySQL: 多线程查询与联表查询性能对比分析 背景 在现代 Web 应用开发中&#xff0c;数据库性能是影响系统响应时间和用户体验的关键因素之一。随着业务需求的不断增长&#xff0c;单表查询和联表查询的效率问题日益凸显。特别是在 Spring Boot 项目中&#xff0…...