机器学习笔记——聚类算法(Kmeans、GMM-使用EM优化)

news2024/11/21 18:31:36

本笔记介绍机器学习中常见的聚类算法(Kmeans、GMM-使用EM优化)。

在这里插入图片描述


文章目录

  • 聚类
    • K-Means
      • 工作原理
      • 特点
    • K-Medoids
      • 工作原理
      • 特点
    • Mini-Batch K-Means
      • 工作原理
      • 特点
    • K-Means++(重要)
      • 工作原理
      • 特点
    • 总结
    • K的选值
      • 1. 肘部法则(Elbow Method)
      • 2. 平均轮廓系数(Silhouette Score)
      • 3. Gap Statistic(间隙统计量)
      • 4. Davies-Bouldin 指数
      • 5. 信息准则(如 BIC/AIC)
      • 总结
    • 高斯混合模型(GMM, Gaussian Mixture Model)
      • 公式
      • 优势
    • EM算法(Expectation-Maximization Algorithm)
      • 使用EM训练GMM(进行参数估计)
        • EM算法的步骤
      • EM算法的特点
      • GMM 和 EM 的关系
    • GMM 与 K-Means 的比较
    • 其他聚类算法
      • 层次聚类(Hierarchical Clustering)
        • 1. 凝聚式层次聚类(Agglomerative Hierarchical Clustering)
        • 2. 分裂式层次聚类(Divisive Hierarchical Clustering)
        • 优缺点
      • DBSCAN(Density-Based Spatial Clustering of Applications with Noise)
        • 核心概念
        • 参数
        • 工作流程
        • 特点
        • 优缺点
        • 参数选择
  • 历史文章


聚类

K-Means

K-Means 是一种经典的聚类算法,用于将数据集划分为 K 个簇,每个簇由其质心(簇中心)表示。算法的目标是最小化簇内样本点到质心的平方距离之和,从而使得同一个簇内的样本更加相似。

工作原理

  1. 选择初始质心:随机选择 K 个点作为初始质心。
  2. 分配样本到最近的质心:将每个样本分配给距离最近的质心,形成 K 个簇。
  3. 更新质心:重新计算每个簇的质心,即簇内所有样本的平均值。
  4. 重复步骤 2 和 3,直到质心不再变化或达到最大迭代次数。

特点

  • 优点:简单易实现,计算速度快,适合大规模数据集。
  • 缺点:对初始质心敏感,容易陷入局部最优K-Means 基于欧氏距离,通常只能处理球形或凸形簇

K-Medoids

K-Medoids(也称为 PAM,Partitioning Around Medoids)是一种基于原型的聚类算法,与 K-Means 类似,但它选择数据点本身作为质心(称为 Medoid),而不是质心的平均值。

工作原理

  1. 选择初始 Medoid随机选择 K 个数据点作为初始 Medoid
  2. 分配样本到最近的 Medoid:将每个样本分配给距离最近的 Medoid,形成 K 个簇。
  3. 更新 Medoid:在每个簇内选择一个新的数据点,使得该点到簇内所有其他点的距离之和最小。
  4. 重复步骤 2 和 3,直到 Medoid 不再变化或达到最大迭代次数。

更新 Medoid如何做:

  1. 计算每个点的总距离:对于簇内的每个数据点 x i x_i xi,计算该点到簇内所有其他点的距离之和;
  2. 选择距离最小的点:找到使得距离之和最小的那个点作为新的 Medoid。

计算量很大

特点

  • 优点对异常值不敏感(因为选择实际数据点作为 Medoid),适合非球形簇。
  • 缺点:计算复杂度高,不适合大规模数据集。

Mini-Batch K-Means

Mini-Batch K-Means 是 K-Means 的一种扩展,旨在提高计算效率和速度。它通过在每次迭代中使用小批量的随机样本来更新质心,而不是使用整个数据集

