全面解析AdaBoost:多分类、逻辑回归与混合分类器的实现

1. 使用 AdaBoost 完成多分类和逻辑回归问题

多分类

AdaBoost 原本是为二分类问题设计的,但可以扩展到多分类问题。常用的方法包括 One-vs-All (OVA), AdaBoost.MH (Multiclass, Multi-Label) 和 AdaBoost.MR (Multiclass Ranking)。下面对每种方法进行详细介绍。

One-vs-All (OVA)

数学原理:

  1. 训练过程:

    • 对于每个类别 k k k ,训练一个二分类器 G k G_k Gk ,将该类别视为正类,其他类别视为负类。
    • 使用二分类 AdaBoost 方法训练每个 G k G_k Gk,并获得分类器的权重 α m \alpha_m αm
  2. 预测过程:

    • 对于新样本 x x x ,通过所有分类器 G k G_k Gk 进行预测,选择得分最高的分类器 G k G_k Gk 的类别作为最终预测结果:
      y ^ = arg ⁡ max ⁡ k G k ( x ) \hat{y} = \arg\max_k G_k(x) y^=argkmaxGk(x)

通俗解释:

对于每个类别,训练一个分类器来区分该类别和其他类别。最后,通过比较所有分类器的预测得分,选择得分最高的类别作为最终分类结果。

AdaBoost.MH (Multiclass, Multi-Label)

数学原理:

  1. 初始化权重:

    • 对于每个样本 i i i 和每个类别 k k k ,初始化权重 w ˉ i , k = 1 \bar{w}_{i,k} = 1 wˉi,k=1
  2. 迭代过程:

    • 对于每一轮 m m m ,针对每个类别 k k k 和每个样本 i i i,定义权重:
      w ˉ i , k = exp ⁡ [ − y i , k f m − 1 ( x i , k ) ] \bar{w}_{i,k} = \exp\left[-y_{i,k} f_{m-1}(x_i, k)\right] wˉi,k=exp[yi,kfm1(xi,k)]
    • 更新分类器 G m G_m Gm 使得加权误差最小:
      G m = arg ⁡ min ⁡ G ∑ i = 1 N ∑ k = 1 K w ˉ i , k I ( y i , k ≠ G ( x i , k ) ) G_m = \arg\min_G \sum_{i=1}^{N} \sum_{k=1}^{K} \bar{w}_{i,k} I(y_{i,k} \ne G(x_i, k)) Gm=argGmini=1Nk=1Kwˉi,kI(yi,k=G(xi,k))
    • 计算误差率 ϵ m \epsilon_m ϵm 和分类器权重 α m \alpha_m αm ,更新样本权重,归一化权重,类似二分类 AdaBoost。
  3. 最终分类器:

    • 最终分类器 F ( x ) F(x) F(x) 是所有弱分类器的加权和:
      F ( x ) = ∑ m = 1 M α m G m ( x ) F(x) = \sum_{m=1}^{M} \alpha_m G_m(x) F(x)=m=1MαmGm(x)

通俗解释:

将多分类问题视为多个二分类问题,并通过调整样本权重来增强分类效果。每个类别都有独立的权重,最终通过加权求和得到最终分类结果。

AdaBoost.MR (Multiclass Ranking)

数学原理:

  1. 初始化权重:

    • 对于每个样本 i i i 和每个类别 k k k ,初始化权重 w ˉ i , k = 1 \bar{w}_{i,k} = 1 wˉi,k=1
  2. 迭代过程:

    • 在每轮迭代中,更新分类器 G m G_m Gm 使得加权误差最小,并基于对样本排序的思想选择最佳分类器:
      G m = arg ⁡ min ⁡ G ∑ i = 1 N ∑ k = 1 K w ˉ i , k I ( y i , k ≠ G ( x i , k ) ) G_m = \arg\min_G \sum_{i=1}^{N} \sum_{k=1}^{K} \bar{w}_{i,k} I(y_{i,k} \ne G(x_i, k)) Gm=argGmini=1Nk=1Kwˉi,kI(yi,k=G(xi,k))
    • 计算误差率 ϵ m \epsilon_m ϵm 和分类器权重 α m \alpha_m αm ,更新样本权重,归一化权重,类似二分类 AdaBoost。
  3. 最终分类器:

    • 最终分类器 F ( x ) F(x) F(x) 是所有弱分类器的加权和:
      F ( x ) = ∑ m = 1 M α m G m ( x ) F(x) = \sum_{m=1}^{M} \alpha_m G_m(x) F(x)=m=1MαmGm(x)

