西瓜书读书笔记整理(三)—— 第二章 模型评估与选择

news2024/9/22 9:49:14

第二章 模型评估与选择

  • 第 2 章 模型评估与选择
    • 2.1 经验误差与过拟合
      • 1. 错误率 / 精度 / 误差
      • 2. 训练误差 / 经验误差 / 泛化误差
      • 3. 过拟合 / 欠拟合
      • 4. 学习能力
      • 5. 模型选择
    • 2.2 评估方法
      • 1. 评估方法概述
      • 2. 留出法
      • 3. 交叉验证法
      • 4. 自助法
      • 5. 调参 / 最终模型
    • 2.3 性能度量
      • 1. 回归任务的性能度量
      • 2. 分类任务性能度量方法 —— 错误率 / 精度
      • 3. 分类任务性能度量方法 —— 查准率 / 查全率 / F1
      • 4. ROC 曲线
      • 5. AUC 曲线
    • 2.4 比较检验
      • 1. 什么是比较验证
      • 2. 假设验证
    • 2.5 偏差与方差
      • 1. 偏差与方差
      • 2. 泛化误差 / 偏差 / 方差 / 噪声

第 2 章 模型评估与选择

2.1 经验误差与过拟合

1. 错误率 / 精度 / 误差

错误率(error rate):分类错误的样本数占样本总数的比例。

精度(accuracy):分类正确的样本数占样本总数的比例。

误差(error):学习器的实际预测输出与样本的真实输出质检的差异。

2. 训练误差 / 经验误差 / 泛化误差

**训练误差(training error)**或 经验误差(empirical error):学习器在训练集上的误差。

泛化误差(generalization error):模型在新样本上的误差。

3. 过拟合 / 欠拟合

过拟合(overfitting) 指的是机器学习模型在训练数据集上表现非常好,但在新的测试数据上表现较差的情况。过拟合的主要原因是模型过于复杂,拟合了训练数据集中的噪声和细节,导致泛化能力差。简单来说,过拟合是指模型过分追求“记忆”训练数据集,而忽略了“理解”数据背后的规律,导致在新的数据上表现不佳。

过拟合可以通过以下方法来避免:

  • 增加更多的训练数据,使得模型更具泛化能力。
  • 减少特征数量,避免过于复杂的模型。
  • 增加正则化项,如L1、L2正则化等,使得模型更加平滑。
  • 使用dropout等技巧随机削弱一部分神经元的输出,减少模型的复杂性。

欠拟合(underfitting) 指的是机器学习模型在训练数据集上和测试数据集上的表现都比较差,这意味着模型没有很好地捕捉到数据的规律和模式。欠拟合的主要原因是模型过于简单,无法拟合数据集的复杂度和非线性关系。简单来说,欠拟合是指模型过于简单,无法捕捉到数据集的全部信息。

欠拟合可以通过以下方法来避免:

  • 增加更多的特征,以更好地捕捉数据的复杂性和非线性关系。
  • 增加模型的复杂度,如增加层数或节点数等。
  • 减少正则化项的强度,使得模型更加灵活。
  • 使用更复杂的算法或模型,如神经网络等。

需要注意的是,过度拟合和欠拟合都会导致模型的泛化能力下降,因此需要在两者之间进行权衡,选择最适合的模型和算法。

4. 学习能力

机器学习中模型的学习能力指的是模型通过训练数据学习到数据之间的关系和规律的能力。具体来说,模型的学习能力可以体现在以下方面:

  • 模型的表示能力:模型的表示能力越强,它能够拟合的函数空间就越大,因此可以更好地逼近数据的真实分布。

  • 模型的泛化能力:泛化能力指的是模型对于新数据的预测能力。当模型的泛化能力很强时,它可以对未见过的数据做出准确的预测。反之,如果模型的泛化能力很差,则无法对新数据进行准确的预测。

  • 模型的训练能力:模型的训练能力指的是它能够从训练数据中学习到什么程度。当模型的训练能力很强时,它可以从少量的训练数据中学习到更多的信息,从而更好地逼近数据的真实分布。

  • 模型的收敛速度:模型的收敛速度指的是它学习到数据分布的速度。当模型的收敛速度很快时,它可以在较短的时间内学习到数据之间的关系和规律。

