深入了解支持向量机:机器学习中的经典算法

news2024/11/25 12:29:37

在这里插入图片描述

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。
🍎个人主页:Java Fans的博客
🍊个人信条:不迁怒,不贰过。小知识,大智慧。
💞当前专栏:Java案例分享专栏
✨特色专栏:国学周更-心性养成之路
🥭本文内容:深入了解支持向量机:机器学习中的经典算法

文章目录

    • 一、引言
    • 二、实现原理
      • 1. 数据的几何表示
      • 2. 超平面的定义
      • 3. 最大间隔的概念
      • 4. 支持向量的选择
      • 5. 引入松弛变量
      • 6. 核技巧的应用
    • 三、数学模型
      • 1. 线性可分情况
        • 1.1 超平面的定义
        • 1.2 最大间隔的优化问题
      • 2. 引入松弛变量
        • 2.1 约束条件
      • 3. 对偶问题
        • 3.1 对偶形式的推导
      • 4. 核函数的应用
        • 4.1 常用的核函数
    • 四、实现步骤
      • 1. 数据准备
        • 1.1 数据收集
        • 1.2 数据预处理
        • 1.3 数据划分
      • 2. 模型选择
      • 3. 训练模型
        • 3.1 初始化模型
        • 3.2 训练模型
      • 4. 模型评估
        • 4.1 预测
        • 4.2 评估指标
      • 5. 模型应用
        • 5.1 保存模型
        • 5.2 加载模型
        • 5.3 持续监控与更新
    • 五、实现场景(案例代码)
    • 六、总结

一、引言

  在机器学习的广阔领域中,支持向量机(SVM)作为一种经典的监督学习算法,凭借其卓越的性能和理论基础,赢得了广泛的关注和应用。自20世纪90年代首次提出以来,SVM已成为解决分类和回归问题的重要工具,尤其在处理高维数据和小样本学习时表现出色。其核心思想是通过寻找一个最优超平面来最大化不同类别之间的间隔,从而提高模型的泛化能力。

  随着数据科学的迅猛发展,SVM在图像识别、文本分类、生物信息学等多个领域得到了广泛应用。尽管近年来深度学习技术的崛起使得许多传统算法面临挑战,但SVM依然以其独特的优势在特定场景中保持竞争力。本文将深入探讨支持向量机的实现原理、数学模型、具体实现步骤以及实际应用案例,帮助读者全面理解这一经典算法的魅力与价值。无论你是机器学习的初学者还是经验丰富的从业者,相信本文都能为你提供有益的见解和实用的指导。

二、实现原理

  支持向量机(SVM)的实现原理可以从以下几个方面进行详细阐述:数据的几何表示、超平面的定义、最大间隔的概念、支持向量的选择以及核技巧的应用。

1. 数据的几何表示

  在支持向量机中,数据被视为在特征空间中的点。每个数据点由特征向量表示,特征向量的维度决定了特征空间的维度。例如,在二维空间中,每个数据点可以用 ( x 1 , x 2 ) (x_1, x_2) (x1,x2) 表示,而在三维空间中则用 ( x 1 , x 2 , x 3 ) (x_1, x_2, x_3) (x1,x2,x3) 表示。支持向量机的目标是通过一个超平面将不同类别的数据点分开。

2. 超平面的定义

  超平面是一个将特征空间划分为两个部分的平面。在 d d d 维空间中,超平面可以用以下方程表示:
w ⋅ x + b = 0 w \cdot x + b = 0 wx+b=0
  其中, w w w 是法向量,决定了超平面的方向, b b b 是偏置项,决定了超平面与原点的距离。超平面将特征空间分为两个半空间,每个半空间对应一个类别。

3. 最大间隔的概念

  支持向量机的核心思想是找到一个最优超平面,使得不同类别之间的间隔最大化。间隔是指到超平面的最近点的距离。对于线性可分的情况,支持向量机通过最大化间隔来提高模型的泛化能力。具体来说,给定一个超平面 w ⋅ x + b = 0 w \cdot x + b = 0 wx+b=0,我们希望最大化以下目标:
Margin = 2 ∥ w ∥ \text{Margin} = \frac{2}{\|w\|} Margin=w2
为了实现这一目标,我们需要满足以下约束条件:

  • 对于类别 y i = 1 y_i = 1 yi=1 的点, w ⋅ x i + b ≥ 1 w \cdot x_i + b \geq 1 wxi+b1
  • 对于类别 y i = − 1 y_i = -1 yi=1 的点, w ⋅ x i + b ≤ − 1 w \cdot x_i + b \leq -1 wxi+b1

4. 支持向量的选择

  在训练过程中,支持向量是离超平面最近的那些数据点。它们对超平面的定义至关重要,因为超平面的最终位置完全由这些点决定。换句话说,其他数据点的存在与否不会影响超平面的定义。支持向量的选择使得SVM具有较强的鲁棒性,能够有效应对噪声和异常值。

5. 引入松弛变量

  在实际应用中,数据往往是线性不可分的。为了解决这个问题,支持向量机引入了松弛变量 ξ i \xi_i ξi,允许某些数据点位于超平面的错误侧。优化目标变为:
min ⁡ w , b , ξ 1 2 ∥ w ∥ 2 + C ∑ i = 1 n ξ i \min_{w, b, \xi} \frac{1}{2} \|w\|^2 + C \sum_{i=1}^n \xi_i w,b,ξmin21w2+Ci=1nξi
  其中, C C C 是一个惩罚参数,用于控制间隔的宽度和分类错误的惩罚。通过调整 C C C 的值,可以在模型复杂度和训练误差之间找到平衡。

6. 核技巧的应用

  在许多情况下,数据在原始特征空间中是线性不可分的。为了解决这个问题,支持向量机使用核技巧(Kernel Trick)将数据映射到高维空间。在高维空间中,数据可能是线性可分的。常用的核函数包括:

  • 线性核: K ( x i , x j ) = x i ⋅ x j K(x_i, x_j) = x_i \cdot x_j K(xi,xj)=xixj
  • 多项式核: K ( x i , x j ) = ( x i ⋅ x j + c ) d K(x_i, x_j) = (x_i \cdot x_j + c)^d K(xi,xj)=(xixj+c)d
  • 高斯核(RBF核): K ( x i , x j ) = exp ⁡ ( − ∥ x i − x j ∥ 2 2 σ 2 ) K(x_i, x_j) = \exp\left(-\frac{\|x_i - x_j\|^2}{2\sigma^2}\right) K(xi,xj)=exp(2σ2xixj2)

通过选择合适的核函数,支持向量机能够在复杂的特征空间中找到最优超平面,从而有效地解决非线性分类问题。

三、数学模型

  支持向量机(SVM)的数学模型主要包括线性可分情况的优化问题、引入松弛变量后的优化问题、对偶问题的构建以及核函数的应用。以下将逐步详细阐述这些内容。

1. 线性可分情况

在最简单的情况下,假设我们有一个线性可分的数据集。给定训练数据集 D = { ( x i , y i ) } i = 1 n D = \{(x_i, y_i)\}_{i=1}^n D={(xi,yi)}i=1n,其中 x i ∈ R d x_i \in \mathbb{R}^d xiRd 是特征向量, y i ∈ { − 1 , 1 } y_i \in \{-1, 1\} yi{1,1} 是类别标签。我们的目标是找到一个超平面 w ⋅ x + b = 0 w \cdot x + b = 0 wx+b=0,使得所有的样本点都被正确分类,并且最大化类别之间的间隔。

1.1 超平面的定义

超平面可以用以下方程表示:
w ⋅ x + b = 0 w \cdot x + b = 0 wx+b=0
其中, w w w 是法向量,决定了超平面的方向, b b b 是偏置项,决定了超平面与原点的距离。

1.2 最大间隔的优化问题

为了最大化间隔,我们需要满足以下约束条件:

  • 对于类别 y i = 1 y_i = 1 yi=1 的点, w ⋅ x i + b ≥ 1 w \cdot x_i + b \geq 1 wxi+b1
  • 对于类别 y i = − 1 y_i = -1 yi=1 的点, w ⋅ x i + b ≤ − 1 w \cdot x_i + b \leq -1 wxi+b1

这可以合并为一个不等式:
y i ( w ⋅ x i + b ) ≥ 1 , ∀ i = 1 , 2 , … , n y_i (w \cdot x_i + b) \geq 1, \quad \forall i = 1, 2, \ldots, n yi(wxi+b)1,i=1,2,,n