通俗解释:

基于对样本的排序,将多个分类器的输出进行排序,选择得分最高的类别作为最终预测结果。

逻辑回归

将 AdaBoost 与逻辑回归结合,可以通过每轮迭代增加一个逻辑回归分类器来增强模型的能力。

数学原理:

  1. 初始化: 给定训练数据 ( x i , y i ) (x_i, y_i) (xi,yi),初始权重 w i = 1 N w_i = \frac{1}{N} wi=N1
  2. 迭代过程:
    • 对于每一轮 m m m ,训练逻辑回归模型 G m G_m Gm
      G m ( x ) = 1 1 + exp ⁡ ( − β m h m ( x ) ) G_m(x) = \frac{1}{1 + \exp(-\beta_m h_m(x))} Gm(x)=1+exp(βmhm(x))1
    • 更新权重:
      w ˉ i = w i exp ⁡ [ − y i G m ( x i ) ] \bar{w}_{i} = w_i \exp\left[-y_i G_m(x_i)\right] wˉi=wiexp[yiGm(xi)]
    • 归一化权重:
      w i = w ˉ i ∑ j = 1 N w ˉ j w_i = \frac{\bar{w}_i}{\sum_{j=1}^{N} \bar{w}_j} wi=j=1Nwˉjwˉi

通俗解释:

逻辑回归是一种用来预测二分类问题的模型。将逻辑回归与 AdaBoost 结合,可以通过逐步增加多个逻辑回归模型来提高整体的预测性能。在每轮迭代中,增加一个新的逻辑回归模型,并根据上一个模型的预测结果调整样本的权重,使得模型更关注那些被错误分类的样本。

2. 训练中选择不同的分类器

AdaBoost 是一种增强学习算法,通过组合多个弱分类器来提高分类性能。这里我们详细描述如何在 AdaBoost 中应用决策树桩、朴素贝叶斯和支持向量机(SVM)作为基础分类器,并解释其数学原理和实现方法。

1. 决策树桩

数学原理:

决策树桩是非常简单的决策树,通常只包含一个决策节点和两个叶节点。它是 AdaBoost 中常用的基础分类器。

步骤:

  1. 初始化权重:

    • 初始化每个样本的权重为 w i = 1 N w_i = \frac{1}{N} wi=N1,其中 N N N 是样本数。
  2. 迭代过程:

    • 对于每一轮 m m m,训练一个新的决策树桩 G m G_m Gm
      G m ( x ) = arg ⁡ min ⁡ G ∑ i = 1 N w i I ( y i ≠ G ( x i ) ) G_m(x) = \arg\min_{G} \sum_{i=1}^{N} w_i I(y_i \ne G(x_i)) Gm(x)=argGmini=1NwiI(yi=G(xi))
    • 计算误差率 ϵ m \epsilon_m ϵm
      ϵ m = ∑ i = 1 N w i I ( y i ≠ G m ( x i ) ) \epsilon_m = \sum_{i=1}^{N} w_i I(y_i \ne G_m(x_i)) ϵm=i=1NwiI(yi=Gm(xi))
    • 计算分类器的权重 α m \alpha_m αm
      α m = 1 2 ln ⁡ ( 1 − ϵ m ϵ m ) \alpha_m = \frac{1}{2} \ln\left(\frac{1 - \epsilon_m}{\epsilon_m}\right) αm=21ln(ϵm1ϵm)
    • 更新样本权重:
      w i ← w i exp ⁡ ( − α m y i G m ( x i ) ) w_i \leftarrow w_i \exp\left(-\alpha_m y_i G_m(x_i)\right) wiwiexp(αmyiGm(xi))
    • 归一化权重:
      w i ← w i ∑ j = 1 N w j w_i \leftarrow \frac{w_i}{\sum_{j=1}^{N} w_j} wij=1Nwjwi
  3. 最终分类器:

    • 最终分类器 F ( x ) F(x) F(x) 是所有弱分类器的加权和:
      F ( x ) = ∑ m = 1 M α m G m ( x ) F(x) = \sum_{m=1}^{M} \alpha_m G_m(x) F(x)=m=1MαmGm(x)