工作原理

  1. 选择初始质心:随机选择 K 个点作为初始质心。
  2. 抽取小批量数据:从数据集中随机抽取一个小批量的数据点。
  3. 分配样本到最近的质心:将小批量数据中的每个样本分配给距离最近的质心。
  4. 更新质心:根据小批量数据更新质心,而不是全量数据。
  5. 重复步骤 2 到 4,直到质心收敛或达到最大迭代次数。

特点

  • 优点:计算速度快,内存占用少,适合大规模数据集和在线学习场景。
  • 缺点:相较于 K-Means 可能会损失一些精度,质心的更新不如全量数据集的更新精确。

K-Means++(重要)

K-Means++ 是 K-Means 的改进版本,旨在通过改进初始质心的选择来提高聚类效果和算法的稳定性。它能有效减少 K-Means 对初始质心的敏感性问题

工作原理

  1. 选择第一个质心:从数据集中随机选择一个样本点作为第一个质心。
  2. 选择下一个质心:选择距离现有质心最远的点作为下一个质心,选择概率与当前最小距离成正比。
  3. 重复步骤 2,直到选择出 K 个质心。
  4. 按照 K-Means 算法的步骤进行聚类。

特点

  • 优点:初始质心选择更好,聚类效果更加稳定,收敛速度更快。
  • 缺点:相比 K-Means 增加了一定的计算开销。

总结

  • K-Means随机选择 K 个点作为初始质心。简单高效,适合大多数常见场景,但对初始质心敏感。
  • K-Medoids随机选择 K 个数据点作为初始 Medoid。适合处理含有异常值或非球形分布的聚类问题,但计算复杂度较高。
  • Mini-Batch K-Means随机选择 K 个点作为初始质心,与标准 K-Means 相同。适合大规模数据和在线学习,速度快,但精度较 K-Means 略有下降。
  • K-Means++质心不是一次选出来的,从数据集中随机选择一个样本点作为第一个质心,之后距离现有质心最远的点作为下一个质心。改进了初始质心的选择,收敛速度更快,效果更稳定。

K的选值

K-means 聚类算法中,选择合适的 K 值(即簇的数量)是一个重要的步骤。以下是几种常用的选择 K 值的方法:

1. 肘部法则(Elbow Method)

肘部法则是 K-means 中最常用的方法之一,用于通过观察误差下降的速率来选择最佳的 K 值。

  • 计算不同 K 值下的 SSE(Sum of Squared Error)簇内误差平方和。SSE 是每个数据点到其所属簇中心的距离平方的总和,反映了簇内的紧密度。
  • 将 SSE 对应不同 K 值绘制成曲线,曲线会随着 K 的增加而逐渐下降。
  • 曲线会出现一个“肘部”拐点,从此点开始,SSE 的减少幅度明显减小。这个拐点对应的 K 值通常被认为是最佳值,因为此时增加簇的数量已经无法显著降低误差。

优点:

  • 简单直观,容易实施。

局限:

  • 肘部位置有时不明显,可能会出现多个可能的拐点或不显著的拐点。

2. 平均轮廓系数(Silhouette Score)

轮廓系数是一种度量聚类质量的方法,通过评估数据点在簇内的紧密度和簇间的分离度,来选择最佳的 K 值。

  • 对于每个 K 值,计算每个数据点的轮廓系数。轮廓系数的值范围为 [-1, 1],值越接近 1,说明聚类效果越好。
  • 计算每个数据点的轮廓系数后,取其平均值,得到该 K 值下的平均轮廓系数。
  • 选择具有最高平均轮廓系数的 K 值,此时簇内紧密度和簇间分离度达到最佳平衡。

优点:

  • 不仅考虑簇内紧密度,还考虑簇间分离度,对聚类效果的评价更全面。

局限:

  • 计算轮廓系数比肘部法则复杂,需要更多的计算资源,尤其在大数据集上。

3. Gap Statistic(间隙统计量)

