k-近邻算法(K-Nearest Neighbors, KNN)详解:机器学习中的经典算法

在这里插入图片描述

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

文章目录

    • 引言
    • 一、基本原理
      • 1.1 工作机制
      • 1.2 距离度量
      • 1.3 k值的选择
      • 1.4 优缺点
    • 二、数学模型
      • 2.1 数据表示
      • 2.2 距离计算
      • 2.3 k-近邻算法的分类模型
      • 2.4 k-近邻算法的回归模型
      • 2.5 模型评估
      • 2.6 小结
    • 三、实现步骤
      • 3.1 数据准备
      • 3.2 选择k值
      • 3.3 模型训练
      • 3.4 预测
      • 3.5 模型评估
      • 3.6 调整与优化
      • 3.7 小结
    • 四、应用场景
      • 4.1 图像识别
      • 4.2 推荐系统
      • 4.3 医疗诊断
    • 总结

在这里插入图片描述

引言

  在机器学习的广阔领域中,k-近邻算法(K-Nearest Neighbors, KNN)以其简单易懂和直观的特性,成为了许多初学者和专业人士的首选算法之一。作为一种基于实例的学习方法,k-近邻算法不需要复杂的模型训练过程,而是通过存储训练数据并在预测时进行距离计算来进行分类或回归。这种方法使得k-近邻算法在处理小规模数据集时表现出色,尤其在图像识别、推荐系统和医疗诊断等应用场景中得到了广泛的应用。

  尽管k-近邻算法的基本原理相对简单,但其在实际应用中的表现却受到多个因素的影响,如特征选择、距离度量和k值的选择等。因此,深入理解k-近邻算法的原理、数学模型及其实现步骤,对于提升模型的性能至关重要。本文将全面探讨k-近邻算法的各个方面,帮助读者更好地掌握这一经典算法,并在实际项目中灵活应用。

一、基本原理

  k-近邻算法(K-Nearest Neighbors, KNN)是一种基于实例的学习方法,其核心思想是通过比较待分类样本与训练集中样本之间的相似性来进行分类或回归。以下将详细阐述k-近邻算法的基本原理,包括其工作机制、距离度量、k值的选择以及优缺点。

1.1 工作机制

  k-近邻算法的工作机制可以分为两个主要阶段:训练阶段和预测阶段。

训练阶段

  在训练阶段,k-近邻算法并不进行显式的模型训练,而是简单地存储训练数据集。每个样本由特征向量和对应的标签组成。此阶段的主要任务是准备好数据,以便在预测阶段进行有效的相似性比较。

预测阶段

  在预测阶段,k-近邻算法的工作流程如下:

  1. 输入待分类样本:接收一个待分类的样本,其特征向量为 x x x
  2. 计算距离:计算待分类样本与训练集中所有样本之间的距离。常用的距离度量方法包括欧氏距离、曼哈顿距离和闵可夫斯基距离。
  3. 选择k个最近邻:根据计算得到的距离,选择距离待分类样本最近的k个训练样本。
  4. 投票机制
    • 分类任务:对这k个样本的类别进行投票,选择出现次数最多的类别作为预测结果。
    • 回归任务:对这k个样本的值进行平均,得到预测值。

1.2 距离度量

  距离度量是k-近邻算法的关键部分,影响着算法的性能和预测结果。以下是几种常用的距离度量方法:

  • 欧氏距离:最常用的距离度量,适用于连续特征。计算公式为:
    d ( x , y ) = ∑ i = 1 n ( x i − y i ) 2 d(x, y) = \sqrt{\sum_{i=1}^{n}(x_i - y_i)^2} d(x,y)=i=1n(xiyi)2

  • 曼哈顿距离:适用于特征值较小或特征之间差异较大的情况。计算公式为:
    d ( x , y ) = ∑ i = 1 n ∣ x i − y i ∣ d(x, y) = \sum_{i=1}^{n}|x_i - y_i| d(x,y)=i=1nxiyi

  • 闵可夫斯基距离:是欧氏距离和曼哈顿距离的推广,参数 p p p决定了距离的类型。计算公式为:
    d ( x , y ) = ( ∑ i = 1 n ∣ x i − y i ∣ p ) 1 / p d(x, y) = \left(\sum_{i=1}^{n}|x_i - y_i|^p\right)^{1/p} d(x,y)=(i=1nxiyip)1/p

  选择合适的距离度量对于k-近邻算法的效果至关重要,通常需要根据具体问题进行实验和调整。