在机器学习中,选择一个具有良好学习能力的模型是非常重要的。不同的机器学习算法和模型具有不同的学习能力,因此需要根据具体的问题和数据选择最适合的算法和模型。

学习能力是否 “过于强大”,是由学习算法和数据内涵共同决定的。

5. 模型选择

在机器学习中,选择合适的模型对于建立一个成功的机器学习系统来说非常重要。以下是一些常见的模型选择方法:

  • 经验法则:根据问题的性质和数据的特点选择合适的模型。例如,如果数据具有线性关系,可以选择线性回归模型;如果数据具有非线性关系,可以选择支持向量机或神经网络等非线性模型。

  • 交叉验证:使用交叉验证方法评估不同模型的性能,并选择最佳模型。交叉验证将数据集分为训练集和测试集,然后多次训练和测试模型,并计算平均测试误差。通过比较不同模型的测试误差,可以选择性能最佳的模型。

  • 正则化方法:使用正则化方法对不同的模型进行比较,选择最佳的模型。正则化方法通过对模型参数进行约束来避免过拟合,同时减少模型的复杂度,从而提高模型的泛化能力。

  • 模型融合方法:使用多个模型组合来提高预测性能。模型融合方法可以是简单的平均或加权平均,也可以是基于模型的集成方法,例如随机森林和Boosting等。

  • 模型选择工具:使用一些开源的模型选择工具,例如scikit-learn和TensorFlow等,这些工具提供了多种不同的机器学习算法和模型,同时提供了评估和比较不同模型的方法。

需要注意的是,在选择模型时需要考虑多个因素,例如数据的特点、问题的性质、模型的复杂度、模型的训练时间等等。选择合适的模型需要综合考虑这些因素,并根据具体的问题和需求来进行选择。

2.2 评估方法

1. 评估方法概述

通常,我们可通过实验测试来对学习器的泛化误差进行评估并进而做出选择。为此,需使用一个 “测试集(testomg set)” 来测试学习器对新样本的判别能力,然后以测试集上的 “测试误差(tesing error)” 作为泛化误差的近似。通常我们假设测试样本也是从样本真实分布中独立同分布采样而得。但需要注意的是,测试集应该尽可能与训练集互斥,即测试集尽量不在训练集中出现、未在训练过程中使用过。

2. 留出法

留出法(hold-out)直接将数据集 D D D 划分为两个互斥的集合,其中一个集合作为训练集 S S S,另外一个作为测试集 T T T,即 D = S ⋃ T D=S \bigcup T D=ST S ⋂ T = ⊘ S \bigcap T = \oslash ST=。在 S S S 上训练出模型后,用 T T T 来评估其测试误差,作为对泛化误差的估计。

3. 交叉验证法

交叉验证法(cross valida tion)先将数据集 D D D 划分为 k k k 个大小相似的互斥子集,即 D = D 1 ∪ D 2 ∪ . . . ∪ k D=D_1 \cup D_2 \cup ...\cup_k D=D1D2...k D i ⋂ D j = ⊘ D_i \bigcap D_j =\oslash DiDj=。每个子集 D i D_i Di 都尽可能保持数据分布的一致性,即从 D D D 中通过分层采样得到。然后,每次用 k − 1 k-1 k1 个子集的并集作为训练集,余下的那个子集作为测试集;这样就可获得 k k k 组训练 / 测试集,从而可进行 k k k 次训练和测试,最终返回的是这 k k k 个测试结果的均值。

显然,交叉验证法评估结果的稳定性和保真性在很大程度上取决于 k k k 的取值,为强调这一点,通常把交叉验证法称为 “ k k k 折交叉验证” ( k k k-fold cross validation)。

k k k 最常用的取值是 10,此时称为 10 折交叉验证;其他常用的 k k k 值有 5、20 等。

4. 自助法