间隙统计量方法通过将实际聚类结果与随机分布数据的聚类结果进行对比,选择最佳的 K 值。

  • 首先对原始数据进行 K-means 聚类,计算簇内误差平方和。
  • 然后生成与原始数据相同维度的随机数据集,重复相同的聚类过程,并计算随机数据的簇内误差平方和。
  • 计算原始数据的簇内误差和随机数据的差值,即 Gap 值。
  • Gap 值越大,说明聚类结构越显著。选择使 Gap 值最大或首次达到局部最大值的 K 值。

优点:

  • 可以有效评估聚类结构是否显著,适用于各种数据分布。

局限:

  • 计算量较大,尤其在数据集较大时,需要多次生成随机数据集并重复聚类。

4. Davies-Bouldin 指数

Davies-Bouldin 指数用于评估簇内的紧密度和簇间的分离度,选择较小的 Davies-Bouldin 指数的 K 值。

  • 对于每个 K 值,计算所有簇的平均距离(紧密度)以及簇之间的距离(分离度)。
  • Davies-Bouldin 指数越小,表示簇内紧密、簇间分离,聚类效果越好。
  • 选择 Davies-Bouldin 指数最小的 K 值。

优点:

  • 简单有效,适合较小的数据集。

局限:

  • 对数据分布敏感,某些分布下可能不适用。

5. 信息准则(如 BIC/AIC)

在一些统计方法中,可以使用信息准则来选择 K 值,尤其是结合高斯混合模型(GMM)时。

  • 计算不同 K 值下的 AIC(Akaike 信息准则)或 BIC(贝叶斯信息准则)。
  • AIC 和 BIC 的值越小,模型的解释性越强。
  • 选择最小 AIC 或 BIC 值对应的 K 值。

优点:

  • 适用于高斯分布假设下的聚类模型(如 GMM)。

局限:

  • 适用于较小的高斯混合数据,不适用于所有 K-means 场景。

总结

  • 肘部法则:最常用,适合快速估计 K 值。
  • 轮廓系数:对聚类质量评估更全面,适合复杂数据集。
  • Gap Statistic:适合验证聚类是否显著。
  • Davies-Bouldin 指数:通过簇内紧密度和簇间分离度选择 K。
  • AIC/BIC:适合与高斯混合模型(GMM)结合使用。

每种方法有其优缺点,可以根据具体的应用场景和数据特点选择合适的 K 值选择方法。

高斯混合模型(GMM, Gaussian Mixture Model)

用于聚类和概率密度估计的模型,它假设数据由多个高斯分布加权组合混合而成。GMM 能够比 K-Means 更灵活地表示数据,它允许每个簇具有不同的大小、形状和方向

公式

p ( x ) = ∑ k = 1 K π k ⋅ N ( x ∣ μ k , Σ k ) p(x) = \sum_{k=1}^K \pi_k \cdot \mathcal{N}(x \mid \mu_k, \Sigma_k) p(x)=k=1KπkN(xμk,Σk)
其中:

  • K K K:簇的数量,即高斯分布的数量
  • π k \pi_k πk:第 k k k 个高斯分布的混合系数,表示该簇占总数据的比例,且 ∑ k = 1 K π k = 1 \sum_{k=1}^K \pi_k = 1 k=1Kπk=1
  • N ( x ∣ μ k , Σ k ) \mathcal{N}(x \mid \mu_k, \Sigma_k) N(xμk,Σk):第 k k k 个高斯分布,具有均值 μ k \mu_k μk协方差矩阵 Σ k \Sigma_k Σk

该模型假设数据点 x x x 是从 K K K 个高斯分布的加权和中采样得到的,其中每个高斯分布的权重由 π k \pi_k πk 决定。

优势

  • 能够表示数据集中的复杂分布,包括不同形状和大小的簇
  • 每个簇由高斯分布表示,而非简单的球形聚类
  • 适合处理数据具有重叠不规则形状的聚类问题。