我们希望最小化 w w w 的范数,以最大化间隔。优化问题可以表示为:
min ⁡ w , b 1 2 ∥ w ∥ 2 \min_{w, b} \frac{1}{2} \|w\|^2 w,bmin21w2
在约束条件下:
y i ( w ⋅ x i + b ) ≥ 1 , ∀ i y_i (w \cdot x_i + b) \geq 1, \quad \forall i yi(wxi+b)1,i

2. 引入松弛变量

在实际应用中,数据往往是线性不可分的。为了处理这种情况,支持向量机引入了松弛变量 ξ i ≥ 0 \xi_i \geq 0 ξi0,允许某些数据点位于超平面的错误侧。优化问题变为:
min ⁡ w , b , ξ 1 2 ∥ w ∥ 2 + C ∑ i = 1 n ξ i \min_{w, b, \xi} \frac{1}{2} \|w\|^2 + C \sum_{i=1}^n \xi_i w,b,ξmin21w2+Ci=1nξi
其中, C C C 是一个惩罚参数,用于控制间隔的宽度和分类错误的惩罚。

2.1 约束条件

此时的约束条件变为:
y i ( w ⋅ x i + b ) ≥ 1 − ξ i , ∀ i y_i (w \cdot x_i + b) \geq 1 - \xi_i, \quad \forall i yi(wxi+b)1ξi,i
这意味着我们允许一些样本点的分类错误,但希望通过惩罚项来控制这些错误的数量。

3. 对偶问题

通过拉格朗日乘子法,我们可以将原始问题转化为对偶问题。首先,构造拉格朗日函数:
L ( w , b , ξ , α ) = 1 2 ∥ w ∥ 2 + C ∑ i = 1 n ξ i − ∑ i = 1 n α i [ y i ( w ⋅ x i + b ) − 1 + ξ i ] L(w, b, \xi, \alpha) = \frac{1}{2} \|w\|^2 + C \sum_{i=1}^n \xi_i - \sum_{i=1}^n \alpha_i [y_i (w \cdot x_i + b) - 1 + \xi_i] L(w,b,ξ,α)=21w2+Ci=1nξii=1nαi[yi(wxi+b)1+ξi]
其中, α i ≥ 0 \alpha_i \geq 0 αi0 是拉格朗日乘子。

3.1 对偶形式的推导

通过对 w w w b b b ξ \xi ξ 求偏导数并令其为零,我们得到:

  1. w w w 的偏导数:
    w = ∑ i = 1 n α i y i x i w = \sum_{i=1}^n \alpha_i y_i x_i w=i=1nαiyixi
  2. b b b 的偏导数:
    ∑ i = 1 n α i y i = 0 \sum_{i=1}^n \alpha_i y_i = 0 i=1nαiyi=0
  3. ξ i \xi_i ξi 的偏导数:
    α i = C − α i \alpha_i = C - \alpha_i αi=Cαi

将这些结果代入拉格朗日函数,得到对偶问题:
max ⁡ α ∑ i = 1 n α i − 1 2 ∑ i = 1 n ∑ j = 1 n α i α j y i y j K ( x i , x j ) \max_{\alpha} \sum_{i=1}^n \alpha_i - \frac{1}{2} \sum_{i=1}^n \sum_{j=1}^n \alpha_i \alpha_j y_i y_j K(x_i, x_j) αmaxi=1nαi21i=1nj=1nαiαjyiyjK(xi,xj)
在约束条件下:
∑ i = 1 n α i y i = 0 , 0 ≤ α i ≤ C \sum_{i=1}^n \alpha_i y_i = 0, \quad 0 \leq \alpha_i \leq C i=1nαiyi=0,0αiC

4. 核函数的应用

在许多情况下,数据在原始特征空间中是线性不可分的。为了解决这个问题,支持向量机使用核技巧(Kernel Trick)将数据映射到高维空间。在高维空间中,数据可能是线性可分的。

4.1 常用的核函数
  • 线性核
    K ( x i , x j ) = x i ⋅ x j K(x_i, x_j) = x_i \cdot x_j K(xi,xj)=xixj
  • 多项式核
    K ( x i , x j ) = ( x i ⋅ x j + c ) d K(x_i, x_j) = (x_i \cdot x_j + c)^d K(xi,xj)=(xixj+c)d
  • 高斯核(RBF核)
    K ( x i , x j ) = exp ⁡ ( − ∥ x i − x j ∥ 2 2 σ 2 ) K(x_i, x_j) = \exp\left(-\frac{\|x_i - x_j\|^2}{2\sigma^2}\right) K(xi,xj)=exp(2σ2xixj2)