自助法(bootstrapping)是一种非参数统计方法,用于从有限的样本数据集中估计统计量的分布和置信区间。自助法是通过从原始数据集中随机抽取样本形成新的数据集,并重复这个过程多次来得到估计统计量的分布。这个过程可以产生多个样本数据集,每个数据集的样本数和原始数据集相同,但可能包含重复的样本数据。

自助法的基本思想是通过对原始数据进行有放回的抽样来模拟从总体中抽样。由于样本的重复采样,部分样本可能在某次采样中被重复选择,而另一些样本可能在某些采样中没有被选择。这样可以形成一个更广泛的样本空间,并且可以通过这些不同的样本数据集来估计统计量的置信区间。

自助法可以用于解决小样本数据集的统计问题,并且具有一定的鲁棒性和准确性。例如,在机器学习中,自助法可以用于估计模型参数的置信区间,从而评估模型的稳定性和准确性。自助法还可以用于特征选择、模型选择和模型融合等问题,它是一种常用的非参数统计方法。

5. 调参 / 最终模型

大多数学习算法都有些参数 (parameter) 需要设定,参数配置不同 ,学得模型的性能往往有显著差别,因此,在进行模型评估与选择时,除了要对适用学习算法进行选择,还需对算法参数进行设定,这就是通常所说的 “参数调节” 或简称 “调参” (parameter tuning)。

2.3 性能度量

1. 回归任务的性能度量

回归任务最常用的性能度量是 “均方误差”(mean squared error)。

E ( f ; D ) = 1 m ∑ i = 1 m ( f ( x i ) − y i ) 2 (2.2) E(f ; D)=\frac{1}{m} \sum_{i=1}^m\left(f\left(\boldsymbol{x}_i\right)-y_i\right)^2 \tag{2.2} E(f;D)=m1i=1m(f(xi)yi)2(2.2)

更一般的,对于数据分布 D \mathcal{D} D 和概率密度函数 p ( ⋅ ) p(\cdot) p(),均方误差可描述为

E ( f ; D ) = ∫ x ∼ D ( f ( x ) − y ) 2 p ( x ) d x (2.3) E(f ; \mathcal{D})=\int_{\boldsymbol{x} \sim \mathcal{D}}(f(\boldsymbol{x})-y)^2 p(\boldsymbol{x}) \mathrm{d} \boldsymbol{x} \tag{2.3} E(f;D)=xD(f(x)y)2p(x)dx(2.3)

2. 分类任务性能度量方法 —— 错误率 / 精度

错误率是分类错误的样本数占样本总数的比例,精度则是分类正确的样本数占样本总数的比例。对样本集 D \mathcal{D} D,分类错误率定义为

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

精度则定义为

acc ⁡ ( f ; D ) = 1 m ∑ i = 1 m I ( f ( x i ) = y i ) = 1 − E ( f ; D ) . (2.5) \begin{aligned} \operatorname{acc}(f ; D) & =\frac{1}{m} \sum_{i=1}^m \mathbb{I}\left(f\left(\boldsymbol{x}_i\right)=y_i\right) \\ & =1-E(f ; D) . \end{aligned} \tag{2.5} acc(f;D)=m1i=1mI(f(xi)=yi)=1E(f;D).(2.5)

更一般的,对于数据分布 D \mathcal{D} D 和概率密度函数 p ( ⋅ ) p(\cdot) p(),错误率与精度可分别描述为

E ( f ; D ) = ∫ x ∼ D I ( f ( x ) ≠ y ) p ( x ) d x (2.6) E(f ; \mathcal{D})=\int_{\boldsymbol{x} \sim \mathcal{D}} \mathbb{I}(f(\boldsymbol{x}) \neq y) p(\boldsymbol{x}) \mathrm{d} \boldsymbol{x} \tag{2.6} E(f;D)=xDI(f(x)=y)p(x)dx(2.6)