EM算法(Expectation-Maximization Algorithm)

EM算法是一种迭代优化算法,GMM 的参数估计通常使用期望最大化(EM)算法。它被广泛用于训练像 GMM 这样的概率模型。EM 算法包含两个主要步骤:期望步骤(E 步)和最大化步骤(M 步)。

使用EM训练GMM(进行参数估计)

EM算法的步骤
  1. 初始化
  • 随机初始化每个高斯分布的均值 μ k \mu_k μk、协方差 Σ k \Sigma_k Σk 和混合系数 π k \pi_k πk
  • 初始化可以通过随机选取数据点或使用 K-Means 聚类结果来设置初始值。

随机初始化模型参数(如 GMM 中的混合系数、均值和协方差矩阵)。

  1. E 步(Expectation Step)
  • 计算每个数据点属于每个高斯分布(簇)的后验概率(责任度),表示数据点由每个分量生成的概率。

  • 计算公式:
    r i k = π k ⋅ N ( x i ∣ μ k , Σ k ) ∑ j = 1 K π j ⋅ N ( x i ∣ μ j , Σ j ) r_{ik} = \frac{\pi_k \cdot \mathcal{N}(x_i \mid \mu_k, \Sigma_k)}{\sum_{j=1}^K \pi_j \cdot \mathcal{N}(x_i \mid \mu_j, \Sigma_j)} rik=j=1KπjN(xiμj,Σj)πkN(xiμk,Σk)

    其中 r i k r_{ik} rik 表示数据点 x i x_i xi 属于簇 k k k 的概率。

“责任度”是期望隐变量的条件概率,不是直接计算“期望”

隐变量是模型中不可观测的变量(隐藏的结构或类别)。
在 EM 算法中,隐变量通常是表示每个数据点由哪个潜在类别或簇生成的。

  1. M 步(Maximization Step)

利用 E 步计算得到的隐变量期望值(责任度) r i k r_{ik} rik 来更新参数 π k \pi_k πk μ k \mu_k μk Σ k \Sigma_k Σk最大化当前参数的似然函数,更新模型的参数。这一步的目标是优化模型参数,使得当前模型对数据的拟合更好。

(1). 更新混合系数 π k \pi_k πk

混合系数 π k \pi_k πk 表示簇 k k k 所占的比例,可以通过责任值的总和归一化来计算:

π k = ∑ i = 1 N r i k N \pi_k = \frac{\sum_{i=1}^N r_{ik}}{N} πk=Ni=1Nrik

其中:

  • N N N 是数据点的总数。
  • ∑ i = 1 N r i k \sum_{i=1}^N r_{ik} i=1Nrik 表示簇 k k k 对所有数据点的责任度总和,即簇 k k k 中有效的数据点数量。

(2). 更新均值 μ k \mu_k μk

k k k 的均值 μ k \mu_k μk 更新为所有数据点 x i x_i xi 的加权平均值,权重为责任度 r i k r_{ik} rik

μ k = ∑ i = 1 N r i k ⋅ x i ∑ i = 1 N r i k \mu_k = \frac{\sum_{i=1}^N r_{ik} \cdot x_i}{\sum_{i=1}^N r_{ik}} μk=i=1Nriki=1Nrikxi

这里:

  • r i k ⋅ x i r_{ik} \cdot x_i rikxi 表示数据点 x i x_i xi 对均值 μ k \mu_k μk 的贡献,按责任度加权。
  • 分母 ∑ i = 1 N r i k \sum_{i=1}^N r_{ik} i=1Nrik 是簇 k k k 中有效的数据点数量,确保均值为责任加权的结果。

(3). 更新协方差矩阵 Σ k \Sigma_k Σk

协方差矩阵 Σ k \Sigma_k Σk 表示簇 k k k 的数据分布形状和大小。协方差矩阵更新为所有数据点的加权方差,其中权重为责任度 r i k r_{ik} rik