通俗解释:

在每一轮迭代中,选择一个简单的决策树桩作为弱分类器,然后根据该分类器的表现来调整样本的权重,使得分类错误的样本权重增加。在下一轮迭代中,新的分类器将更关注这些错误分类的样本。最终,将所有弱分类器的结果加权求和得到最终分类结果。

2. 朴素贝叶斯

数学原理:

朴素贝叶斯假设特征之间相互独立,使用贝叶斯定理计算类别的后验概率。

步骤:

  1. 初始化权重:

    • 初始化每个样本的权重为 w i = 1 N w_i = \frac{1}{N} wi=N1,其中 N N N 是样本数。
  2. 迭代过程:

    • 对于每一轮 m m m,训练一个新的朴素贝叶斯分类器 G m G_m Gm
      G m ( x ) = arg ⁡ max ⁡ y P ( y ∣ x ) = arg ⁡ max ⁡ y P ( x ∣ y ) P ( y ) P ( x ) G_m(x) = \arg\max_{y} P(y | x) = \arg\max_{y} \frac{P(x | y) P(y)}{P(x)} Gm(x)=argymaxP(yx)=argymaxP(x)P(xy)P(y)
    • 计算误差率 ϵ m \epsilon_m ϵm 和分类器权重 α m \alpha_m αm,更新样本权重,归一化权重,类似决策树桩。
  3. 最终分类器:

    • 最终分类器 F ( x ) F(x) F(x) 是所有弱分类器的加权和:
      F ( x ) = ∑ m = 1 M α m G m ( x ) F(x) = \sum_{m=1}^{M} \alpha_m G_m(x) F(x)=m=1MαmGm(x)

通俗解释:

朴素贝叶斯假设所有特征独立,并根据训练数据计算每个类别的概率。在每一轮迭代中,使用新的朴素贝叶斯分类器进行分类,并调整样本权重,使得错误分类的样本在下一轮中更加重要。最终将所有分类器的结果加权求和得到最终分类结果。

3. 支持向量机 (SVM)

数学原理:

SVM 通过找到一个超平面来最大化类间间隔,从而实现分类。

步骤:

  1. 初始化权重:

    • 初始化每个样本的权重为 w i = 1 N w_i = \frac{1}{N} wi=N1,其中 N N N 是样本数。
  2. 迭代过程:

    • 对于每一轮 m m m,训练一个新的 SVM 分类器 G m G_m Gm,目标是最大化类间间隔:
      min ⁡ w 1 2 ∥ w ∥ 2 subject to y i ( w ⋅ x i + b ) ≥ 1 \min_w \frac{1}{2} \|w\|^2 \quad \text{subject to} \quad y_i (w \cdot x_i + b) \ge 1 wmin21w2subject toyi(wxi+b)1
    • 使用样本权重 w i w_i wi 进行加权训练,使得 SVM 更关注权重较大的样本。
    • 计算误差率 ϵ m \epsilon_m ϵm 和分类器权重 α m \alpha_m αm,更新样本权重,归一化权重,类似决策树桩。
  3. 最终分类器:

    • 最终分类器 F ( x ) F(x) F(x) 是所有弱分类器的加权和:
      F ( x ) = ∑ m = 1 M α m G m ( x ) F(x) = \sum_{m=1}^{M} \alpha_m G_m(x) F(x)=m=1MαmGm(x)

通俗解释:

SVM 寻找一个能够最大化类间间隔的超平面来进行分类。在每一轮迭代中,使用加权的样本训练新的 SVM 分类器,使得错误分类的样本在下一轮中更加重要。最终将所有分类器的结果加权求和得到最终分类结果。

结论

在 AdaBoost 中,可以选择不同的基础分类器,如决策树桩、朴素贝叶斯和 SVM。每种分类器有其独特的训练方式和优势。通过逐轮训练新的基础分类器,并根据误分类调整样本权重,AdaBoost 能够逐步增强分类性能,最终得到一个强分类器。