acc ⁡ ( f ; D ) = ∫ x ∼ D I ( f ( x ) = y ) p ( x ) d x = 1 − E ( f ; D ) (2.7) \begin{aligned} \operatorname{acc}(f ; \mathcal{D}) & =\int_{\boldsymbol{x} \sim \mathcal{D}} \mathbb{I}(f(\boldsymbol{x})=y) p(\boldsymbol{x}) \mathrm{d} \boldsymbol{x} \\ & =1-E(f ; \mathcal{D}) \tag{2.7} \end{aligned} acc(f;D)=xDI(f(x)=y)p(x)dx=1E(f;D)(2.7)

3. 分类任务性能度量方法 —— 查准率 / 查全率 / F1

对于二分类问题,如下所示:

全称真实值(标签,label)预测值(predict)
TPTrue Positive11
FPFalse Positive01
TNTrue Negative00
FNFalse Negative10

查准率(precision)

P = T P T P + F P (2.8) P=\frac{T P}{T P+F P} \tag{2.8} P=TP+FPTP(2.8)

查全率(recall)

R = T P T P + F N (2.9) R=\frac{T P}{T P+F N} \tag{2.9} R=TP+FNTP(2.9)

更常用的是 F 1 F1 F1 度量:

F 1 = 2 × P × R P + R = 2 × T P  样例总数  + T P − T N .  (2.10) F 1=\frac{2 \times P \times R}{P+R}=\frac{2 \times T P}{\text { 样例总数 }+T P-T N} \text {. } \tag{2.10} F1=P+R2×P×R= 样例总数 +TPTN2×TP(2.10)

4. ROC 曲线

ROC(Receiver Operating Characteristic)曲线是一种用于评估二元分类器性能的图形工具。ROC曲线以真阳性率(True Positive Rate,TPR)为纵坐标,以假阳性率(False Positive Rate,FPR)为横坐标,用于衡量分类器的敏感性和特异性。

T P R = T P T P + F N (2.18) \mathrm{TPR}=\frac{T P}{T P+F N} \tag{2.18} TPR=TP+FNTP(2.18)

F P R = F P T N + F P (2.19) \mathrm{FPR}=\frac{F P}{T N+F P} \tag{2.19} FPR=TN+FPFP(2.19)

在ROC曲线中,每个点代表分类器在不同的阈值下的TPR和FPR。通过改变分类器的阈值,可以得到不同的点,并将这些点连接起来得到ROC曲线。曲线下面积(Area Under Curve,AUC)可以用来衡量分类器的性能,AUC的取值范围为0.5到1,AUC越大表示分类器的性能越好。

ROC曲线的优点在于不受分类器阈值的影响,同时可以通过比较不同分类器的ROC曲线来评估它们的性能。ROC曲线也适用于不平衡数据集的分类问题,其中一类样本数量较少,例如医学诊断和欺诈检测等应用场景。

需要注意的是,ROC曲线不能直接用于比较多类别分类器的性能。对于多类别分类问题,可以使用一些衍生自ROC曲线的评估指标,例如微平均(micro-averaging)和宏平均(macro-averaging)等。

下面是一个示例ROC曲线:

在这里插入图片描述

在这个例子中,横轴是假阳性率(False Positive Rate,FPR),纵轴是真阳性率(True Positive Rate,TPR)。假阳性率是指实际为负样本但被错误地预测为正样本的样本占所有负样本的比例,真阳性率是指实际为正样本且被正确地预测为正样本的样本占所有正样本的比例。

ROC曲线显示了分类器在不同阈值下的性能,阈值从左上角到右下角逐渐增加。曲线下面积(Area Under Curve,AUC)为0.91,说明该分类器的性能很好。通常,AUC的取值范围为0.5到1,AUC越大表示分类器的性能越好。

在实际应用中,可以根据ROC曲线选择合适的分类器和阈值,以达到最佳的分类性能。

5. AUC 曲线

AUC(Area Under Curve)曲线是ROC(Receiver Operating Characteristic)曲线下方的面积,用于评估二元分类器的性能。AUC曲线常用于评估分类器的准确性、鲁棒性和可靠性。

A U C = 1 2 ∑ i = 1 m − 1 ( x i + 1 − x i ) ⋅ ( y i + y i + 1 ) (2.20) \mathrm{AUC}=\frac{1}{2} \sum_{i=1}^{m-1}\left(x_{i+1}-x_i\right) \cdot\left(y_i+y_{i+1}\right) \tag{2.20} AUC=21i=1m1(xi+1xi)(yi+yi+1)(2.20)