通过选择合适的核函数,支持向量机能够在复杂的特征空间中找到最优超平面,从而有效地解决非线性分类问题。

四、实现步骤

  支持向量机(SVM)的实现步骤可以分为数据准备、模型选择、训练模型、模型评估和模型应用等几个关键阶段。以下将详细阐述每个步骤。

1. 数据准备

数据准备是实现支持向量机的第一步,主要包括以下几个方面:

1.1 数据收集

收集与问题相关的数据集,确保数据的质量和多样性。数据可以来自公开数据集、企业内部数据库或通过网络爬虫等方式获取。

1.2 数据预处理

对收集到的数据进行预处理,包括:

  • 缺失值处理:填补缺失值或删除缺失数据。
  • 特征选择:选择与目标变量相关的特征,去除冗余或无关特征。
  • 特征缩放:由于支持向量机对特征的尺度敏感,通常需要对特征进行标准化(均值为0,方差为1)或归一化(将特征值缩放到[0, 1]区间)。
1.3 数据划分

将数据集划分为训练集和测试集,通常采用70%-80%的数据用于训练,20%-30%的数据用于测试。可以使用train_test_split函数进行随机划分。

2. 模型选择

选择合适的支持向量机模型和核函数。支持向量机的主要参数包括:

  • 核函数:根据数据的分布选择合适的核函数,如线性核、多项式核或高斯核(RBF核)。
  • 惩罚参数 C C C:控制间隔的宽度和分类错误的惩罚。较大的 C C C 值会导致模型更复杂,可能会过拟合;较小的 C C C 值则可能导致欠拟合。

3. 训练模型

使用训练集数据训练支持向量机模型。以下是训练模型的具体步骤:

3.1 初始化模型

根据选择的核函数和参数初始化支持向量机模型。例如,在Python中使用scikit-learn库,可以通过以下代码初始化模型:

from sklearn.svm import SVC

# 初始化支持向量机模型
model = SVC(kernel='linear', C=1.0)  # 选择线性核和惩罚参数C
3.2 训练模型

使用训练数据拟合模型。调用模型的fit方法进行训练:

model.fit(X_train, y_train)  # X_train为训练特征,y_train为训练标签

4. 模型评估

训练完成后,需要对模型进行评估,以了解其在未见数据上的表现。评估步骤包括:

4.1 预测

使用测试集进行预测,调用模型的predict方法:

y_pred = model.predict(X_test)  # X_test为测试特征
4.2 评估指标

使用适当的评估指标来评估模型的性能。常用的评估指标包括:

  • 准确率(Accuracy):正确分类的样本占总样本的比例。
  • 精确率(Precision):正确预测为正类的样本占所有预测为正类的样本的比例。
  • 召回率(Recall):正确预测为正类的样本占所有实际为正类的样本的比例。
  • F1-score:精确率和召回率的调和平均数,综合考虑了两者的表现。

可以使用sklearn.metrics模块中的函数计算这些指标:

from sklearn.metrics import accuracy_score, classification_report

accuracy = accuracy_score(y_test, y_pred)
report = classification_report(y_test, y_pred)

print(f"准确率: {accuracy}")
print("分类报告:\n", report)

5. 模型应用

经过评估后,如果模型表现良好,可以将其应用于实际场景中。模型应用的步骤包括:

5.1 保存模型

将训练好的模型保存,以便后续使用。可以使用joblibpickle库进行模型的序列化:

import joblib

joblib.dump(model, 'svm_model.pkl')  # 保存模型
5.2 加载模型

在需要时加载保存的模型进行预测:

loaded_model = joblib.load('svm_model.pkl')  # 加载模型
y_new_pred = loaded_model.predict(new_data)  # 对新数据进行预测
5.3 持续监控与更新

  在实际应用中,模型的性能可能会随着时间的推移而下降。因此,需要定期监控模型的表现,并根据新数据进行模型的更新和再训练。

  向量机的实现过程,也为实际应用中的模型优化和调整提供了指导。