1.3 k值的选择

  k值的选择直接影响k-近邻算法的性能。k值过小可能导致模型对噪声敏感,容易出现过拟合;而k值过大则可能导致模型过于平滑,无法捕捉到数据的局部结构。选择合适的k值通常可以通过以下方法:

  • 交叉验证:使用交叉验证技术,在不同的k值下评估模型的性能,选择表现最佳的k值。
  • 经验法则:一般情况下,k值可以选择为样本总数的平方根,或者在小范围内进行调整。

1.4 优缺点

优点

  • 简单易懂:k-近邻算法的原理直观,易于实现和理解。
  • 无参数模型:不需要进行复杂的模型训练,适合小规模数据集。
  • 适应性强:可以处理多类别问题,适用于分类和回归任务。

缺点

  • 计算复杂度高:在预测阶段需要计算所有训练样本的距离,随着数据集规模的增大,计算成本显著增加。
  • 对噪声敏感:k-近邻算法对异常值和噪声数据较为敏感,可能影响预测结果。
  • 特征选择影响:特征的尺度和选择对距离计算有较大影响,可能需要进行特征标准化。

二、数学模型

  k-近邻算法(K-Nearest Neighbors, KNN)的数学模型主要围绕样本之间的距离计算、投票机制以及模型评估等方面展开。以下将详细阐述k-近邻算法的数学模型,包括其基本公式、分类和回归的具体实现,以及模型评估方法。

2.1 数据表示

  在k-近邻算法中,数据集通常表示为一个包含多个样本的集合,每个样本由特征向量和标签组成。假设我们有一个训练集 D D D,其中包含 N N N 个样本,每个样本由特征向量 x i x_i xi 和对应的标签 y i y_i yi 组成:

D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x N , y N ) } D = \{(x_1, y_1), (x_2, y_2), \ldots, (x_N, y_N)\} D={(x1,y1),(x2,y2),,(xN,yN)}

  其中, x i ∈ R m x_i \in \mathbb{R}^m xiRm 表示样本的特征向量, y i y_i yi 表示样本的类别(分类任务)或值(回归任务)。

2.2 距离计算

  在k-近邻算法中,距离计算是核心步骤之一。常用的距离度量包括:

  欧氏距离:是最常用的距离度量,适用于连续特征。其计算公式为:

d ( x , y ) = ∑ j = 1 m ( x j − y j ) 2 d(x, y) = \sqrt{\sum_{j=1}^{m}(x_j - y_j)^2} d(x,y)=j=1m(xjyj)2

  曼哈顿距离:适用于特征值较小或特征之间差异较大的情况,计算公式为:

d ( x , y ) = ∑ j = 1 m ∣ x j − y j ∣ d(x, y) = \sum_{j=1}^{m}|x_j - y_j| d(x,y)=j=1mxjyj

  闵可夫斯基距离:是欧氏距离和曼哈顿距离的推广,计算公式为:

d ( x , y ) = ( ∑ j = 1 m ∣ x j − y j ∣ p ) 1 / p d(x, y) = \left(\sum_{j=1}^{m}|x_j - y_j|^p\right)^{1/p} d(x,y)=(j=1mxjyjp)1/p

  其中, p p p 是一个参数, p = 2 p=2 p=2 时为欧氏距离, p = 1 p=1 p=1 时为曼哈顿距离。

2.3 k-近邻算法的分类模型