Σ k = ∑ i = 1 N r i k ⋅ ( x i − μ k ) ( x i − μ k ) T ∑ i = 1 N r i k \Sigma_k = \frac{\sum_{i=1}^N r_{ik} \cdot (x_i - \mu_k)(x_i - \mu_k)^T}{\sum_{i=1}^N r_{ik}} Σk=i=1Nriki=1Nrik(xiμk)(xiμk)T

这里:

  • ( x i − μ k ) ( x i − μ k ) T (x_i - \mu_k)(x_i - \mu_k)^T (xiμk)(xiμk)T 表示数据点 x i x_i xi 与均值 μ k \mu_k μk 的偏差。
  • r i k ⋅ ( x i − μ k ) ( x i − μ k ) T r_{ik} \cdot (x_i - \mu_k)(x_i - \mu_k)^T rik(xiμk)(xiμk)T 是数据点 x i x_i xi 对协方差的贡献,按责任度加权。
  • 分母 ∑ i = 1 N r i k \sum_{i=1}^N r_{ik} i=1Nrik 是簇 k k k 的有效数据点数量。
  1. 重复 E 步和 M 步,直到参数收敛或达到最大迭代次数。

EM算法的特点

  • 适用性广:可用于解决许多存在隐变量或缺失数据的优化问题,如 GMM 训练、因子分析、HMM 等。
  • 收敛性:EM 算法每次迭代都会使似然函数单调增加,但可能收敛到局部最优解。
  • 对初始值敏感:不同的初始值可能导致不同的收敛结果。

GMM 和 EM 的关系

  • GMM 是模型,EM 是优化算法:GMM 是一种模型,用于表示数据的概率分布,而 EM 是一种优化算法,用于最大化 GMM 的似然函数。
  • EM 训练 GMM:通过 EM 算法,GMM 能够在给定数据的情况下找到最优参数,包括每个高斯分布的均值、协方差和混合系数。

GMM 与 K-Means 的比较

比较维度GMMK-Means
簇形状可以处理任意形状的簇,包括椭圆形和复杂形状的簇。只能处理球形或凸形簇。
簇分配软聚类,输出数据点属于每个簇的概率。硬聚类,每个数据点只能分配给一个簇。
参数估计使用 EM 算法进行参数估计,包含均值、协方差和混合系数。通过欧氏距离最小化,找到质心并分配数据点。
对初始值敏感对初始参数较为敏感,容易陷入局部最优解。对初始质心敏感,初始值不当可能导致较差结果。
计算复杂度计算协方差矩阵,复杂度较高。计算欧氏距离,复杂度较低。

其他聚类算法

层次聚类(Hierarchical Clustering)

层次聚类是一种构建层次结构的聚类算法,可以生成一棵聚类树(又称为树状图,dendrogram),并在不同层次的分组中展现数据的聚类结构。层次聚类可以分为两类方法:凝聚式(自底向上)分裂式(自顶向下)

1. 凝聚式层次聚类(Agglomerative Hierarchical Clustering)

在凝聚式层次聚类中,每个数据点从一开始被当作一个单独的簇,不断将相近的簇合并,直到达到预定的簇数量或合并距离超出阈值。

过程

  • 初始化:每个数据点作为一个簇。
  • 迭代:计算所有簇之间的距离,将距离最小的两个簇合并为一个簇。
  • 重复上述步骤,直到只剩下一个簇或达到设定的停止条件。

常用的距离度量方法

  • 单链接:计算两个簇之间最近的点的距离。
  • 全链接:计算两个簇之间最远的点的距离。
  • 平均链接:计算两个簇之间所有点对距离的平均值。
  • 中心链接:计算两个簇中心点之间的距离。
2. 分裂式层次聚类(Divisive Hierarchical Clustering)