AUC的取值范围在0.5到1之间,其中0.5表示随机分类器,而1表示完美分类器。在AUC为0.5到1之间的情况下,AUC值越大,分类器的性能越好。AUC曲线的斜率越大,分类器的性能也越好。

AUC曲线可以解决在不同阈值下分类器性能的变化问题,并且可以对不同的分类器进行比较。对于大多数实际问题,AUC都是一个有用的度量标准。

需要注意的是,AUC曲线并不适用于多类别分类问题,因为ROC曲线只适用于二元分类问题。在多类别分类问题中,可以使用一些其他的评估指标,例如混淆矩阵、准确率、召回率等。

以下是一个AUC曲线的例子:
在这里插入图片描述

这个例子展示了一个分类器的AUC曲线。曲线下方的面积(AUC)为0.87,表示该分类器的性能相对较好。在这个例子中,分类器的预测结果可以根据阈值进行分类,阈值从左上角到右下角逐渐增加。在最优阈值处,该分类器的真阳性率(TPR)为0.75,假阳性率(FPR)为0.15。

在实际应用中,AUC曲线可以用来选择最佳分类器和阈值,以最大化分类性能。由于AUC曲线不受分类器阈值的影响,因此它通常比其他评估指标更适合评估分类器的性能。

2.4 比较检验

1. 什么是比较验证

在机器学习中,比较验证是一种通过比较不同模型的性能来选择最佳模型的方法。比较验证通常涉及以下步骤:

  • 数据集划分:将数据集划分为训练集和测试集。通常使用交叉验证方法来确保模型在不同的数据集上进行训练和测试。

  • 模型训练:使用训练集训练不同的模型。

  • 模型评估:使用测试集评估模型的性能,并计算模型的指标,如准确率、召回率、F1分数、AUC等。

  • 模型比较:比较不同模型的性能指标,并选择最佳模型。

比较验证的目的是找到最佳的模型,以在未知数据上实现最佳性能。由于不同的模型在不同的数据集上表现可能不同,因此比较验证是一种重要的机器学习技术。通常,比较验证需要在多个数据集上进行,以避免因特定数据集导致的偏差。

比较验证可以使用多种方法,如留出法、交叉验证和自助法等。其中,交叉验证是最常用的方法之一,它可以有效地利用数据,并减少估计误差。交叉验证通常可以分为k折交叉验证、留一交叉验证等。

2. 假设验证

在机器学习中,假设验证是一种评估模型的泛化能力的方法,也称为模型选择。假设验证的基本思想是将数据集划分为训练集、验证集和测试集。模型在训练集上训练,在验证集上进行验证和参数调整,最终在测试集上进行测试。

假设验证通常涉及以下步骤:

  1. 数据集划分:将数据集划分为训练集、验证集和测试集。训练集用于模型训练,验证集用于模型选择和参数调整,测试集用于模型测试。

  2. 模型训练:使用训练集训练模型。

  3. 模型选择:使用验证集评估不同模型的性能,并选择最佳模型。

  4. 参数调整:使用验证集调整模型的参数。

  5. 模型测试:使用测试集评估最终模型的性能。

假设验证的目的是选择最佳模型,并避免过度拟合或欠拟合。过度拟合是指模型在训练数据上表现良好,但在测试数据上表现较差。欠拟合是指模型无法捕捉数据的复杂性,导致在训练和测试数据上都表现不佳。假设验证可以帮助选择最佳模型,以最大限度地提高模型的泛化性能。

假设验证可以使用多种方法,如留出法、交叉验证和自助法等。其中,交叉验证是最常用的方法之一,它可以有效地利用数据,并减少估计误差。交叉验证通常可以分为k折交叉验证、留一交叉验证等。

2.5 偏差与方差

1. 偏差与方差

在机器学习中,方差(Variance)和偏差(Bias)是模型的两个重要性质。它们通常被用来描述模型的复杂度和泛化性能。