在分类任务中,k-近邻算法的预测过程可以用以下步骤表示:

  1. 计算距离:对于待分类样本 x x x,计算其与训练集中所有样本的距离 d ( x , x i ) d(x, x_i) d(x,xi)
  2. 选择k个最近邻:根据距离从小到大排序,选择距离最近的k个样本 N k = { x i 1 , x i 2 , … , x i k } N_k = \{x_{i_1}, x_{i_2}, \ldots, x_{i_k}\} Nk={xi1,xi2,,xik}
  3. 投票机制:对这k个样本的类别进行投票,预测类别 y ^ \hat{y} y^ 为出现次数最多的类别:

y ^ = mode ( y i 1 , y i 2 , … , y i k ) \hat{y} = \text{mode}(y_{i_1}, y_{i_2}, \ldots, y_{i_k}) y^=mode(yi1,yi2,,yik)

2.4 k-近邻算法的回归模型

在回归任务中,k-近邻算法的预测过程与分类类似,但预测值的计算方式不同:

  1. 计算距离:同样计算待预测样本 x x x 与训练集中所有样本的距离。
  2. 选择k个最近邻:选择距离最近的k个样本 N k = { x i 1 , x i 2 , … , x i k } N_k = \{x_{i_1}, x_{i_2}, \ldots, x_{i_k}\} Nk={xi1,xi2,,xik}
  3. 平均值计算:对这k个样本的值进行平均,得到预测值 y ^ \hat{y} y^

y ^ = 1 k ∑ j = 1 k y i j \hat{y} = \frac{1}{k} \sum_{j=1}^{k} y_{i_j} y^=k1j=1kyij

2.5 模型评估

在k-近邻算法中,模型评估是判断算法性能的重要步骤。常用的评估指标包括:

分类任务评估指标

  • 准确率(Accuracy):正确分类的样本占总样本的比例:

Accuracy = TP + TN TP + TN + FP + FN \text{Accuracy} = \frac{\text{TP} + \text{TN}}{\text{TP} + \text{TN} + \text{FP} + \text{FN}} Accuracy=TP+TN+FP+FNTP+TN

其中,TP(True Positive)为真正例,TN(True Negative)为真反例,FP(False Positive)为假正例,FN(False Negative)为假反例。

  • 精确率(Precision):预测为正类的样本中实际为正类的比例:

Precision = TP TP + FP \text{Precision} = \frac{\text{TP}}{\text{TP} + \text{FP}} Precision=TP+FPTP

  • 召回率(Recall):实际为正类的样本中被正确预测为正类的比例:

Recall = TP TP + FN \text{Recall} = \frac{\text{TP}}{\text{TP} + \text{FN}} Recall=TP+FNTP

  • F1-score:精确率和召回率的调和平均数:

F 1 = 2 ⋅ Precision ⋅ Recall Precision + Recall F1 = 2 \cdot \frac{\text{Precision} \cdot \text{Recall}}{\text{Precision} + \text{Recall}} F1=2Precision+RecallPrecisionRecall

回归任务评估指标

  • 均方误差(Mean Squared Error, MSE):预测值与真实值之间差异的平方的平均值:

MSE = 1 n ∑ i = 1 n ( y i − y ^ i ) 2 \text{MSE} = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 MSE=n1i=1n(yiy^i)2

  • 均方根误差(Root Mean Squared Error, RMSE):均方误差的平方根,表示预测误差的标准差:

RMSE = MSE \text{RMSE} = \sqrt{\text{MSE}} RMSE=MSE

  • 决定系数(R²):表示模型对数据变异的解释程度,值越接近1表示模型越好:

R 2 = 1 − ∑ i = 1 n ( y i − y ^ i ) 2 ∑ i = 1 n ( y i − y ˉ ) 2 R^2 = 1 - \frac{\sum_{i=1}^{n} (y_i - \hat{y}_i)^2}{\sum_{i=1}^{n} (y_i - \bar{y})^2} R2=1i=1n(yiyˉ)2i=1n(yiy^i)2

2.6 小结

  k-近邻算法的数学模型主要围绕样本之间的距离计算、投票机制和模型评估展开。通过合理的距离度量和k值选择,k-近邻算法能够有效地进行分类和回归任务。理解其数学模型对于优化算法性能和应用于实际问题至关重要。