五、实现场景(案例代码)

  下面是一个使用Python的scikit-learn库实现支持向量机的简单示例:

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split

# 加载数据集
iris = datasets.load_iris()
X = iris.data[:, :2]  # 只使用前两个特征
y = iris.target

# 选择二分类问题
X = X[y != 2]
y = y[y != 2]

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 创建支持向量机模型
model = SVC(kernel='linear', C=1.0)
model.fit(X_train, y_train)

# 预测
y_pred = model.predict(X_test)

# 可视化结果
plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train, marker='o', label='Train')
plt.scatter(X_test[:, 0], X_test[:, 1], c=y_pred, marker='x', label='Test')
plt.title('Support Vector Machine')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.legend()
plt.show()

六、总结

  支持向量机(SVM)作为一种经典的机器学习算法,以其强大的分类和回归能力在多个领域中得到了广泛应用。通过深入探讨其实现原理、数学模型和具体实现步骤,我们可以看到SVM的核心思想在于通过最大化类别间的间隔来提高模型的泛化能力。无论是在处理线性可分数据还是非线性数据,SVM都能通过引入松弛变量和核技巧有效应对各种挑战。

  在实际应用中,数据准备、模型选择、训练、评估和应用等步骤构成了SVM实现的完整流程。通过合理的数据预处理和参数调整,支持向量机能够在复杂的特征空间中找到最优的决策边界,从而实现高效的分类和回归。随着数据科学的不断发展,支持向量机仍然是一个重要的工具,尤其在高维数据和小样本学习的场景中,其独特的优势使其在现代机器学习中占据了一席之地。希望本文的探讨能为读者在理解和应用支持向量机方面提供有价值的参考和指导。


  码文不易,本篇文章就介绍到这里,如果想要学习更多Java系列知识点击关注博主,博主带你零基础学习Java知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目:《国学周更—心性养成之路》,学习技术的同时,我们也注重了心性的养成。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2237909.html

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

相关文章

第01章 Linux概述及系统环境搭建

目标: ◆ 知道 Linux 是什么?有什么特点? ◆ 知道 Linux 内核及发行版的区别 ◆ 知道 Linux 的应用领域 ◆ 能够在虚拟机软件上新建虚拟机 ◆ 能够在虚拟机中挂载CentOS6.7光盘镜像 ◆ 能够根据需求安装CentOS6.7的操作系统 ◆ 能够对系统进行登录和关闭…

【题解】—— LeetCode一周小结45

🌟欢迎来到 我的博客 —— 探索技术的无限可能! 🌟博客的简介(文章目录) 【题解】—— 每日一道题目栏 上接:【题解】—— LeetCode一周小结44 4.平方数之和 题目链接:633. 平方数之和 给定一…

Python爬虫基础-正则表达式!

前言 正则表达式是对字符串的一种逻辑公式,用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则的字符串”,此字符串用来表示对字符串的一种“过滤”逻辑。正在在很多开发语言中都存在,而非python独有。对其知识点…

kdump 应该怎么安装 linux-crashdump kdump-tools

