当前位置: 首页 > news >正文

【机器学习导引】ch2-模型评估与选择

文章目录

  • 经验误差与过拟合 (Empirical error &overfitting)
      • 1. **均方误差(Mean Squared Error, MSE)**
      • 2. **均方根误差(Root Mean Squared Error, RMSE)**
      • 3. **平均绝对误差(Mean Absolute Error, MAE)**
      • 4. **交叉熵损失(Cross Entropy Loss)**
      • 5. **Hinge 损失**
      • 6. **Huber 损失**
      • 7. **KL 散度(Kullback-Leibler Divergence)**
      • 8. **Softmax 损失**
      • 总结:
  • 评估方法 (Evaluation method)
  • 性能度量(Performance measure)
    • 错误率与精度
      • 总结:
    • 查准率、查全率与F1
      • 混淆矩阵(Confusion Matrix):
      • 查准率(Precision, P):
      • 查全率(Recall, R):
      • F1值(F1 Score):
      • 总结:
    • 案例分析:垃圾邮件识别
    • ROC与AUC
      • ROC曲线:
      • 真正例率(True Positive Rate, TPR):
      • 假正例率(False Positive Rate, FPR):
      • AUC(Area Under ROC Curve):
      • 总结:
    • 代价敏感错误率与代价曲线
      • 背景:
      • 公式解释:
      • 代价因素:
      • 解释:
      • 实际应用:
      • 总结:
  • 偏差与方差 (Bias and Variance)
    • 泛化误差分解公式:
      • 各项含义:
      • 结论:

经验误差与过拟合 (Empirical error &overfitting)

  • 经验误差是指学习器 f f f 在训练集上表现出的误差。公式为:

    R e m p ( f ) = 1 m ∑ i = 1 m L ( f ( x i ) , y i ) R_{emp}(f) = \frac{1}{m} \sum_{i=1}^{m} L(f(x_i), y_i) Remp(f)=m1i=1mL(f(xi),yi)

    其中 L ( f ( x i ) , y i ) L(f(x_i), y_i) L(f(xi),yi)损失函数,表示模型在训练样本 ( x i , y i ) (x_i, y_i) (xi,yi) 上的误差。

  • 泛化误差是指学习器 f f f未来的未见样本上所表现出的误差。公式为:

    R ( f ) = E [ L ( f ( x ) , y ) ] = ∫ L ( f ( x ) , y ) d P ( x , y ) R(f) = \mathbb{E}[L(f(x), y)] = \int L(f(x), y) dP(x, y) R(f)=E[L(f(x),y)]=L(f(x),y)dP(x,y)

    • 这里 P ( x , y ) P(x, y) P(x,y) 是样本的真实分布 L ( f ( x ) , y ) L(f(x), y) L(f(x),y) 表示模型对新的样本 ( x , y ) (x, y) (x,y) 的误差。
    • 公式右侧的积分表达式说明了**泛化误差是模型在整个真实数据分布下的平均误差,**即模型不仅要在训练数据上表现好,还需要在未来可能遇到的未知样本上表现良好。