分裂式层次聚类从一个包含所有数据点的大簇开始,然后逐步将每个簇分裂为较小的簇,直到每个簇包含单个数据点或达到停止条件。

过程

  • 初始化:将所有数据点放入一个簇。
  • 迭代:选择一个簇,将其分裂为两个子簇(通常基于聚类算法如 K-means)。
  • 重复上述步骤,直到满足终止条件。
优缺点
  • 优点:层次聚类不需要预设簇的数量,并且生成的树状图可以帮助我们理解数据的层次结构。
  • 缺点:计算复杂度高,尤其是对大数据集,时间和空间开销较大;不同的距离度量方法会影响聚类结果。

DBSCAN(Density-Based Spatial Clustering of Applications with Noise)

DBSCAN 是一种基于密度的聚类算法,它将数据点分为高密度区域的簇和低密度区域的噪声点。DBSCAN 可以发现任意形状的簇,并且能够自动检测噪声点。它适合用于空间分布不均匀的聚类任务。

核心概念
  1. 核心点(Core Point):在给定半径 ϵ \epsilon ϵ 内包含至少 MinPts 个邻居的点。
  2. 边界点(Border Point):在 ϵ \epsilon ϵ 半径内邻居数小于 MinPts 的点,但至少和一个核心点邻接。
  3. 噪声点(Noise Point):既不是核心点也不是边界点的点,通常被视为孤立点或噪声。
参数
  • ϵ \epsilon ϵ(半径):用于确定邻域的半径。
  • MinPts:在 ϵ \epsilon ϵ 邻域内点的最小数量,用于定义核心点。
工作流程
  1. 选择一个未访问的数据点
    • 如果该点是核心点,从该点开始扩展一个新簇,将它和其密度可达的点全部加入该簇。
    • 如果该点是边界点,则标记为边界点,并与已有簇的核心点连接。
    • 如果是噪声点,则将其标记为噪声,放弃该点。
  2. 扩展簇
    • 对于每个核心点,通过密度连接的方式,将所有密度可达的点加入同一簇。
  3. 迭代
    • 重复上述步骤,直到所有点都被访问过。
特点
  • 密度可达:如果一个点能够通过一系列的核心点连接到另一个点,则称这两个点密度可达。
  • 噪声检测:DBSCAN 能够有效检测出数据中的噪声点。
  • 簇的任意形状:DBSCAN 适合发现任意形状的簇,特别是非球形的簇结构。
优缺点
  • 优点
    • 不需要预设簇的数量。
    • 能处理不同密度的簇,适合任意形状的聚类。
    • 能有效检测噪声点。
  • 缺点
    • 参数 ϵ \epsilon ϵ 和 MinPts 的选择较敏感。
    • 不适合检测簇密度差异较大的数据集。
    • 对高维数据表现较差,因为在高维空间很难定义合理的密度。
参数选择

DBSCAN 中的参数选择对结果有较大影响,常用方法如下:

  • 通过 K-距离图(K-distance graph)选择 ϵ \epsilon ϵ:计算每个点到其 K 个最近邻的距离,然后对这些距离排序。当图中有明显拐点时,拐点的距离即为 ϵ \epsilon ϵ 的值。
  • MinPts 的选择:通常取 2 倍于数据的维度大小,例如在二维数据中可以取 MinPts = 4。

历史文章

本系列其他相关笔记参考如下:
机器学习笔记——损失函数、代价函数和KL散度
机器学习笔记——特征工程、正则化、强化学习
机器学习笔记——30种常见机器学习算法简要汇总
机器学习笔记——感知机、多层感知机(MLP)、支持向量机(SVM)
机器学习笔记——KNN(K-Nearest Neighbors,K 近邻算法)
机器学习笔记——朴素贝叶斯算法
机器学习笔记——决策树
机器学习笔记——集成学习、Bagging(随机森林)、Boosting(AdaBoost、GBDT、XGBoost、LightGBM)、Stacking
机器学习笔记——Boosting中常用算法(GBDT、XGBoost、LightGBM)迭代路径

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

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