好的,让我们更深入地探讨在同一个训练中使用不同分类器的过程,并结合具体实例进行详细分析。

3. 在同一个训练中使用不同的分类器

在 AdaBoost 中使用不同类型的分类器,称为 混合增强学习(Hybrid Boosting) 。这种方法在某些情况下可以提高分类性能。

应用场景和必要性

  1. 复杂数据集:

    • 对于复杂的数据集,不同的分类器可能在不同的数据子集上表现优异。混合使用不同的分类器可以综合利用各分类器的优势。
  2. 提高泛化能力:

    • 混合分类器可以减少单一分类器的偏差和方差,从而提高模型的泛化能力。
  3. 适应性:

    • 不同的分类器可能对不同的特征类型更敏感。通过混合分类器,可以更好地捕捉数据的不同特征。

数学原理和实现

以一个具体实例进行详细分析,假设我们要分类一个包含三类的复杂数据集,其中特征类型多样。

初始化权重

  1. 初始化权重:
    • 对于每个样本 i i i ,初始化权重 w i = 1 N w_i = \frac{1}{N} wi=N1 ,其中 N N N 是样本总数。

迭代过程

假设我们有三个基础分类器:决策树桩(Tree Stump),朴素贝叶斯(Naive Bayes),支持向量机(SVM)。在每轮迭代中,我们选择不同的分类器来训练模型。

  1. 第一轮:决策树桩

    • 训练决策树桩 G 1 G_1 G1 ,计算误差率 ϵ 1 \epsilon_1 ϵ1
      ϵ 1 = ∑ i = 1 N w i I ( y i ≠ G 1 ( x i ) ) \epsilon_1 = \sum_{i=1}^{N} w_i I(y_i \ne G_1(x_i)) ϵ1=i=1NwiI(yi=G1(xi))
    • 计算分类器权重 α 1 \alpha_1 α1
      α 1 = 1 2 ln ⁡ ( 1 − ϵ 1 ϵ 1 ) \alpha_1 = \frac{1}{2} \ln\left(\frac{1 - \epsilon_1}{\epsilon_1}\right) α1=21ln(ϵ11ϵ1)
    • 更新样本权重:
      w i ← w i exp ⁡ ( − α 1 y i G 1 ( x i ) ) w_i \leftarrow w_i \exp\left(-\alpha_1 y_i G_1(x_i)\right) wiwiexp(α1yiG1(xi))
    • 归一化权重:
      w i ← w i ∑ j = 1 N w j w_i \leftarrow \frac{w_i}{\sum_{j=1}^{N} w_j} wij=1Nwjwi
  2. 第二轮:朴素贝叶斯

    • 使用更新后的样本权重,训练朴素贝叶斯分类器 G 2 G_2 G2,计算误差率 ϵ 2 \epsilon_2 ϵ2
      ϵ 2 = ∑ i = 1 N w i I ( y i ≠ G 2 ( x i ) ) \epsilon_2 = \sum_{i=1}^{N} w_i I(y_i \ne G_2(x_i)) ϵ2=i=1NwiI(yi=G2(xi))
    • 计算分类器权重 α 2 \alpha_2 α2
      α 2 = 1 2 ln ⁡ ( 1 − ϵ 2 ϵ 2 ) \alpha_2 = \frac{1}{2} \ln\left(\frac{1 - \epsilon_2}{\epsilon_2}\right) α2=21ln(ϵ21ϵ2)
    • 更新样本权重:
      w i ← w i exp ⁡ ( − α 2 y i G 2 ( x i ) ) w_i \leftarrow w_i \exp\left(-\alpha_2 y_i G_2(x_i)\right) wiwiexp(α2yiG2(xi))
    • 归一化权重:
      w i ← w i ∑ j = 1 N w j w_i \leftarrow \frac{w_i}{\sum_{j=1}^{N} w_j} wij=1Nwjwi
  3. 第三轮:支持向量机

    • 使用更新后的样本权重,训练支持向量机 G 3 G_3 G3 ,计算误差率 ϵ 3 \epsilon_3 ϵ3
      ϵ 3 = ∑ i = 1 N w i I ( y i ≠ G 3 ( x i ) ) \epsilon_3 = \sum_{i=1}^{N} w_i I(y_i \ne G_3(x_i)) ϵ3=i=1NwiI(yi=G3(xi))
    • 计算分类器权重 α 3 \alpha_3 α3
      α 3 = 1 2 ln ⁡ ( 1 − ϵ 3 ϵ 3 ) \alpha_3 = \frac{1}{2} \ln\left(\frac{1 - \epsilon_3}{\epsilon_3}\right) α3=21ln(ϵ31ϵ3)
    • 更新样本权重:
      w i ← w i exp ⁡ ( − α 3 y i G 3 ( x i ) ) w_i \leftarrow w_i \exp\left(-\alpha_3 y_i G_3(x_i)\right) wiwiexp(α3yiG3(xi))
    • 归一化权重:
      w i ← w i ∑ j = 1 N w j w_i \leftarrow \frac{w_i}{\sum_{j=1}^{N} w_j} wij=1Nwjwi

