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

news/2024/9/19 13:18:26/ 标签: 机器学习, 人工智能

文章目录

  • 经验误差与过拟合 (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]

各项含义:

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

在这里插入图片描述

结论:

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


http://www.ppmy.cn/news/1527654.html

相关文章

MySQL基础(11)- 创建管理表

目录 一、数据库的常见、删除与修改 1.如何创建数据库 2.管理数据库 3.修改数据库 4.删除数据库 5.如何创建数据表 6.修改表 --> ALTER TABLE 7.重命名表 8.删除表 9.清空表 10.DCL 中 COMMIT 和 ROLLBACK 11.对比 TRUNCATE TABLE 和 DELETE FROM 12.DDL 和…

爬虫代理API的全面解析:让数据抓取更高效

在大数据时代,网络爬虫已经成为收集和分析数据的重要工具。然而,频繁的请求会导致IP被封禁,这时候爬虫代理API就显得尤为重要。本文将详细介绍爬虫代理API的作用、优势及如何使用,帮助你更高效地进行数据抓取。 什么是爬虫代理AP…

k8s环境下的相关操作

9.12 k8s calico的部署 # lsanaconda-ks.cfg k8s-ha-install kubeadm-config.yaml new.yaml token# 切换 git 分⽀[rootk8s-master ~]# cd k8s-ha-install/[rootk8s-master k8s-ha-install]# git checkout manual-installation-v1.28.x && cd calico/分支 manual…

C# SQL 辅助工具

{/// <summary>/// sql 辅助工具/// </summary>public class SqlStructureHelps{#region 增删改查/// <summary>/// 截断/// </summary>/// <typeparam name"T"></typeparam>/// <returns></returns>public static …

vue2项目实现国际化(若依框架示例)

本文主要梳理vue2项目实现全项目格式化&#xff0c;在导航栏中切换&#xff0c;页面中所有的组件的默认语言随之切换&#xff0c;搭配vue-i18n插件 文章目录 基础准备引入插件vue-i18n 实现示例流程1. 创建国际化文件1.1 element文件夹1.2 locales文件夹1.3 index.js1.4 change…

Vue 3有哪些新特性

Composition API&#xff1a; 这是 Vue 3 中最引人注目的新特性之一。Composition API 提供了一种全新的方式来组织和重用逻辑。它允许你将组件的逻辑按功能组织成可复用的代码块&#xff08;称为“组合式函数”&#xff09;&#xff0c;而不是像 Vue 2 那样按选项&#xff08;…

【乐企-业务篇】开票前置校验服务-规则链服务接口实现(发票基础信息校验)

开票前置校验服务-规则链服务接口实现(发票基础信息校验) 代码 import liquibase.pro.packaged.L; import org.apache.commons.collections4.Collec

wpf 使用Oxyplot 库制作图表示例

方法&#xff1a; InitTable 方法&#xff1a;负责初始化图表模型&#xff0c;包括设置图表的样式、坐标轴、系列和注释。这个方法包括多个 Init 方法的调用&#xff0c;表示图表的初始化过程可以分步骤进行。 InitGoalPoint 方法&#xff1a;当前未实现&#xff0c;但预留了子…

渗透测试综合靶场 DC-2 通关详解

一、准备阶段 准备工具如Kali Linux&#xff0c;下载并设置DC-2靶场机。确保攻击机和靶机在同一网络段&#xff0c;通常设置为桥接模式或NAT模式。 1.1 靶机描述 Much like DC-1, DC-2 is another purposely built vulnerable lab for the purpose of gaining experience in …

Flutter - Win32程序是如何执行main函数

Win32程序的主体结构 int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,_In_ wchar_t *command_line, _In_ int show_command) {// Attach to console when present (e.g., flutter run) or create a// new console when running with a debugger.if …

软件编程随想

已经做了16年左右的软件开发&#xff0c;从最初的Delphi开发&#xff0c;到后来的Web开发&#xff08;.net)再到Java Web&#xff08;Spring MCV,SpringBoot&#xff09;开发&#xff0c;以后Python&#xff0c;NodeJS等开发&#xff0c;做了这么多年&#xff0c;全部是以解决单…

C++ 元编程

目录 C 元编程1. 术语2. 元函数1. 数值元函数示例&#xff1a;阶乘计算 2. 类型元函数示例&#xff1a;类型选择 3. 混合编程1. 常规的计算点积范例2. 混合元编程计算点积 4. typelist实现设计和基本操作接口&#xff08;算法&#xff09;完整代码 5. tuple 实现基础知识1. 左值…

HTML讲解(一)body部分

目录 1.什么是HTML 2.HTML基本框架 3.标题声明 4.修改标题位置 5.段落声明 6.修改段落位置 7.超链接访问 8.图像访问 9.改变网页背景及文本颜色 10.添加网页背景图 11.超链接改变颜色 12.设置网页边距 小心&#xff01;VS2022不可直接接触&#xff0c;否则&#xff…

Linux文件IO(一)-open使用详解

在 Linux 系统中要操作一个文件&#xff0c;需要先打开该文件&#xff0c;得到文件描述符&#xff0c;然后再对文件进行相应的读写操作&#xff08;或其他操作&#xff09;&#xff0c;最后在关闭该文件&#xff1b;open 函数用于打开文件&#xff0c;当然除了打开已经存在的文…

最新EmlogPro影视主题模版/简约暗黑纯净Mould主题模板/博客网站源码

源码简介&#xff1a; 最新EmlogPro影视主题模版&#xff0c;它是一个简约暗黑纯净Mould主题模板&#xff0c;也能做博客网站源码。 Mould这个主题模板啊&#xff0c;真的是设计得特别有感觉。它的布局和设计都超级流畅&#xff0c;用起来特别直观&#xff0c;简单多了。不管是…

c++206 友元类

#include<iostream> using namespace std; class A { public://声明的位置 和public private无关friend void modifyA(A* pA, int _a);//函数modifyA是A的好朋友A(int a, int b){this->a a;this->b b;}int getA(){return this->a;} private:int a;int b; };vo…

力扣题解2332

大家好&#xff0c;欢迎来到无限大的频道。 今日继续给大家带来力扣题解。 题目描述&#xff08;中等&#xff09;​&#xff1a; 坐上公交的最晚时间 给你一个下标从 0 开始长度为 n 的整数数组 buses &#xff0c;其中 buses[i] 表示第 i 辆公交车的出发时间。同时给你一…

Spring Boot-Session管理问题

Spring Boot 中的 Session 管理问题及其解决方案 1. 引言 在 Spring Boot Web 应用中&#xff0c;Session 是用来维护用户状态的重要机制。由于 HTTP 协议本质上是无状态的&#xff0c;Session 提供了一种方式来存储和共享用户的会话数据。Spring Boot 提供了多种方式来管理 …

SpringMVC后续4

文件上传下载 导入maven <dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.2</version></dependency> 配置MultipartResolver <bean id"multipartRes…

PointNet2(一)分类

发现PVN3D中使用到了pointnet2和 densfusion等网络&#xff0c;为了看懂pvn3d&#xff0c;因此得看看pointnet2&#xff0c;然而带cpp&#xff0c;cu文件的程序一时办事编译不成功&#xff0c;因此找到了一个 Pointnet_Pointnet2_pytorch-master&#xff0c;里面有pointnet和po…