相关文章

浅议Flink中的通讯工具: Akka

在Flink中,各个组件之间需要频繁交换数据和控制信息。Flink选择了基于Actor模型的Akka框架作为通信基础。 Akka是什么 Actor模型 Actor模型是用于单个进程中并发的场景。 在Actor模型中: ActorSystem负责管理actor生命周期 将每个实体视为独立的 Ac…

如何在react中使用react-monaco-editor渲染出一个编辑器

一、效果展示 二、基于vite配置 1.首先安装react-monaco-editor和monaco-editor包 npm add react-monaco-editor npm i monaco-editor 2.其次创建一个单独的文件(此处是tsx、直接用app或者jsx也行) import { useState, useEffect } from react impo…

孙玲:从流水线工人到谷歌程序员

这是《开发者说》的第24期,本期我们邀请的开发者是孙玲,她出生于湖南娄底一个贫穷的农村家庭,2009年高考落榜,她去了深圳一家电子厂,在流水线上给电池喷码,每天12个小时轮班,月薪2300&#xff0…

kali搭建pikachu靶场

前言: 总所周知搭个网站需要有apachemysqlphp,Apache是一个开源的Web服务器软件, MySQL是一种关系型数据库管理系统(数据库),PHP是一种在服务器上执行的脚本语言 文章内容来自:【黑帽编程与攻…

android 使用MediaPlayer实现音乐播放--获取音乐数据

前面已经添加了权限&#xff0c;有权限后可以去数据库读取音乐文件&#xff0c;一般可以获取全部音乐、专辑、歌手、流派等。 1. 获取全部音乐数据 class MusicHelper {companion object {SuppressLint("Range")fun getMusic(context: Context): MutableList<Mu…

VMware Workstation 17.6.1

概述 目前 VMware Workstation Pro 发布了最新版 v17.6.1&#xff1a; 本月11号官宣&#xff1a;针对所有人免费提供&#xff0c;包括商业、教育和个人用户。 使用说明 软件安装 获取安装包后&#xff0c;双击默认安装即可&#xff1a; 一路单击下一步按钮&#xff1a; 等待…

Methode Electronics EDI 需求分析

Methode Electronics 是一家总部位于美国的全球性技术公司&#xff0c;专注于设计和制造用于多个行业的电子和电气组件&#xff0c;产品涵盖汽车、工业、电信、医疗设备以及消费电子等多个领域&#xff0c;提供创新的解决方案。 填写Methode_EDI_Parameters_Template Methode_…

uniapp自动注册机制:easycom

传统 Vue 项目中&#xff0c;我们需要注册、导入组件之后才能使用组件。 uniapp 框架提供了一种组件自动注册机制&#xff0c;只要你在 components 文件夹下新建的组件满足 /components/组件名/组件名.vue 的命名规范&#xff0c;就能直接使用。 注意&#xff1a;组件的文件夹…

【Vue】Vue3.0(二十六)Vue3.0中的作用域插槽

上篇文章 【Vue】Vue3.0&#xff08;二十五&#xff09;Vue3.0中的具名插槽 的概念和使用场景 &#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;Vue专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年11月20日17点30分 文章目录 概念使用场景示…

C语言第14节:字符函数和字符串函数

1. 字符分类函数 C语言中有一系列的函数是专门做字符分类的&#xff0c;也就是一个字符是属于什么类型的字符的。这些函数的使用都需要包含一个头文件是<ctype.h> <ctype.h>头文件中的字符分类函数提供了一组用于检查单个字符特性的函数。这些函数接收一个字符&a…

IDEA怎么定位java类所用maven依赖版本及引用位置