最终分类器

最终分类器 F ( x ) F(x) F(x) 是所有弱分类器的加权和:

F ( x ) = ∑ m = 1 M α m G m ( x ) F(x) = \sum_{m=1}^{M} \alpha_m G_m(x) F(x)=m=1MαmGm(x)

示例分析

假设我们有一个包含 10 个样本的数据集(简化为演示),每个样本具有两个特征,目标是将这些样本分类为三类(1, 2, 3)。

初始化权重

初始化所有样本的权重 w i = 1 10 = 0.1 w_i = \frac{1}{10} = 0.1 wi=101=0.1

第一轮迭代:决策树桩

  1. 训练一个简单的决策树桩,得到分类器 G 1 G_1 G1
  2. 计算分类误差率 ϵ 1 \epsilon_1 ϵ1,假设 ϵ 1 = 0.3 \epsilon_1 = 0.3 ϵ1=0.3
  3. 计算分类器权重 α 1 \alpha_1 α1
    α 1 = 1 2 ln ⁡ ( 1 − 0.3 0.3 ) ≈ 0.4236 \alpha_1 = \frac{1}{2} \ln\left(\frac{1 - 0.3}{0.3}\right) \approx 0.4236 α1=21ln(0.310.3)0.4236
  4. 更新样本权重 w i w_i wi 并归一化。

第二轮迭代:朴素贝叶斯

  1. 使用更新后的样本权重,训练朴素贝叶斯分类器 G 2 G_2 G2
  2. 计算分类误差率 ϵ 2 \epsilon_2 ϵ2,假设 ϵ 2 = 0.25 \epsilon_2 = 0.25 ϵ2=0.25
  3. 计算分类器权重 α 2 \alpha_2 α2
    α 2 = 1 2 ln ⁡ ( 1 − 0.25 0.25 ) ≈ 0.5493 \alpha_2 = \frac{1}{2} \ln\left(\frac{1 - 0.25}{0.25}\right) \approx 0.5493 α2=21ln(0.2510.25)0.5493
  4. 更新样本权重 w i w_i wi 并归一化。

第三轮迭代:支持向量机

  1. 使用更新后的样本权重,训练支持向量机 G 3 G_3 G3
  2. 计算分类误差率 ϵ 3 \epsilon_3 ϵ3,假设 ϵ 3 = 0.2 \epsilon_3 = 0.2 ϵ3=0.2
  3. 计算分类器权重 α 3 \alpha_3 α3
    α 3 = 1 2 ln ⁡ ( 1 − 0.2 0.2 ) ≈ 0.6931 \alpha_3 = \frac{1}{2} \ln\left(\frac{1 - 0.2}{0.2}\right) \approx 0.6931 α3=21ln(0.210.2)0.6931
  4. 更新样本权重 w i w_i wi 并归一化。

最终分类器

最终分类器 F ( x ) F(x) F(x) 是所有弱分类器的加权和:

F ( x ) = 0.4236 G 1 ( x ) + 0.5493 G 2 ( x ) + 0.6931 G 3 ( x ) F(x) = 0.4236 G_1(x) + 0.5493 G_2(x) + 0.6931 G_3(x) F(x)=0.4236G1(x)+0.5493G2(x)+0.6931G3(x)