sudo apt install linux-crashdump sudo apt install crash sudo apt install kdump-tools 1. 两个工具的关系 linux-crashdump kdump-tools 在 Ubuntu 上安装 kdump 功能,这两个包都是相关的,但有不同的作用. linux-crashdump 是一个元包(…

STM32F405RGT6单片机原理图、PCB免费分享

大学时机创比赛时画的板子,比到一半因为疫情回家,无后续,,,已打板验证过,使用stm32f405rgt6做主控 下载文件资源如下 原理图文件 pcb文件 外壳模型文件 stm32f405例程 功能 以下功能全部验证通过 4路…

2024-11-01 - 统一身份认证 - OpenLdap - 中间件 - 流雨声

摘要 2024-11-01 周五 杭州 暴雨 调查问卷: https://www.wjx.cn/vm/exIBFDM.aspx# 2024年转瞬即逝,可是生活还在继续,这里有一项关于人工智能和项目管理对于效能关系的调研问卷,AI 对工作的作用和影响。问卷不采集个人信息,在此…

基于微信小程序的电商平台+LW示例参考

1.项目介绍 系统角色:管理员、普通用户功能模块:管理员(用户管理、商品分类、商品管理、订单管理、系统管理等),普通用户(个人中心、收藏、我的订单、查看商品等)技术选型:SpringBo…

python读取word的自动编号以及添加自动编号

目录 1、读取编号 读取示例 如何判断段落是否有自动编号呢? 如何区分不同的类型编号呢? 2、添加自动编号 有的时候需要提取word中带自动编号的信息。对于word中的文字很多第三方的库都可以搞定,但是,提取格式,可能…

ImportError: cannot import name ‘packaging‘ from ‘pkg_resources‘ 的参考解决方法

文章目录 写在前面一、问题描述二、解决方法参考链接 写在前面 自己的测试环境: Ubuntu20.04 ROS-Noetic 一、问题描述 自己在通过 pip install 安装module时 (使用的是 pip install mmcv)遇到如下问题: ImportError: cannot …

【论文笔记】Wings: Learning Multimodal LLMs without Text-only Forgetting

🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。 基本信息 标题: Wings: Learning Multimod…

Tomasulo算法介绍

Tomasulo算法详细解释 #mermaid-svg-x5G4yi740f0ju3OB {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-x5G4yi740f0ju3OB .error-icon{fill:#552222;}#mermaid-svg-x5G4yi740f0ju3OB .error-text{fill:#552222;strok…

【C++练习】二进制到十进制的转换器

题目:二进制到十进制的转换器 描述 编写一个程序,将用户输入的8位二进制数转换成对应的十进制数并输出。如果用户输入的二进制数不是8位,则程序应提示用户输入无效,并终止运行。 要求 程序应首先提示用户输入一个8位二进制数。…

量子计算包kaiwu安装过程踩过的坑

目录 1 安装过程 2 官方代码测试 3 踩坑说明 首先,目前的kaiwu版本仅支持python3.8,所以必须要下载python3.8才能运行kaiwu 1 安装过程 step1: 在页面的SDK标签下,找到对应操作系统的kaiwu包。 step2: 下载python3.8到本地,可…

全文检索ElasticSearch到底是什么?

学习ElasticSearch之前,我们先来了解一下搜索 1 搜索是什么 ① 概念:用户输入想要的关键词,返回含有该关键词的所有信息。 ② 场景: ​ 1互联网搜索:谷歌、百度、各种新闻首页; ​ 2 站内搜索&#xff…

海鲜特写镜头视频素材去哪找 热门视频素材网站分享

作为美食自媒体创作者,海鲜特写镜头的视频素材无疑是提升内容吸引力和质量的重要利器。无论你想展示新鲜的海鲜原料、精美的烹饪过程,还是诱人的餐桌美食,精致的海鲜特写镜头都能极大地吸引观众的注意力。那么,问题来了&#xff1…

Unity 如何优雅的限定文本长度, 包含对特殊字符,汉字,数字的处理。实际的案例包括 用户昵称

常规限定文本长度 ( 通过 UntiyEngine.UI.Inputfiled 附带的长度限定 ) 痛点1 无法对中文,数字,英文进行识别,同样数量的汉字和同样数量的英文像素长度是不一样的,当我们限定固定长度后,在界面上的排版不够美观 痛点2…

SH3001姿态解算

姿态角,机体坐标系相对于参考坐标系的角度 旋转的非交换性 姿态角指的是载体坐标系与参考系之间的关系, 欧拉角是描述物体与某个轴(X,Y,Z)的关系,欧拉角属于姿态角的一种常见描述形式,另外两种描述形式就是四元数和和旋转矩阵 飞…

【英特尔IA-32架构软件开发者开发手册第3卷:系统编程指南】2001年版翻译,2-19

文件下载与邀请翻译者 学习英特尔开发手册,最好手里这个手册文件。原版是PDF文件。点击下方链接了解下载方法。 讲解下载英特尔开发手册的文章 翻译英特尔开发手册,会是一件耗时费力的工作。如果有愿意和我一起来做这件事的,那么&#xff…

电信网关配置管理系统 upload_channels.php 文件上传致RCE漏洞复现

0x01 产品简介 中国电信集团有限公司(英文名称“China Telecom”、简称“中国电信”)成立于2000年9月,是中国特大型国有通信企业、上海世博会全球合作伙伴。电信网关配置管理系统是一个用于管理和配置电信网络中网关设备的软件系统。它可以帮助网络管理员实现对网关设备的远…