在实际开发中&#xff0c;我们可能会遇到需要搞清楚代码所用依赖版本号及引用位置的场景&#xff0c;便于排查问题&#xff0c;怎么通过IDEA实现呢&#xff1f; 可以在IDEA中打开项目&#xff0c;右键点击maven的pom.xml文件&#xff0c;或者在maven窗口下选中项目&#xff0c;…

使用vscode+expo+Android夜神模拟器运行react-native项目

1.进入夜神模拟器安装路径下的bin目录 2.输入命令&#xff0c;连接Android Studio 启动夜神模拟器后&#xff0c; 打开安装目录的bin文件夹执行下面的命令&#xff0c;只需执行一次&#xff09; nox_adb.exe connect 127.0.0.1:62001adb connect 127.0.0.1:62001 3.运行项目…

IPv6 NDP 记录

NDP&#xff08;Neighbor Discovery Protocol&#xff0c;邻居发现协议&#xff09; 是 IPv6 的一个关键协议&#xff0c;它组合了 IPv4 中的 ARP、ICMP 路由器发现和 ICMP 重定向等协议&#xff0c;并对它们作出了改进。该协议使用 ICMPv6 协议实现&#xff0c;作为 IPv6 的基…

个人全栈开发微信小程序上线了(记日记)

个人开发的全栈项目&#xff0c;《每日记鸭》微信小程序上线了&#xff01; 主要是技术栈&#xff1a;uniapp,koa2,mongodb,langchian&#xff1b; 感兴趣的小伙伴可以来捧捧场&#xff01;

用源码编译虚幻引擎,并打包到安卓平台

用源码编译虚幻引擎&#xff0c;并打包到安卓平台 前往我的博客,获取更优的阅读体验 作业内容: 源码编译UE5.4构建C项目&#xff0c;简单设置打包到安卓平台 编译虚幻 5 前置内容 这里需要将 Epic 账号和 Github 账号绑定&#xff0c;然后加入 Epic 邀请的组织&#xff0c…

如何更改手机GPS定位

你是否曾想过更改手机GPS位置以保护隐私、玩游戏或访问受地理限制的内容&#xff1f;接下来我将向你展示如何使用 MagFone Location Changer 更改手机GPS 位置&#xff01;无论是在玩Pokmon GO游戏、发布社媒贴子&#xff0c;这种方法都快速、简单且有效。 第一步&#xff1a;下…

如何在 Ubuntu 上使用 Docker 部署 LibreOffice Online

简介 LibreOffice Online&#xff08;也称为Collabora Online&#xff09;是一个开源的在线办公套件&#xff0c;它提供了与LibreOffice桌面版相似的功能&#xff0c;但完全在云端运行。这意味着用户可以通过浏览器访问和编辑文档&#xff0c;而无需在本地计算机上安装任何软件…

Uniapp运行环境判断和解决跨端兼容性详解

Uniapp运行环境判断和解决跨端兼容性 开发环境和生产环境 uniapp可通过process.env.NODE_ENV判断当前环境是开发环境还是生产环境&#xff0c;一般用于链接测试服务器或者生产服务器的动态切换。在HX中&#xff0c;点击运行编译出来的代码是开发环境&#xff0c;点击发行编译…

华为Ensp模拟器配置OSPF路由协议

目录 简介 实验步骤 Pc配置 路由器配置 OSPF配置 交换机配置 简介 开放式最短路径优先 (OSPF) 协议深度解析 简介 开放式最短路径优先&#xff08;Open Shortest Path First, OSPF&#xff09;是一种内部网关协议&#xff08;IGP&#xff09;&#xff0c;用于在自治系统…

【JavaEE初阶 — 多线程】线程池

目录 1. 线程池的原理 1.1 为什么要有线程池 1.2 线程池的构造方法 1.3 线程池的核心参数 1.4 TimeUnit 1.5 工作队列的类型 1.6 工厂设计模式 1.6.1 工厂模式概念 1.6.2 使用工厂模式的好处 1.6.3 使用工厂模式的典型案例 1.6.4 Thread…