通过这种方法,我们可以综合利用不同分类器的优势,提升模型的整体性能。在每轮迭代中,选择最适合当前数据的分类器,通过加权方式得到更准确的最终分类结果。

通俗解释

在每一轮迭代中,选择一个不同的分类器来训练模型。每个分类器在其擅长的数据子集上表现良好。根据每个分类器的表现,调整样本权重,使得分类错误的样本在下一轮中更加重要。最终,将所有分类器的结果加权求和得到最终分类结果。通过混合使用不同的分类器,可以充分利用各分类器的优势,提升整体模型的性能。

结论

通过使用混合增强学习,我们可以在同一个训练中使用不同的分类器(如决策树桩、朴素贝叶斯、SVM 等),提高模型的分类性能。通过具体实例分析,我们可以看到在每一轮迭代中,选择不同的分类器并调整样本权重,从而优化最终模型。这种方法在复杂数据集和不同特征类型的情况下特别有效。

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

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

相关文章

PEPPERL+FUCHS倍加福模块R4D0-FB-IA10.1

PEPPERLFUCHS倍加福模块R4D0-FB-IA10.1 FA产品分类 1. 接近传感器类产品 - 电感式传感器 - 电容式传感器 - 磁式传感器 - 超声波传感器 - WCS位置编码系统 2. 光电传感器类产品 - 标准光电传感器 - 安全光电传感器 - 门控光电传感器 3. 编码器类产品 - 绝对值编码器 - 增量型编…

【Linux】基础IO——文件描述符,重定向

话接上篇: 1.文件描述符fd 磁盘文件 VS 内存文件? 当文件存储在磁盘当中时,我们将其称之为磁盘文件,而当磁盘文件被加载到内存当中后,我们将加载到内存当中的文件称之为内存文件。磁盘文件和内存文件之间的关系就像程…

红队内网攻防渗透:内网渗透之Linux内网权限提升技术:udf提权Capability权限LD_PRELOAD环境变量

红队内网攻防渗透 1. 内网权限提升技术1.1 Linux系统提权-Web&用户-数据库udf提权1.1.1 信息收集1.1.2 Web权限获取1.1.3 MYSQL-UDF提权1.1.4 下载到目标上1.1.5 连接确认是否有条件进行导出调用1.1.6 开始进行写入导出调用1.2 Linux系统提权-Web&用户-Capability能力1…

ThinkBook 16 2024 Ubuntu 触控板问题解决

sudo insmod goodix-gt7868q.ko sudo cp local-overrides.quirks /etc/libinput/local-overrides.quirks sudo systemctl restart gdm 有偿解决,无效退款 联系前,请写明笔记本型号和ubuntu版本

生命在于学习——Python人工智能原理(3.3)

三、深度学习 4、激活函数 激活函数的主要作用是对神经元获得的输入进行非线性变换,以此反映神经元的非线性特性。常见的激活函数有线性激活函数、符号激活函数、Sigmod激活函数、双曲正切激活函数、高斯激活函数、ReLU激活函数。 (1)线性…

【elementui源码解析】如何实现自动渲染md文档-第二篇

目录 1.概要 2.引用文件 1)components.json 2)json-template/string 3)os.EOL 3.变量定义 4.模版填充 5.MAIN_TEMPLATE填充 6.src下的index.js文件 1)install 2)export 7.总结 1.概要 今天看第二个命令no…

无理数的渊源

无理数-西方欧美数学史上的第1次危机 第一次数学危机是数学史上的一次重要事件,发生于公元前400年左右的古希腊时期。这次危机的出现冲击了一直以来在西方数学界占据主导地位的毕达哥拉斯学派,同时标志着西方世界关于无理数的研究的开始。 古希腊的毕达…

还在用nginx,这款网关更强大

OpenResty与Nginx在功能和性能上有着密切的关联,但也存在一些关键的区别。以下是OpenResty与Nginx在不同方面的具体比较: 1. **技术架构** - **OpenResty**:OpenResty基于Nginx核心,集成了LuaJIT VM,允许直接在Nginx中…

整理好了!2024年最常见 20 道并发编程面试题(五)

上一篇地址:整理好了!2024年最常见 20 道并发编程面试题(四)-CSDN博客 九、请解释什么是线程安全以及如何实现线程安全。 线程安全是一个重要的概念,特别是在多线程编程中。当多个线程访问共享数据时,如果…