三、实现步骤

  k-近邻算法(K-Nearest Neighbors, KNN)的实现步骤相对简单,主要包括数据准备、模型训练、预测、评估等环节。以下将详细阐述k-近邻算法的实现步骤。

3.1 数据准备

  数据准备是k-近邻算法实施的第一步,主要包括数据收集、数据预处理和特征选择。

数据收集

  首先,需要收集相关的数据集。数据集可以来源于公开数据集、企业内部数据或通过爬虫技术获取。确保数据集的质量和代表性是成功实施k-近邻算法的基础。

数据预处理

  数据预处理包括以下几个方面:

  • 缺失值处理:检查数据集中是否存在缺失值,并采取适当的处理方法,如删除缺失值、用均值或中位数填充等。

  • 数据清洗:去除重复样本和异常值,确保数据的准确性。

  • 特征标准化:由于k-近邻算法依赖于距离计算,不同特征的尺度可能会影响结果。因此,通常需要对特征进行标准化处理,使其均值为0,标准差为1,或将特征缩放到相同的范围(如[0, 1])。

    常用的标准化方法包括:

    • Z-score标准化
      x ′ = x − μ σ x' = \frac{x - \mu}{\sigma} x=σxμ
      其中, μ \mu μ为特征的均值, σ \sigma σ为标准差。

    • Min-Max标准化
      x ′ = x − min ( x ) max ( x ) − min ( x ) x' = \frac{x - \text{min}(x)}{\text{max}(x) - \text{min}(x)} x=max(x)min(x)xmin(x)

特征选择

特征选择是提高模型性能的重要步骤。可以通过以下方法进行特征选择:

  • 相关性分析:计算特征与目标变量之间的相关性,选择相关性较高的特征。
  • 特征重要性评估:使用树模型等方法评估特征的重要性,选择重要性较高的特征。
  • 降维技术:如主成分分析(PCA)等,减少特征维度,保留主要信息。

3.2 选择k值

  选择合适的k值是k-近邻算法的重要环节。k值的选择可以通过以下方法进行:

  • 交叉验证:将数据集划分为训练集和验证集,使用不同的k值进行训练和验证,选择在验证集上表现最佳的k值。

  • 经验法则:通常情况下,k值可以选择为样本总数的平方根,或者在小范围内进行调整(如3、5、7等)。

3.3 模型训练

  k-近邻算法的训练过程相对简单,因为它不需要显式的模型训练。主要步骤如下:

  1. 存储训练数据:将预处理后的训练数据集存储在内存中,以便在预测阶段进行距离计算。

3.4 预测

  在预测阶段,k-近邻算法的主要步骤如下:

  1. 输入待分类样本:接收一个待分类的样本,其特征向量为 x x x

  2. 计算距离:计算待分类样本与训练集中所有样本之间的距离,使用选择的距离度量方法(如欧氏距离、曼哈顿距离等)。

  3. 选择k个最近邻:根据计算得到的距离,从小到大排序,选择距离最近的k个样本 N k = { x i 1 , x i 2 , … , x i k } N_k = \{x_{i_1}, x_{i_2}, \ldots, x_{i_k}\} Nk={xi1,xi2,,xik}

  4. 投票机制

    • 分类任务:对这k个样本的类别进行投票,选择出现次数最多的类别作为预测结果:
      y ^ = mode ( y i 1 , y i 2 , … , y i k ) \hat{y} = \text{mode}(y_{i_1}, y_{i_2}, \ldots, y_{i_k}) y^=mode(yi1,yi2,,yik)

    • 回归任务:对这k个样本的值进行平均,得到预测值:
      y ^ = 1 k ∑ j = 1 k y i j \hat{y} = \frac{1}{k} \sum_{j=1}^{k} y_{i_j} y^=k1j=1kyij

3.5 模型评估

  模型评估是判断k-近邻算法性能的重要步骤。可以使用以下指标进行评估:

分类任务评估指标

  • 准确率(Accuracy):计算正确分类的样本占总样本的比例。
  • 精确率(Precision)召回率(Recall)F1-score:用于评估模型在不平衡数据集上的表现。

回归任务评估指标

  • 均方误差(MSE)均方根误差(RMSE)决定系数(R²):用于评估回归模型的预测性能。

3.6 调整与优化

  根据模型评估的结果,可以进行以下调整与优化:

  • 调整k值:根据评估结果,适当调整k值以提高模型性能。
  • 特征选择:重新评估特征的重要性,选择更优的特征组合。
  • 距离度量:尝试不同的距离度量方法,观察对模型性能的影响。

3.7 小结

  k-近邻算法的实现步骤包括数据准备、选择k值、模型训练、预测、模型评估以及调整与优化等环节。通过合理的步骤和方法,可以有效地应用k-近邻算法解决分类和回归问题。理解这些实现步骤对于成功应用k-近邻算法至关重要。

四、应用场景

  k-近邻算法(K-Nearest Neighbors, KNN)因其简单性和有效性,广泛应用于多个领域。以下是一些典型的应用案例,包括图像识别、推荐系统和医疗诊断,每个案例都结合具体代码进行详细阐述。

4.1 图像识别

  图像识别是k-近邻算法的一个经典应用场景。通过计算图像特征之间的距离,k-近邻算法可以有效地对图像进行分类。常见的数据集包括MNIST手写数字数据集。

示例代码

  以下是使用k-近邻算法对MNIST数据集进行手写数字识别的示例代码:

import numpy as np
from sklearn.datasets import fetch_openml
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score# 加载MNIST数据集
mnist = fetch_openml('mnist_784', version=1)
X, y = mnist['data'], mnist['target']# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 创建k-近邻分类器
k = 5
knn = KNeighborsClassifier(n_neighbors=k)# 训练模型
knn.fit(X_train, y_train)# 进行预测
y_pred = knn.predict(X_test)# 评估模型
accuracy = accuracy_score(y_test, y_pred)
print(f'准确率: {accuracy:.2f}')

4.2 推荐系统

  k-近邻算法也被广泛应用于推荐系统中。通过分析用户的历史行为,k-近邻算法可以为用户推荐相似的产品或内容。常见的应用包括电影推荐、商品推荐等。

示例代码

  以下是使用k-近邻算法进行简单商品推荐的示例代码,假设我们有一个用户-商品评分矩阵:

import numpy as np
from sklearn.neighbors import NearestNeighbors# 用户-商品评分矩阵
ratings = np.array([[5, 4, 0, 0, 2],[0, 0, 4, 5, 0],[3, 0, 0, 0, 4],[0, 2, 3, 0, 0],[0, 0, 5, 4, 0]])# 创建k-近邻模型
knn = NearestNeighbors(n_neighbors=2, metric='cosine')
knn.fit(ratings)# 假设我们要为用户0推荐商品
user_id = 0
distances, indices = knn.kneighbors(ratings[user_id].reshape(1, -1))# 输出推荐的用户
print("为用户0推荐的相似用户ID:", indices.flatten()[1:])

4.3 医疗诊断

  在医疗领域,k-近邻算法可以根据病人的症状和历史数据进行疾病分类。通过分析病人的特征,k-近邻算法能够帮助医生做出更准确的诊断。

示例代码

  以下是使用k-近邻算法进行简单医疗诊断的示例代码,假设我们有一个包含病人症状和疾病标签的数据集:

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import classification_report# 假设我们有一个简单的医疗数据集
data = {'symptom1': [1, 0, 1, 1, 0],'symptom2': [0, 1, 1, 0, 1],'symptom3': [1, 1, 0, 0, 1],'disease': ['A', 'B', 'A', 'B', 'A']
}df = pd.DataFrame(data)# 特征和标签
X = df[['symptom1', 'symptom2', 'symptom3']]
y = df['disease']# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 创建k-近邻分类器
k = 3
knn = KNeighborsClassifier(n_neighbors=k)# 训练模型
knn.fit(X_train, y_train)# 进行预测
y_pred = knn.predict(X_test)# 评估模型
print(classification_report(y_test, y_pred))