要点

  • 经验误差并非越小越好,因为过度减小经验误差可能导致模型过拟合(即模型在训练集上表现非常好,但在新样本上表现差)。

  • 常见的损失函数与适用范围

    1. 均方误差(Mean Squared Error, MSE)

    • 公式 M S E = 1 n ∑ i = 1 n ( y i − y i ^ ) 2 MSE = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y_i})^2 MSE=n1i=1n(yiyi^)2
    • 适用场景:主要用于回归任务,例如预测房价或气温。
    • 解释:MSE 计算的是真实值 y i y_i yi 与预测值 y i ^ \hat{y_i} yi^ 之间的平方差。这个损失函数惩罚较大的误差,因此对异常值较为敏感

    2. 均方根误差(Root Mean Squared Error, RMSE)

    • 公式 R M S E = 1 n ∑ i = 1 n ( y i − y i ^ ) 2 RMSE = \sqrt{\frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y_i})^2} RMSE=n1i=1n(yiyi^)2
    • 适用场景:同样适用于回归任务,其单位与输出变量一致,因此易于解释。
    • 解释:与 MSE 类似,但在计算后进行了平方根处理,避免了过度放大大误差的影响。

    3. 平均绝对误差(Mean Absolute Error, MAE)

    • 公式 M A E = 1 n ∑ i = 1 n ∣ y i − y i ^ ∣ MAE = \frac{1}{n} \sum_{i=1}^{n} |y_i - \hat{y_i}| MAE=n1i=1nyiyi^
    • 适用场景:用于回归任务,但相比 MSE 更加鲁棒,适用于异常值较多的场景。
    • 解释:MAE 计算的是预测值与真实值之间的绝对误差,所有误差的权重相同,因此对异常值的影响较小。

    4. 交叉熵损失(Cross Entropy Loss)

    • 公式:对于二分类问题:

      H ( p , q ) = − 1 n ∑ i = 1 n [ y i log ⁡ y i ^ + ( 1 − y i ) log ⁡ ( 1 − y i ^ ) ] H(p, q) = - \frac{1}{n} \sum_{i=1}^{n} [y_i \log \hat{y_i} + (1 - y_i) \log (1 - \hat{y_i})] H(p,q)=n1i=1n[yilogyi^+(1yi)log(1yi^)]

    • 适用场景:主要用于分类任务,例如二分类任务(如猫和狗的分类)、多分类任务(如手写数字识别)。

    • 解释:交叉熵损失衡量的是两个概率分布之间的差异,预测值 y i ^ \hat{y_i} yi^ 越接近真实值 y i y_i yi ,损失越小。

    5. Hinge 损失

    • 公式 L ( y , y ^ ) = max ⁡ ( 0 , 1 − y ⋅ y ^ ) L(y, \hat{y}) = \max(0, 1 - y \cdot \hat{y}) L(y,y^)=max(0,1yy^)
    • 适用场景:主要用于**支持向量机(SVM)**等分类模型。
    • 解释:当样本的预测结果 y ⋅ y ^ ≥ 1 y \cdot \hat{y} \geq 1 yy^1 时,损失为 0 0 0;当预测错误时,损失会增加。Hinge 损失用于区分模型的预测结果是否足够有信心。

    6. Huber 损失

    • 公式

      L δ ( a ) = { 1 2 a 2 if  ∣ a ∣ ≤ δ δ ( ∣ a ∣ − 1 2 δ ) otherwise L_{\delta}(a) = \begin{cases} \frac{1}{2}a^2 & \text{if } |a| \leq \delta \\ \delta(|a| - \frac{1}{2}\delta) & \text{otherwise} \end{cases} Lδ(a)={21a2δ(a21δ)if aδotherwise

    • 适用场景:用于回归任务,尤其在需要平衡鲁棒性异常值敏感性时。

    • 解释:Huber 损失在误差较小时表现为均方误差(MSE),在误差较大时表现为平均绝对误差(MAE),因此在处理异常值时更加稳健。

    7. KL 散度(Kullback-Leibler Divergence)

    • 公式

      D K L ( P ∣ ∣ Q ) = ∑ i P ( i ) log ⁡ P ( i ) Q ( i ) D_{KL}(P || Q) = \sum_{i} P(i) \log \frac{P(i)}{Q(i)} DKL(P∣∣Q)=iP(i)logQ(i)P(i)

    • 适用场景:用于测量两个概率分布之间的差异,常用于生成模型自监督学习

    • 解释 K L KL KL 散度度量了真实分布 P P P 与预测分布 Q Q Q 之间的信息损失,越接近越好。

    8. Softmax 损失

    • 公式: L = − 1 N ∑ i = 1 N log ⁡ e y i ^ ∑ j e y j ^ 公式: L = - \frac{1}{N} \sum_{i=1}^{N} \log \frac{e^{\hat{y_i}}}{\sum_{j} e^{\hat{y_j}}} 公式:L=N1i=1Nlogjeyj^eyi^
    • 适用场景:通常用于多分类问题的神经网络输出层,结合交叉熵损失。
    • 解释 S o f t m a x Softmax Softmax 损失将多个分类的输出归一化为概率分布,并计算与真实标签的交叉熵损失。

    总结:

    • 回归任务:常用 MSE、MAE、Huber 损失等。
    • 分类任务:常用交叉熵损失、Hinge 损失、Softmax 损失等。
    • 生成模型/概率测量:常用 KL 散度等。

    损失函数的选择取决于具体的任务类型、数据特性以及模型需求。

评估方法 (Evaluation method)

  1. 留出法 (Hold-out method)

    这是最简单的验证方法之一,将数据集分成两个或三个部分:训练集和测试集(有时还有验证集)。训练集用于训练模型,测试集用于评估模型的性能。常见的划分比例是70%用于训练,30%用于测试。这种方法简单直接,但在数据量较小时可能不够稳定。

  2. 交叉验证法 (Cross-validation)

    交叉验证是一种比留出法更可靠的验证技术。最常见的是 k折交叉验证。数据集被分成k个相同大小的部分,模型训练k次,每次使用一个不同的部分作为测试集,其余部分作为训练集。这样可以更好地减少模型性能估计的方差,提供更稳定的结果。

  3. 自助法 (Bootstrapping)

    • 自助法是一种重采样技术,数据点从数据集中随机选取,允许有放回地抽样,以创建多个新的训练集。这种方法在数据集较小时尤其有用,因为它可以通过创建许多样本来帮助估计模型性能的不确定性。自助法主要用于估计统计量的分布或不确定性。
    • 通过自助法,初始数据集 D D D 中约有 36.8 % 36.8 \% 36.8% 的样本未被采样到数据集 D D D’ 中。
  4. 调参与最终模型 (Parameter tuning and final model)

    这指的是调整模型的超参数以优化性能的过程。常用的方法包括网格搜索(Grid Search)和随机搜索(Random Search),它们用于找到最佳的参数组合。在找到最佳参数之后,最终模型会在整个训练集上进行训练,并在测试集上评估模型的性能。

性能度量(Performance measure)

错误率与精度

  1. 错误率
    • 错误率表示模型预测错误的比例。公式如下:

      E ( f ; D ) = 1 m ∑ i = 1 m I ( f ( x i ) ≠ y i ) E(f;D) = \frac{1}{m} \sum_{i=1}^{m} \mathbb{I}(f(x_i) \neq y_i) E(f;D)=m1i=1mI(f(xi)=yi)

      其中:

      • m m m 是数据集中的样本总数;
      • f ( x i ) f(x_i) f(xi) 是模型对样本 x i x_i xi 的预测结果;
      • y i y_i yi 是样本 x i x_i xi 的真实标签;
      • I ( f ( x i ) ≠ y i ) \mathbb{I}(f(x_i) \neq y_i) I(f(xi)=yi) 是一个指示函数,当 f ( x i ) ≠ y i f(x_i) \neq y_i f(xi)=yi 时取值为 1 1 1(表示预测错误),否则取值为 0 0 0
    • 错误率的意思是,模型在整个数据集上预测错误的样本占总样本数的比例。

  2. 精度
    • 精度表示模型预测正确的比例。公式如下:

      acc ( f ; D ) = 1 m ∑ i = 1 m I ( f ( x i ) = y i ) \text{acc}(f;D) = \frac{1}{m} \sum_{i=1}^{m} \mathbb{I}(f(x_i) = y_i) acc(f;D)=m1i=1mI(f(xi)=yi)

      • 精度公式与错误率类似,不同的是,这里的指示函数是 I ( f ( x i ) = y i ) \mathbb{I}(f(x_i) = y_i) I(f(xi)=yi) ,当模型预测正确时取值为 1 1 1(即 f ( x i ) = y i f(x_i) = y_i f(xi)=yi ),否则为 0 0 0

      • 因为精度和错误率是互补的关系,所以我们可以用以下公式表示精度:

        acc ( f ; D ) = 1 − E ( f ; D ) \text{acc}(f;D) = 1 - E(f;D) acc(f;D)=1E(f;D)

        即:精度等于 1 1 1 减去错误率。

总结:

  • 错误率精度 是评估模型性能的两个基本指标。错误率衡量模型的错误预测比例,而精度则衡量模型的正确预测比例。两者之间的关系是互补的,精度等于 1 1 1 减去错误率。

查准率、查全率与F1

在这里插入图片描述
在这里插入图片描述

混淆矩阵(Confusion Matrix):

表格中展示了分类结果的四种情况:

  • TP (True Positive):真正例,即模型正确预测为正类的样本。
  • FN (False Negative):假反例,即模型错误地预测为负类的正类样本。
  • FP (False Positive):假正例,即模型错误地预测为正类的负类样本。
  • TN (True Negative):真反例,即模型正确预测为负类的样本。

查准率(Precision, P):

  • 查准率衡量的是模型预测为正类的样本中,实际为正类的比例。公式为:

    P = T P T P + F P P = \frac{TP}{TP + FP} P=TP+FPTP

    解释:在所有被模型预测为正的样本中,有多少是实际正类。

查全率(Recall, R):

  • 查全率衡量的是所有实际为正类的样本中,模型正确预测为正类的比例。公式为:

    R = T P T P + F N R = \frac{TP}{TP + FN} R=TP+FNTP

    解释:在所有真实正类样本中,有多少被模型正确预测为正。

F1值(F1 Score):

  • F 1 F1 F1 值是查准率和查全率的调和平均,用来平衡查准率和查全率之间的权衡。公式为:

    F 1 = 2 × P × R P + R = 1 1 2 × ( 1 P + 1 R ) F1 = \frac{2 \times P \times R}{P + R} = \frac{1}{\frac{1}{2} \times (\frac{1}{P} +\frac{1}{R})} F1=P+R2×P×R=21×(P1+R1)1

    解释: F 1 F1 F1同时考虑了查准率和查全率,当这两者数值差距较大时, F 1 F1 F1 值能提供一个平衡的评估。

总结:

  • 查准率 衡量的是预测为正类的准确性。
  • 查全率 衡量的是对所有正类样本的覆盖程度。
  • F1值 提供了查准率和查全率的平衡评价,是在查准率和查全率有冲突时的常用指标。

案例分析:垃圾邮件识别

在这里插入图片描述

ROC与AUC

ROC曲线:

在这里插入图片描述

  • ROC曲线 是一个常用的评估分类模型性能的工具,特别是在二分类问题中。ROC曲线通过不同的分类阈值绘制出真正例率( T P R TPR TPR假正例率( F P R FPR FPR 的关系,帮助分析模型在不同阈值下的表现。

真正例率(True Positive Rate, TPR):

  • 真正例率也称为召回率(Recall),表示在所有真实的正类样本中,模型正确预测为正类的比例。公式如下:

    T P R = T P T P + F N TPR = \frac{TP}{TP + FN} TPR=TP+FNTP

    其中:

    • T P TP TP 是真正例(模型正确预测为正的样本数);
    • F N FN FN 是假反例(实际为正,但被模型预测为负的样本数)。

假正例率(False Positive Rate, FPR):

  • 假正例率表示在所有真实的负类样本中,模型错误预测为正类的比例。公式如下:

    F P R = F P F P + T N FPR = \frac{FP}{FP + TN} FPR=FP+TNFP

    其中:

    • F P FP FP 是假正例(实际为负,但被模型预测为正的样本数);
    • T N TN TN 是真反例(模型正确预测为负的样本数)。

AUC(Area Under ROC Curve):

在这里插入图片描述

  • A U C AUC AUC R O C ROC ROC曲线下面积,表示模型在不同阈值下的总体表现 A U C AUC AUC 值的范围是 0 0 0 1 1 1 A U C AUC AUC 越接近 1 1 1,说明模型的分类性能越好。
    • A U C AUC AUC 1 1 1:表示模型有完美的分类能力
    • A U C AUC AUC 0.5 0.5 0.5:表示模型的分类能力与随机猜测相当

总结:

  • ROC曲线 通过观察模型在不同阈值下真正例率假正例率的变化,评估模型的区分能力。
  • AUC 是ROC曲线下的面积,用来量化模型的整体表现,越接近 1 1 1代表模型性能越好。

代价敏感错误率与代价曲线

背景:

例如,错误地将小区居民识别为陌生人,和将陌生人错误识别为小区居民,这两种错误在实际应用中会有不同的代价。因此,在分类模型的评估中,我们需要考虑不同类型错误的代价,而不仅仅是简单的错误率。

公式解释:

E ( f ; D ; c o s t ) = 1 m ( ∑ x i ∈ D + I ( f ( x i ) ≠ y i ) × c o s t 01 + ∑ x i ∈ D − I ( f ( x i ) ≠ y i ) × c o s t 10 ) E(f; D; cost) = \frac{1}{m} \left( \sum_{x_i \in D^+} \mathbb{I}(f(x_i) \neq y_i) \times cost_{01} + \sum_{x_i \in D^-} \mathbb{I}(f(x_i) \neq y_i) \times cost_{10} \right) E(f;D;cost)=m1(xiD+I(f(xi)=yi)×cost01+xiDI(f(xi)=yi)×cost10)

  • E ( f ; D ; c o s t ) E(f; D; cost) E(f;D;cost) :表示考虑错误代价后的总体错误率
  • m m m:数据集中样本的总数。
  • I ( f ( x i ) ≠ y i ) \mathbb{I}(f(x_i) \neq y_i) I(f(xi)=yi):一个指示函数,当模型 f ( x i ) f(x_i) f(xi) 预测错误(即 f ( x i ) ≠ y i f(x_i) \neq y_i f(xi)=yi )时,值为 1 1 1,否则为 0 0 0

代价因素:

  • D + D^+ D+ :样例集中正类的子集,也就是标签为 0 0 0(正类)的样本。
  • D − D^- D :样例集中负类的子集,也就是标签为 1 1 1(负类)的样本。
  • c o s t 01 cost_{01} cost01:将正类样本错误预测为负类样本的代价。例如,在实际中,将一个正常用户误判为危险用户可能产生较小的代价。
  • c o s t 10 cost_{10} cost10 :将负类样本错误预测为正类样本的代价。例如,将一个危险用户误判为正常用户,可能会带来很大的风险。

解释:

  • 该公式考虑了不同错误类型的代价。通过为不同的错误(假正例和假反例)分配不同的代价权重,模型可以更合理地应对代价不对称的情况。
  • 如果某种错误比另一种错误代价更高,公式会通过加权方式增加该类错误的惩罚,使模型更注重减少此类错误。

实际应用:

在一些场景中,错误的代价可能不均衡,比如在疾病诊断中,误诊为病人的代价(假正例)和漏诊的代价(假反例)是不一样的。漏诊可能导致更严重的后果,因此我们通常希望减少假反例(更高的代价)。

总结:

此公式提供了一种引入代价的错误率计算方式,通过权衡不同错误的代价,帮助设计出更符合实际应用需求的分类模型。

偏差与方差 (Bias and Variance)

泛化误差分解公式:

泛化误差 E ( f ; D ) E(f; D) E(f;D) 表示模型在新数据上的期望误差,它可以通过偏差(bias)方差(variance)不可避免的噪声项进行分解:

E ( f ; D ) = bias 2 ( x ) + var ( x ) + ϵ 2 E(f; D) = \text{bias}^2(x) + \text{var}(x) + \epsilon^2 E(f;D)=bias2(x)+var(x)+ϵ2

  • 偏差 bias 2 ( x ) \text{bias}^2(x) bias2(x) :衡量模型的预测值 f ˉ ( x ) \bar{f}(x) fˉ(x) 与真实输出 y y y 的差异,即模型的系统误差。偏差反映了模型在捕捉数据特征时的偏离程度。公式如下:

    bias 2 ( x ) = ( f ˉ ( x ) − y ) 2 \text{bias}^2(x) = \left( \bar{f}(x) - y \right)^2 bias2(x)=(fˉ(x)y)2

    偏差高通常意味着模型过于简单,无法很好地拟合数据(即欠拟合)。

  • 方差 var ( x ) \text{var}(x) var(x):衡量模型在不同训练集上的预测结果之间的波动性,反映了模型对训练数据的敏感程度。公式如下:

    var ( x ) = E D [ ( f ( x ; D ) − f ˉ ( x ) ) 2 ] \text{var}(x) = \mathbb{E}_D \left[ (f(x; D) - \bar{f}(x))^2 \right] var(x)=ED[(f(x;D)fˉ(x))2]

    方差高通常意味着模型过度依赖训练数据,容易过拟合(即过拟合)。

  • 噪声项 ϵ 2 \epsilon^2 ϵ2 :这是不可避免的误差,它来自数据本身的固有噪声,表示即使模型完美拟合数据,也无法消除的误差。公式如下:

    ϵ 2 = E D [ ( y D − y ) 2 ] \epsilon^2 = \mathbb{E}_D \left[ (y_D - y)^2 \right] ϵ2=ED[(yDy)2]

各项含义:

  • 偏差期望输出和真实输出的差别,代表了模型的学习能力。当模型过于简单时,偏差较大,容易出现欠拟合。
  • 方差:同样大小的训练集变动引起的模型预测变动,代表了模型对数据的敏感程度。当模型过于复杂时,方差较大,容易出现过拟合。
  • 噪声:数据本身所带来的无法消除的误差,这部分无法通过改进模型来减少。

在这里插入图片描述

结论:

泛化性能由学习算法的能力数据的充分性以及任务本身的难度共同决定。偏差和方差的权衡是机器学习中的一个核心问题,模型需要在复杂度和对数据的敏感性之间找到一个平衡点,既避免欠拟合(偏差过高),也避免过拟合(方差过高)。

相关文章:

【机器学习导引】ch2-模型评估与选择

文章目录 经验误差与过拟合 (Empirical error &overfitting)1. **均方误差(Mean Squared Error, MSE)**2. **均方根误差(Root Mean Squared Error, RMSE)**3. **平均绝对误差(Mean Absolute…...

二开ihoneyBakFileScan备份扫描

优点:可以扫描根据域名生成的扫描备份的扫描工具 二开部分:默认网址到字典(容易被封),二开字典到网址(类似test404备份扫描规则),同时把被封不能扫描的网址保存到waf_url.txt 中&am…...

leetcode21. 合并两个有序链表

思路: 用一个新链表来表示合并后的有序链表, 每次比较两个链表,将较小的那个结点存储至新链表中 # Definition for singly-linked list. # class ListNode(object): # def __init__(self, val0, nextNone): # self.val val # …...

搭建 WordPress 及常见问题与解决办法

浪浪云活动链接 :https://langlangy.cn/?i8afa52 文章目录 环境准备安装 LAMP 堆栈 (Linux, Apache, MySQL, PHP)配置 MySQL 数据库 安装 WordPress配置 WordPress常见问题及解决办法数据库连接错误白屏问题插件或主题冲突内存限制错误 本文旨在介绍如何在服务器上…...

《ORANGE‘s 一个操作系统的实现》--保护模式进阶

保护模式进阶 大内存读写 GDT段 ;GDT [SECTION .gdt] ; 段基址, 段界限 , 属性 LABEL_GDT: Descriptor 0, 0, 0 ; 空描述符 LABEL_DESC_NORMAL: Descriptor 0, 0ffffh, DA_DRW ; Normal 描…...

【可变参模板】可变参类模板

可变参类模板也和可变参函数模板一样,允许模板定义含有0到多个(任意个)模板参数。可变参类模板参数包的展开方式有多种,以下介绍几种常见的方法。 一、递归继承展开 1.1类型模板参数包的展开 首先先看下面的代码: /…...

Linux 递归删除大量的文件

一般情况下 在 Ubuntu 中,递归删除大量文件和文件夹可以通过以下几种方式快速完成。常用的方法是使用 rm 命令,配合一些适当的选项来提高删除速度和效率。 1. 使用 rm 命令递归删除 最常见的方式是使用 rm 命令的递归选项 -r 来删除目录及其所有内容。…...

设计一个算法,找出由str1和str2所指向两个链表共同后缀的起始位置

假定采用带头结点的单链表保存单词,当两个单词有相同的后缀时,则可共享相同的后缀存储空间,例如,’loading’和’being’的存储映像如下图所示。 设str1和str2分别指向两个单词所在单链表的头结点,链表结点结构为 data…...

Python中如何判断一个变量是否为None

在Python中,判断一个变量是否为None是一个常见的需求,特别是在处理可选值、默认值或者是在函数返回结果可能不存在时。虽然这个操作本身相对简单,但围绕它的讨论可以扩展到Python的哲学、类型系统、以及如何在不同场景下优雅地处理None值。 …...

表观遗传系列1:DNA 甲基化以及组蛋白修饰

1. 表观遗传 表观遗传信息很多为化学修饰,包括 DNA 甲基化以及组蛋白修饰,即DNA或蛋白可以通过化学修饰添加附加信息。 DNA位于染色质(可视为微环境)中,并不是裸露的,因此DNA分子研究需要跟所处环境结合起…...

Android 跳转至各大应用商店应用详情页

测试通过机型品牌: 华为、小米、红米、OPPO、一加、Realme、VIVO、IQOO、荣耀、魅族、三星 import android.content.ActivityNotFoundException; import android.content.Context; import android.content.Intent; import android.content.pm.PackageInfo; import …...

Pywinauto鼠标操作指南

Pywinauto是一个强大的Python库,用于自动化Windows桌面应用程序的测试。它提供了一系列工具和API来模拟用户输入,包括键盘、鼠标事件,以及与各种窗口控件交互的能力。本文将详细介绍如何使用Pywinauto来执行鼠标操作,并通过一些示…...

VRAY云渲染动画怎么都是图片?

动画实际上是由一系列连续的静态图像(帧)组成的,当这些帧快速连续播放时,就形成了动画效果。每一帧都是一个单独的图片,需要单独渲染。 云渲染农场的工作方式: 1、用户将3D场景文件和动画设置上传到云渲染…...

共享内存(C语言)

目录 一、引言 二、共享内存概述 1.什么是共享内存 2.共享内存的优势 三、共享内存的实现 1.创建共享内存 2.关联共享内存 3.访问共享内存 4.解除共享内存关联 5.删除共享内存 四、共享内存应用实例 五、总结 本文将深入探讨C语言中的共享内存技术,介绍其原理、…...

《JavaEE进阶》----16.<Mybatis简介、操作步骤、相关配置>

本篇博客讲记录: 1.回顾MySQL的JDBC操作 2..Mybatis简介、Mybatis操作数据库的步骤 3.Mybatis 相关日志的配置(日志的配置、驼峰自动转换的配置) 前言 之前学习应用分层时我们知道Web应用程序一般分为三层,Controller、Service、D…...

HuggingFists算子能力扩展-PythonScript

HuggingFists作为一个低代码平台,很多朋友会关心如何扩展平台算子能力。扩展平台尚不支持的算子功能。本文就介绍一种通过脚本算子扩展算子能力的解决方案。 HuggingFists支持Python和Javascript两种脚语言的算子。两种语言的使用方式相同,使用者可以任选…...

WInform记录的添加和显示

1、程序 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;namespace ComboBoxApp {public part…...

★ C++基础篇 ★ string类的实现

Ciallo&#xff5e;(∠・ω< )⌒☆ ~ 今天&#xff0c;我将继续和大家一起学习C基础篇第五章下篇----string类的模拟实现 ~ 上篇&#xff1a;★ C基础篇 ★ string类-CSDN博客 C基础篇专栏&#xff1a;★ C基础篇 ★_椎名澄嵐的博客-CSDN博客 目录 一 基础结构 二 迭代器 …...

rman compress

级别 初始 备完 耗时 low 1804 3572 0:10 High 1812 3176 2:00 MEDIUM 1820 3288 0:13 BASIC 1828 3444 0:56 ---不如MEDIUM&#xff0c;时间还长 NO COMPRESS 1820 5924 0:5 R…...

创建一个Oracle版本的JDK的Docker镜像

背景说明 OpenJDK 和Oracle JDK 一般情况下我们选择OpenJDK&#xff0c;两者针对大部分场景都可以满足&#xff0c;有些地方例如反射技术获得某些包路径下的类对象等&#xff0c;有时候选择OpenJDK会导致空指针异常。 两者在底层实现方面有部分区别。 创建镜像 这里是Linux…...

Harmony OS DevEco Studio 如何导入第三方库(以lottie为例)?-- HarmonyOS自学2

在做鸿蒙开发时&#xff0c;离不开第三方库的引入 一.有哪些支持的Harmony OS的 第三方库&#xff1f; 第三方库下载地址&#xff1a; 1 tpc_resource: 三方组件资源汇总 2 OpenHarmony三方库中心仓 二. 如何加入到DevEco Studio工程 以 lottie为例 OpenHarmony-TPC/lot…...

JAVA数据导出为Excel

目录 一、导入依赖 二、使用的相关类 1、XSSFWorkbook 构造方法 创建表 操作表 保存表 样式和格式 日期处理 密码保护 其他 2、XSSFSheet 获取属性和信息 行操作 列操作 表的属性 合并单元格 保护表 页眉和页脚 注释 其它 3、XSSFRow 获取属性和信息 单…...

【数据结构与算法 | 灵神题单 | 快慢指针(链表)篇】力扣876, 2095, 234

1. 力扣876&#xff1a;链表的中间节点 1.1 题目&#xff1a; 给你单链表的头结点 head &#xff0c;请你找出并返回链表的中间结点。 如果有两个中间结点&#xff0c;则返回第二个中间结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[3,4,…...

第十五届蓝桥杯图形化省赛题目及解析

第十五届蓝桥杯图形化省赛题目及解析 一. 单选题 1. 运行以下程序&#xff0c;角色会说( )? A、29 B、31 C、33 D、35 正确答案&#xff1a;C 答案解析&#xff1a; 重复执行直到m>n不成立&#xff0c;即重复执行直到m<n。所有当m小于或者 等于n时&…...

linux下NTP服务器实战(chrony软件)

linux下NTP服务器实战(chrony软件) 记录linux下NTP服务器搭建及相关管理操作&#xff0c;使用chrony软件包安装部署。相比ntp服务&#xff0c;Chrony服务适用于更高精度、更高稳定性、自动化等场景。 1. 安装 chrony 在大多数Linux发行版上&#xff0c;chrony可以通过包管理…...

Java设计模式之命令模式介绍和案例示范

一、命令模式简介 命令模式&#xff08;Command Pattern&#xff09;是一种行为型设计模式&#xff0c;它将请求封装为一个对象&#xff0c;从而使你可以用不同的请求对客户端进行参数化、对请求排队或记录日志&#xff0c;以及支持可撤销的操作。命令模式的核心思想是将发出请…...

Leetcode面试经典150题-74.搜索二维矩阵

解法都在代码里&#xff0c;不懂就留言或者私信 二分查找&#xff0c;比较简单 class Solution {/**解题思路&#xff1a;每一行有序、每一列也有序&#xff0c;只是整体不是严格有序的&#xff0c;那我们需要找一个点&#xff0c;只能往两个方向走&#xff0c;往一个方向走是…...

【数字集成电路与系统设计】基本的组合逻辑电路

目录 一、简单例子引入 1.1 端口声明 1.1.2 Verilog实现 1.1.3 Chisel实现 逐行解释 1.2 内部逻辑实现 1.2.1 Verilog实现 1.2.2 Chisel实现 Chisel 关键点解释 1.3 常用的硬件原语 二、Chisel主要数据类型介绍 2.1 数据类型 2.2 数据宽度 2.3 数据转换 2.4 运算…...

11. 建立你的第一个Web3项目

11. 建立你的第一个Web3项目 在这一部分&#xff0c;我们将带你一步步地建立一个简单的Web3项目&#xff0c;从环境搭建到智能合约的创建与部署&#xff0c;再到开发一个去中心化应用&#xff08;dApp&#xff09;并与智能合约交互。这是你迈向Web3开发的第一步。 1. 环境搭建…...

衡石分析平台使用手册-容器部署

容器部署​ 本文介绍如何在容器上部署 HENGSHI SENSE&#xff0c;以及部署后如何进行版本升级和数据备份。 部署前准备工作​ 单机部署前&#xff0c;请完成如下准备工作。 1.检查 docker 的环境。需要满足 Docker 版本 > 17.09安装 docker-compose。 2.获取并导入离线…...