偏差是指模型的预测结果与真实结果的平均差异,也称为模型的拟合能力。低偏差的模型通常具有较好的拟合能力,能够在训练数据上获得较好的性能。然而,当模型太简单时,它可能无法捕捉数据的复杂性,导致欠拟合。因此,适当的偏差通常需要保证模型具有一定的灵活性和能力,以提高其泛化性能。

方差是指模型在不同训练数据集上预测结果的差异,也称为模型的泛化能力。高方差的模型通常具有过拟合的倾向,即在训练数据上表现良好,但在测试数据上表现较差。过度复杂的模型通常容易过拟合,因为它们可以记忆训练数据中的噪声和异常值,而不是学习数据的真实模式。

为了平衡偏差和方差,可以使用正则化方法、交叉验证和集成学习等技术来调整模型的复杂度和参数。例如,正则化可以通过添加惩罚项来限制模型的复杂度,从而减少方差。交叉验证可以用于估计模型的泛化性能,并选择最佳模型。集成学习可以通过组合多个模型的预测结果来减少方差和偏差。

在这里插入图片描述

2. 泛化误差 / 偏差 / 方差 / 噪声

泛化误差可分解为偏差、方差与噪声之和。

E ( f ; D ) = bias ⁡ 2 ( x ) + var ⁡ ( x ) + ε 2 (2.42) E(f ; D)=\operatorname{bias}^2(\boldsymbol{x})+\operatorname{var}(\boldsymbol{x})+\varepsilon^2 \tag{2.42} E(f;D)=bias2(x)+var(x)+ε2(2.42)

Smileyan
2023.05.01 01:22

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

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

相关文章

【JavaEE】UDP数据报套接字—实现回显服务器(网络编程)

