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.mzph.cn/diannao/61043.shtml

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

相关文章

pycharm分支提交操作

一、Pycharm拉取Git远程仓库代码 1、点击VCS > Get from Version Control 2、输入git的url,选择自己的项目路径 3、点击Clone,就拉取成功了 默认签出分支为main 选择develop签出即可进行开发工作 二、创建分支(非必要可以不使用&#xf…

PySpark——Python与大数据

一、Spark 与 PySpark Apache Spark 是用于大规模数据( large-scala data )处理的统一( unified )分析引擎。简单来说, Spark 是一款分布式的计算框架,用于调度成百上千的服务器集群,计算 TB 、…

算法日记 26-27day 贪心算法

接下来的题目有些地方比较相似。需要注意多个条件。 题目:分发糖果 135. 分发糖果 - 力扣(LeetCode) n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。 你需要按照以下要求,给这些孩子分发糖果: 每…

Python绘制雪花

文章目录 系列目录写在前面技术需求完整代码代码分析1. 代码初始化部分分析2. 雪花绘制核心逻辑分析3. 窗口保持部分分析4. 美学与几何特点总结 写在后面 系列目录 序号直达链接爱心系列1Python制作一个无法拒绝的表白界面2Python满屏飘字表白代码3Python无限弹窗满屏表白代码4…

【一键整合包及教程】AI照片数字人工具EchoMimic技术解析

在数字化时代,人工智能(AI)正以前所未有的速度改变着我们的生活。EchoMimic,作为蚂蚁集团旗下支付宝推出的开源项目,不仅为数字人技术的发展掀开了新的一页,更为娱乐、教育、虚拟现实、在线会议等多个领域带…

STM32中断系统

目录 一、中断的基本概念 二、NVIC 1.NVIC的概念 2、NVIC的组成 3、NVIC的应用 4.NVIC的结构 三、外部中断EXTI 1.外部中断的概念 2.EXTI基本结构 四、EXTI外部中断的配置流程 1.开启APB2中的GPIO口/AFIO时钟 2.GPIO配置成输入模式 3.AFIO选择中断引脚 4.EXTI初始…

解锁远程AI工作流:Flowise搭配cpolar跨地域管理AI项目

文章目录 前言1. Docker安装Flowise2. Ubuntu安装Cpolar3. 配置Flowise公网地址4. 远程访问Flowise5. 固定Cpolar公网地址6. 固定地址访问 前言 如今,工作流自动化与人工智能的结合已成为提升生产力的重要手段。Flowise正是这样一个工具,通过直观的拖拽…

Cyberchef配合Wireshark提取并解析HTTP/TLS流量数据包中的文件

本文将介绍一种手动的轻量级的方式,还原HTTP/TLS协议中传输的文件,为流量数据包中的文件分析提供帮助。 如果捕获的数据包中存在非文本类文件,例如png,jpg等图片文件,或者word,Excel等office文件异或是其他类型的二进…

MATLAB用CNN-LSTM神经网络的语音情感分类深度学习研究

全文链接:https://tecdat.cn/?p38258 在语音处理领域,对语音情感的分类是一个重要的研究方向。本文将介绍如何通过结合二维卷积神经网络(2 - D CNN)和长短期记忆网络(LSTM)构建一个用于语音分类任务的网络…

Android笔记(三十七):封装一个RecyclerView Item曝光工具——用于埋点上报

背景 项目中首页列表页需要统计每个item的曝光情况,给产品运营提供数据报表分析用户行为,于是封装了一个通用的列表Item曝光工具,方便曝光埋点上报 源码分析 核心就是监听RecyclerView的滚动,在滚动状态为SCROLL_STATE_IDLE的时…

Minikube 上安装 Argo Workflow

文章目录 步骤 1:启动 Minikube 集群步骤 2:安装Argo Workflow步骤 3:访问UI创建流水线任务参考 前提条件: Minikube:确保你已经安装并启动了 Minikube。 kubectl:确保你已经安装并配置了 kubectl&#xff…

GCP Cloud Storage 的lock retention policy是什么

简介 Google Cloud Storage 的锁定保留策略(Lock Retention Policy)是一种用于保护存储桶中对象数据的功能。它允许用户设置一个保留期,在此期间对象不能被删除或覆盖。这对于确保数据的长期保留和合规性非常重要,尤其是在需要满…

STM32设计防丢防摔智能行李箱

目录 目录 前言 一、本设计主要实现哪些很“开门”功能? 二、电路设计原理图 1.电路图采用Altium Designer进行设计: 2.实物展示图片 三、程序源代码设计 四、获取资料内容 前言 随着科技的不断发展,嵌入式系统、物联网技术、智能设备…

CSP/信奥赛C++语法基础刷题训练(11):洛谷P5743:猴子吃桃

CSP/信奥赛C语法基础刷题训练(11):洛谷P5743:猴子吃桃 题目描述 一只小猴买了若干个桃子。第一天他刚好吃了这些桃子的一半,又贪嘴多吃了一个;接下来的每一天它都会吃剩余的桃子的一半外加一个。第 n n n…

控制器ThinkPHP6

五、控制器中对数组值的返回 在做接口服务时,很多时候回使用数组作为返回值,那么数组如何返回成 json呢? 在 tp6 中返回json 很简单,直接使用 json 进行返回即可,例如: public function index(){$resarra…

洛谷刷题日记||基础篇8

#include <iostream> #include <vector> using namespace std;int N, M; // N为行数&#xff0c;M为列数 vector<vector<char>> field; // 表示田地的网格&#xff0c;每个元素是W或. vector<vector<bool>> visited; // 用来记录网格是否访…

Qwen2.5-3B-Instruct-GGUF部署

注册账号&#xff1a; 魔搭社区 等一会&#xff1a; 部署好了&#xff1a; 立即使用&#xff1a; 您部署的服务提供OpenAI API接口&#xff0c;可通过OpenAI SDK进行调用。请确保您的服务处于正常运行状态&#xff0c;并预先安装OpenAI SDK: pip install openai 在本地新建…

恶意PDF文档分析记录

0x1 PDF是什么 PDF&#xff08;便携式文件格式&#xff0c;Portable Document Format&#xff09;是由Adobe Systems在1993年用於文件交换所发展出的文件格式。 因为PDF的文件格式性质广泛用于商业办公&#xff0c;引起众多攻击者对其开展技术研究&#xff0c;在一些APT&#…

Spring-事务学习

spring事务 1. 什么是事务? 事务其实是一个并发控制单位&#xff0c;是用户定义的一个操作序列&#xff0c;这些操作要么全部完成&#xff0c;要不全部不完成&#xff0c;是一个不可分割的工作单位。事务有 ACID 四个特性&#xff0c;即&#xff1a; 原子性&#xff08;Atom…

CVE-2024-2961漏洞的简单学习

简单介绍 PHP利用glibc iconv()中的一个缓冲区溢出漏洞&#xff0c;实现将文件读取提升为任意命令执行漏洞 在php读取文件的时候可以使用 php://filter伪协议利用 iconv 函数, 从而可以利用该漏洞进行 RCE 漏洞的利用场景 PHP的所有标准文件读取操作都受到了影响&#xff1…