总结

  k-近邻算法(KNN)作为一种经典的机器学习算法,以其简单易懂和直观的特性,广泛应用于多个领域,包括图像识别、推荐系统和医疗诊断等。通过计算样本之间的距离,k-近邻算法能够有效地进行分类和回归任务,帮助解决实际问题。尽管k-近邻算法在小规模数据集上表现良好,但在处理大规模数据时可能面临计算复杂度高和对噪声敏感等挑战。因此,在实际应用中,合理选择距离度量、k值以及进行适当的数据预处理和特征选择是提高模型性能的关键。通过本文的探讨,希望读者能够更深入地理解k-近邻算法的原理、实现步骤及其应用场景,从而在实际项目中灵活运用这一强大的工具。


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

在这里插入图片描述

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

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

相关文章

LeetCode297.二叉树的序列化和反序列化

题目要求 序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。 请设计一个算法来实现二叉树的序列化与反序…

蓝牙5.0模块助力闹钟升级,开启智能生活第一步

随着智能家居产业的快速发展,智能闹钟作为其中一个重要的品类,逐渐从单一的时间提醒功能演变为集音频播放、语音交互、智能控制等多种功能于一体的智能设备。而在这些功能的实现中,蓝牙音频模组扮演着核心角色。 1、蓝牙音频模组的功能概述 …

自己动手写Qt Creator插件

文章目录 前言一、环境准备1.先看自己的Qt Creator IDE的版本2.下载源码 二、使用步骤1.参考原本的插件2.编写自定义插件1.cmakelist增加一个模块2.同理,qbs文件也增加一个3.插件源码 三、效果总结 前言 就目前而言,Qt Creator这个IDE,插件比…

力扣经典面试题

1.本题的目标是判断字符串ransomNote是否由字符串magazine中的字符构成,且由magazine中的每个字符只能在ransomNote中使用一次 2.采用的方法是通过一个字典cahr_countl来统计magazine字符串中每个字符出现的次数 3.然后遍历ransomNote字符串,对于其中的…

Java开发人员从了学习ArkTs笔记(三)-数据结构与线程通信全解析

大家好,我是一名热爱Java开发的开发人员。目前,我正在学习ARKTS(Advanced Java Knowledge and Technology Stack),并将不断输出我的学习笔记。我将在这里分享我学习ARKTS的过程和心得,希望能够为其他开发人…

Java基础——预定义类/自定义类封装什么是Final类型

目录 预定义类——日历输出: 自定义类——在Java文件中: 什么是封装? 什么是final类型? 修饰变量: 修饰方法: 修饰类: 预定义类——日历输出: 例如:Math类、Date类…

spi 回环

///tx 极性0 (sclk信号线空闲时为低电平) /// 相位0 (在sclk信号线第一个跳变沿进行采样) timescale 1ns / 1ps//两个从机 8d01 8d02 module top(input clk ,input rst_n,input [7:0] addr ,input …

20241114软考架构-------软考案例16答案

每日打卡题案例16答案 16.【2017年真题】 难度:简单 阅读以下关于软件架构评估的叙述,在答题纸上回答问题1和问题2.(共25分) 【说明】 某单位为了建设健全的公路桥梁养护管理档案,拟开发一套公路桥梁在线管理系统。在系统的需求分析与架构设…

低成本出租屋5G CPE解决方案:ZX7981PG/ZX7981PM WIFI6千兆高速网络

刚搬进新租的房子,没有网络,开个热点?续航不太行。随身WIFI?大多是百兆级网络。找人拉宽带?太麻烦,退租的时候也不能带着走。5G CPE倒是个不错的选择,插入SIM卡就能直接连接5G网络,千…

Python学习小记3-传递任意数量的实参