博主简介:想进大厂的打工人博主主页:xyk:所属专栏: JavaEE初阶 本篇文章将带你了解什么是网络编程? 网络编程,指网络上的主机,通过不同的进程,以编程的方式实现网络通信(或称为网络数据传输&am…

中断-STM32

中断-STM32 中断:在主程序运行过程中,出现了特定的中断触发条件 (中断源),使得CPU暂停当前正在运行的程序转而去处理中断程序处理完成后又返回原来被暂停的位置继续运行。 中断优先级:当有多个中断源同时申请中断时,CPU会根据中断源的轻重缓…

Java程序猿搬砖笔记(十一)

文章目录 Hexo博客 Next主题图片防盗链问题Springboot Druid数据库密码加密配置步骤Java统计字符串出现的次数Java获取某个字符在字符串中出现第N次的位置Maven激活指定profileMaven中resources标签的用法详解MySQL 字符集不一致报错EasyExcel日期格式化Configuration、Compone…

gradle Task 详解

Task定义和配置 查看工程下所有的task,使用如下命令 gradle tasks 定义一个task task创建的源码 参数分别是 task 名称,和一个 closure。groovy语法的closure可以写在小括号外面,小括号可以省略 task的源码 public interface Task extends…

【Java笔试强训 25】

🎉🎉🎉点进来你就是我的人了博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔🤺🤺🤺 目录 一、选择题 二、编程题 🔥星际密码…

RabbitMQ死信队列延迟交换机

RabbitMQ死信队列&延迟交换机 1.什么是死信 死信&死信队列 死信队列的应用: 基于死信队列在队列消息已满的情况下,消息也不会丢失实现延迟消费的效果。比如:下订单时,有15分钟的付款时间 2. 实现死信队列 2.1 准备E…

网络编程代码实例:IO复用版

文章目录 前言代码仓库内容代码(有详细注释)server.cclient_select.cclient_poll.cclient_epoll.c 结果总结参考资料作者的话 前言 网络编程代码实例:IO复用版。 代码仓库 yezhening/Environment-and-network-programming-examples: 环境和…

[Linux]网络连接、资源共享

​⭐作者介绍:大二本科网络工程专业在读,持续学习Java,输出优质文章 ⭐作者主页:逐梦苍穹 ⭐所属专栏:Linux基础操作。本文主要是分享一些Linux系统常用操作,内容主要来源是学校作业,分享出来的…

详解c++---vector模拟实现

目录标题 准备工作构造函数迭代器的完善性质相关的函数实现reservepush_back[ ]emptyresizeinserteraseerase后迭代器失效问题swapclear~vector老式拷贝构造迭代器构造新式拷贝构造老式赋值重载新式赋值重载N个数据的构造vector的浅拷贝问题 准备工作 首先我们知道vector是一个…

HTB靶机06-Beep-WP

beep 靶机IP:10.10.10.7 攻击机IP:10.10.14.6 web RCE漏洞利用、nmap提权 扫描 nmap 常规扫描: ┌──(xavier㉿xavier)-[~/HTB/005-Beep] └─$ sudo nmap -sSV -sC 10.10.10.7 -oN nmap1.out Starting Nmap 7.91 ( https://nmap.org …

《道德经》

《道德经》是春秋时期老子(李耳)的哲学作品,又称《道德真经》、《老子》、《五千言》、《老子五千文》,是中国古代先秦诸子分家前的一部著作,是道家哲学思想的重要来源。 道德经分上下两篇,原文上篇《德经…

网络安全: CIDR无类别路由

网络安全: CIDR无类别路由 CIDR是无类别路由,出现CIDR的原因是因为ipv4的地址被使用完客,CIDR的出现暂缓了ipv4用完的速度。 原本的ipv4很刻板,网络号分成8位,16位,24位作为掩码,也就是 xxx.0…

DRY编码原则

基本情况 DRY,Don’t repeat yourself,就是不要重复你自己的意思。 不要重复,是多么简单的意思了,重复就是多了一个一样的东西,为什么多一个呢,一个就可以了,这样才简单,这是一个常…

【报错】arXiv上传文章出现XXX.sty not found

笔者在overleaf上编译文章一切正常,但上传文章到arxiv时出现类似于如下报错: 一般情况下观察arxiv的编译log,不通过的原因,很多时候都是由于某一行导入了啥package,引起的报错;但是如果没有任何一个具体的…

AppSmith(安装与练习4套)

AppSmith官网文档: https://docs.appsmith.com/getting-started/setup/installation-guides/docker安装前需要已经安装好docker,需要版本如下: Docker ( 20.10.7或者更高) Docker-Compose ( 1.29.2或者更高) 安装Appsmith: 准备…

【Linux】第二站:Linux基本指令(一)

文章目录 一、操作系统OS概念1.OS是什么?2.为什么要有OS?1.一个好的操作系统,他的衡量指标是什么?2.操作系统的核心工作 3.理解我们在计算机上的操作4.Linux和Windows的特点 二、Linux基本指令1. 指令概述2.ls指令1> ls -l2> ls -a3&g…

ChatGPT其实并不想让开发人员做这5件事情

前言 ChatGPT已经火爆了快半年了吧,紧接着国内也开始推出了各种仿制品,我甚至一度怀疑,如果人家没有推出ChatGPT,这些仿制品会不会出现。而很多人也嗨皮得不行,利用各种方法开始科学上网,用ChatGPT做各种觉…

不得不说的行为型模式-解释器模式

解释器模式: 解释器模式(Interpreter Pattern)是一种行为型设计模式,它定义了一种语言,用于解释执行特定的操作,例如正则表达式、查询语言、数学表达式等。该模式通过定义一个解释器来解释语言中的表达式…

分治与减治算法实验:题目6 淘汰赛冠军问题

目录 前言 实验内容 实验流程 实验分析 实验过程 流程演示 写出伪代码 实验代码 运行结果 改进算法 总结 前言 淘汰赛冠军问题是一个经典的算法设计与分析的问题,它要求我们在给定的n个参赛者中,通过一系列的比赛,找出最终的冠军…

nginx负载均衡+RabbitMq集群及镜像队列(2)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、nginx是什么?二、搭建步骤1.软件和环境2.安装nginx3.负载均衡配置nginx.conf4.应用程序配置 总结 前言 提示:这里可以添加本文要记…