videoJS 视频 + 独一无二皮肤 + mp4/m3u8

推荐和参考文章: video.js调用-腾讯云开发者社区-腾讯云> 一、总结(点击显示或隐藏总结内容)一句话总结:网上有各种细致的现成的代码可以拿来用,没必要自己死专1、video.js有两种初始化方式?一种是在v…

c++ 函数内对象的释放

void someFunction() {MyClass obj MyClass(); }void someFunction() {MyClass obj new MyClass();}void someFunction() {MyClass* obj new MyClass(); }void someFunction() {std::unique_ptr<MyClass> obj std::make_unique<MyClass>(); }在函数中用这4种…

C++并发之条件变量(std::condition_variable)

目录 1 概述2 使用实例3 接口使用3.1 wait3.2 wait_for3.3 wait_until3.4 notify_one3.5 notiry_all3.5 notify_all_at_thread_exit1 概述 条件变量是一个能够阻塞调用线程直到被通知恢复的对象。   当调用其中一个等待函数时,它使用unique_lock(通过互斥锁)来锁定线程。线程…

hadoop和hbase对应版本关系

https://hbase.apache.org/book.html#configuration

DuDuTalk语音工牌:如何帮助房企打造数字化的案场接待体验

房地产案场接待作为客户体验的第一站&#xff0c;其服务质量直接影响客户的购房决策。然而&#xff0c;传统的案场接待方式存在诸多挑战&#xff0c;如信息记录不准确、服务流程难以标准化、客户反馈收集困难等。语音工牌作为一种创新的智能设备&#xff0c;凭借其独特的功能和…

Office 2021 mac/win版:智慧升级,办公新风尚

Office 2021是微软公司推出的一款高效、智能且功能丰富的办公软件套件。它集成了Word、Excel、PowerPoint等多个经典应用程序&#xff0c;旨在为用户提供更出色的办公体验。 Office 2021 mac/win版获取 Office 2021在继承了前代版本优点的基础上&#xff0c;进行了大量的优化…

接口测试之用Fiddler对手机app进行抓包

Fiddler是一款非常流行并且实用的http抓包工具&#xff0c;它的原理是在本机开启了一个http的代理服务器&#xff0c;然后它会转发所有的http请求和响应&#xff0c;因此&#xff0c;它比一般的firebug或者是chrome自带的抓包工具要好用的多。不仅如此&#xff0c;它还可以支持…

JVC摄像机SD卡变成RAW的恢复方法

JVC小日本胜利公司&#xff0c;公司名字绕口且产品线极广&#xff0c;涉及汽车、影音、娱乐……&#xff0c;而JVC在摄像机产品方面也有涉及&#xff0c;不过市场上极为少见。下边我们来看下这个JVC摄像机MP4恢复案例。 故障存储: 32G存储卡 RAW文件系统 故障现象: 客户无…

从零开始精通Onvif之事件处理

&#x1f4a1; 如果想阅读最新的文章&#xff0c;或者有技术问题需要交流和沟通&#xff0c;可搜索并关注微信公众号“希望睿智”。 概述 Onvif的事件处理允许IPC等摄像头主动向客户端&#xff08;比如&#xff1a;NVR、VMS、平台服务等&#xff09;推送事件通知&#xff0c;比…

浅谈Web开发的三大主流框架:Angular、React和Vue.js

在现代Web开发领域&#xff0c;Angular、React和Vue.js作为三大主流前端框架&#xff0c;各自拥有独特的特点和优势&#xff0c;为开发者提供丰富的选择。让我们更深入地了解这三大框架&#xff0c;并通过一些小型样例来展示它们的特性。 Angular Angular是一个完整的前端框架…

万字长文讲解如何快速搭建一个Spring Cloud项目

文章目录 概念基本概念微服务七大组件 初始化Maven父工程整合注册中心组件整合远程调用与负载均衡组件组件整合网关组件整合配置中心组件以gateway模块为例 整合分布式事务组件操作数据库模拟创建订单和扣减库存整合Seata 整合熔断降级组件整合链路追踪组件源码地址参考来源 概…