1.形参名*toppings 中的星号让Python创建一个名为toppings 的空元组,不管调用语句提供了多少实参,这个形参会将它们统统收入囊中,即:无论几个小料 def make_pizza(size, *toppings):print(f"\n要制作一个{size}-inch的披萨&…

宝塔 docker 部署onlyoffice 服务

1.宝塔安装docker,直接下载安装就行 2.docker拉取onlyoffice镜像 docker pull onlyoffice/documentserver:5.3.1.26 5.4或更高的版本已经解决了连接数限制方法的Bug 3.创建容器 docker run -d --name onlyoffice --restartalways -p 暴露端口号:80 onlyoffice/documentserv…

【数据结构副本篇】顺序表 链表OJ

🏝️专栏:【数据结构实战篇】 🌅主页:f狐o狸x 学习其实和打游戏一样,当你觉得BOSS难打的时候就说明是你的等级和装备不够,此时就需要我们多去刷刷副本,增加一点经验,顺便爆点装备出…

论文笔记(五十六)VIPose: Real-time Visual-Inertial 6D Object Pose Tracking

VIPose: Real-time Visual-Inertial 6D Object Pose Tracking 文章概括摘要I. INTRODACTIONII. 相关工作III. APPROACHA. 姿态跟踪工作流程B. VIPose网络 文章概括 引用: inproceedings{ge2021vipose,title{Vipose: Real-time visual-inertial 6d object pose tra…

AI风向标|算力与通信的完美融合,SRM6690解锁端侧AI的智能密码

当前,5G技术已经成为推动数字经济和实体经济深度融合的关键驱动力,进入5G发展的下半场,5G与AI的融合正推动诸多行业的数字化转型和创新发展,终端侧AI和端云混合式AI将广泛应用于各类消费终端和各行各业。 在推动5G和AI与各行业场…

封装一个省市区的筛选组件

筛选功能&#xff1a;只能单选&#xff08;如需多选需要添加show-checkbox多选框属性&#xff09;&#xff0c;选中省传递省的ID&#xff0c;选中市传递省、市的ID&#xff0c; 选中区传递省市区的ID 父组件&#xff1a; <el-form-item><div style"width: 240px;…

Liunx:共享内存

共享内存是实现进程间通信的又一个策略。 与管道在逻辑上相似&#xff0c;用户可以向OS申请&#xff0c;在物理内存中开辟一块空间&#xff0c;OS开辟并向上层返回这块空间的起始地址。需要通信的双方将这块空间通过页表映射&#xff0c;各自的挂载到自己进程地址空间的共享区。…

STM32 创建一个工程文件(寄存器、标准库)

首先到官网下载对应型号的固件包&#xff1a; 像我的STM32F103C8T6的就下载这个&#xff1a; 依次打开&#xff1a; .\STM32F10x_StdPeriph_Lib_V3.5.0\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm 可以看到&#xff1a; 这…

鸿蒙HarmonyOS 地图不显示解决方案

基于地图的开发准备已完成的情况下&#xff0c;地图还不显式的问题 首先要获取设备uuid 获取设备uuid 安装DevEco Studio的路径下 有集成好的hdc工具 E:\install_tools\DevEco Studio\sdk\default\openharmony\toolchains 这个路径下打开cmd运行 进入“设置 > 关于手机…

主机型入侵检测系统(HIDS)——Elkeid在Centos7的保姆级安装部署教程

一、HIDS简介 主机型入侵检测系统(Host-based Intrusion Detection System 简称:HIDS);HIDS作为主机的监视器和分析器,主要是专注于主机系统内部(监视系统全部或部分的动态的行为以及整个系统的状态)。 HIDS使用传统的C/S架构,只需要在监测端安装agent即可,且使用用户…

ArkUI---使用弹窗---@ohos.promptAction (弹窗)

promptAction.showToast&#xff08;文本提示框&#xff09; showToast(options: ShowToastOptions): void 创建并显示文本提示框&#xff0c;想看官方文档请点我 ShowToastOptions相关参数请点我 完整代码&#xff1a; import { promptAction } from kit.ArkUIEntry Componen…