西瓜书读书笔记整理(三)—— 第二章 模型评估与选择
第二章 模型评估与选择
- 第 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=S⋃T, S ⋂ T = ⊘ S \bigcap T = \oslash S⋂T=⊘。在 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=D1∪D2∪...∪k, D i ⋂ D j = ⊘ D_i \bigcap D_j =\oslash Di⋂Dj=⊘。每个子集 D i D_i Di 都尽可能保持数据分布的一致性,即从 D D D 中通过分层采样得到。然后,每次用 k − 1 k-1 k−1 个子集的并集作为训练集,余下的那个子集作为测试集;这样就可获得 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=1∑m(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)=∫x∼D(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=1∑mI(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=1∑mI(f(xi)=yi)=1−E(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)=∫x∼DI(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)=∫x∼DI(f(x)=y)p(x)dx=1−E(f;D)(2.7)
3. 分类任务性能度量方法 —— 查准率 / 查全率 / F1
对于二分类问题,如下所示:
| 全称 | 真实值(标签,label) | 预测值(predict) | |
|---|---|---|---|
| TP | True Positive | 1 | 1 |
| FP | False Positive | 0 | 1 |
| TN | True Negative | 0 | 0 |
| FN | False Negative | 1 | 0 |
查准率(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= 样例总数 +TP−TN2×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=1∑m−1(xi+1−xi)⋅(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. 假设验证
在机器学习中,假设验证是一种评估模型的泛化能力的方法,也称为模型选择。假设验证的基本思想是将数据集划分为训练集、验证集和测试集。模型在训练集上训练,在验证集上进行验证和参数调整,最终在测试集上进行测试。
假设验证通常涉及以下步骤:
-
数据集划分:将数据集划分为训练集、验证集和测试集。训练集用于模型训练,验证集用于模型选择和参数调整,测试集用于模型测试。
-
模型训练:使用训练集训练模型。
-
模型选择:使用验证集评估不同模型的性能,并选择最佳模型。
-
参数调整:使用验证集调整模型的参数。
-
模型测试:使用测试集评估最终模型的性能。
假设验证的目的是选择最佳模型,并避免过度拟合或欠拟合。过度拟合是指模型在训练数据上表现良好,但在测试数据上表现较差。欠拟合是指模型无法捕捉数据的复杂性,导致在训练和测试数据上都表现不佳。假设验证可以帮助选择最佳模型,以最大限度地提高模型的泛化性能。
假设验证可以使用多种方法,如留出法、交叉验证和自助法等。其中,交叉验证是最常用的方法之一,它可以有效地利用数据,并减少估计误差。交叉验证通常可以分为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
相关文章:
西瓜书读书笔记整理(三)—— 第二章 模型评估与选择
第二章 模型评估与选择 第 2 章 模型评估与选择2.1 经验误差与过拟合1. 错误率 / 精度 / 误差2. 训练误差 / 经验误差 / 泛化误差3. 过拟合 / 欠拟合4. 学习能力5. 模型选择 2.2 评估方法1. 评估方法概述2. 留出法3. 交叉验证法4. 自助法5. 调参 / 最终模型 2.3 性能度量1. 回归…...
AcWing算法提高课-1.3.6货币系统
宣传一下算法提高课整理 <— CSDN个人主页:更好的阅读体验 <— 本题链接(AcWing) 点这里 题目描述 给你一个n种面值的货币系统,求组成面值为m的货币有多少种方案。 输入格式 第一行,包含两个整数n和m。 接…...
vue3回到上一个路由页面
学习链接 Vue Router获取当前页面由哪个路由跳转 在Vue3的setup中如何使用this beforeRouteEnter 在这个路由方法中不能访问到组件实例this,但是可以使用next里面的vm访问到组件实例,并通过vm.$data获取组件实例上的data数据getCurrentInstance 是vue3提…...
Linux三种网络模式 | 仅主机、桥接、NAT
💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! Linux三种网络模式 仅主机模式:虚拟机只能访问物理机,不能上网 桥接模式:虚拟机和物理机连接同一网络,虚拟机和物理机…...
数据库设计与前端框架
数据库设计与前端框架 学习目标: 理解多租户的数据库设计方案 熟练使用PowerDesigner构建数据库模型理解前端工程的基本架构和执行流程 完成前端工程企业模块开发 多租户SaaS平台的数据库方案 多租户是什么 多租户技术(Multi-TenancyTechnology&a…...
技术探秘:揭秘Bean Factory与FactoryBean的区别!
大家好,我是小米,一个热衷于技术分享的29岁小编。今天,我们来聊一聊在Spring框架中常用的两个概念:beanFactory和FactoryBean。它们虽然看似相似,但实际上有着不同的用途和作用。让我们一起来揭开它们的神秘面纱吧&…...
MD-MTSP:遗传算法GA求解多仓库多旅行商问题(提供MATLAB代码,可以修改旅行商个数及起点)
一、多仓库多旅行商问题 多旅行商问题(Multiple Traveling Salesman Problem, MTSP)是著名的旅行商问题(Traveling Salesman Problem, TSP)的延伸,多旅行商问题定义为:给定一个𝑛座城市的城市集…...
技术面试的终极指南:助你取得成功的关键步骤
背景 技术面试是许多求职者最关键的一环,因为它评估了你在特定领域的知识和技能。无论你是刚毕业的大学应届生,还是有多年工作经验的职场老兵,准备充分是成功面试的关键。 这篇文章将提供一系列关键步骤,帮助你充分准备和展现自己…...
Nautilus Chain 测试网第二阶段,推出忠诚度计划及广泛空投
随着更多的公链底层面向市场,通过参与早期测试在主网上线后获得激励成为了行业的一个热点话题,在 Apots、Arbitrum One、Optimism等陆续发放了测试空投后,以 Layer3为主要特性的 Nautilus Chain 也在前不久明确表示将会有空投,引发…...
Python爬虫(三):BeautifulSoup库
BeautifulSoup 是一个可以从 HTML 或 XML 文件中提取数据的 Python 库,它能够将 HTML 或 XML 转化为可定位的树形结构,并提供了导航、查找、修改功能,它会自动将输入文档转换为 Unicode 编码,输出文档转换为 UTF-8 编码。 Beauti…...
Python使用CV2库捕获、播放和保存摄像头视频
Python使用CV2库捕获、播放和保存摄像头视频 特别提示:CV2指的是OpenCV2(Open Source Computer Vision Library),安装的时候是 opencv_python,但在导入的时候采用 import cv2。 若想使用cv2库必须先安装,P…...
[数据结构 -- C语言] 栈(Stack)
目录 1、栈 1.1 栈的概念及结构 2、栈的实现 2.1 接口 3、接口的实现 3.1 初始化 3.2 入栈/压栈 3.3 出栈 3.4 获取栈顶元素 3.5 获取栈中有效元素个数 3.6.1 bool 类型接口 3.6.2 int 类型接口 3.7 销毁栈 4、完整代码 5、功能测试 1、栈 1.1 栈的概念及结构 …...
【我的C++入门之旅】(上)
前言 C的发展史 1979年,贝尔实验室的Bjarne等人试图分析unix内核的时候,试图将内核模块化,但是发现C语言有很多的不足之处,于是在C语言的基础上进行扩展,增加了类的机制,完成了一个可以运行的预处理程序&…...
dcdc降压电路原理及仿真
在之前的文章 DCDC 降压芯片基本原理及选型主要参数介绍 中已经大致讲解了dcdc降压电路的工作原理,今天再结合仿真将buck电路工作过程讲一讲。 基本拓扑 上图为buck电路的基本拓扑结构,开关打到1,电感充电;开关打到0,…...
搭建Redis主从集群+哨兵+代理predixy
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、Redis是什么?二、搭建Redis集群步骤1.环境和版本2.Redis 安装部署3.主从同步配置4.哨兵模式配置5.代理predixy配置 总结 前言 提示:…...
Syncthing文件同步 - 免费搭建开源的文件自动同步服务器并公网远程访问【私人云盘】
文章目录 1. 前言2. Syncthing网站搭建2.1 Syncthing下载和安装2.2 Syncthing网页测试2.3 注册安装cpolar内网穿透 3. 本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1. 前言 在数据爆炸的当下,每天都会产生海量的数据,这些…...
SQL——索引
💡 索引 在关系型数据库中,索引是一种单独的、物理上的对数据库表中的一列或多列的值进行排序的一种存储结构,他是某个表中的一列或着若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单(类似于图书目录&#x…...
Java代码组成部分
一、构造函数与默认构造函数 构造函数,是一种特殊方法。主要用来在创建对象时初始化对象,即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。 /** * 矩形 */ class Rectangle {/*** 构造函数*/public Rectangle(int leng…...
vue2和vue3有啥区别,vue3的优点有哪些?
Vue.js 是一种流行的 JavaScript 框架,用于开发现代 Web 应用程序。Vue.js 具有简单易用、高效和灵活等特点,能够极大地提高开发效率并改进用户体验。Vue.js 一直在不断更新和改进,它的最新版本是 Vue 3。 在本文中,我们将探讨 V…...
就业内推 | 上市公司招网工,最高25k*14薪,六险一金
01 锐捷网络 招聘岗位:网络工程师 职责描述: 1、承接本产品线(无线或数通)所有咨询、故障、网络变更等业务,响应内外部客户的业务响应需求,需要值班。 2、同时作为产品线技术力的核心,需要负责…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
Linux 下 DMA 内存映射浅析
序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存,但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程,可以参考这篇文章,我觉得写的非常…...
第八部分:阶段项目 6:构建 React 前端应用
现在,是时候将你学到的 React 基础知识付诸实践,构建一个简单的前端应用来模拟与后端 API 的交互了。在这个阶段,你可以先使用模拟数据,或者如果你的后端 API(阶段项目 5)已经搭建好,可以直接连…...
Ray框架:分布式AI训练与调参实践
Ray框架:分布式AI训练与调参实践 系统化学习人工智能网站(收藏):https://www.captainbed.cn/flu 文章目录 Ray框架:分布式AI训练与调参实践摘要引言框架架构解析1. 核心组件设计2. 关键技术实现2.1 动态资源调度2.2 …...
java+webstock
maven依赖 <dependency><groupId>org.java-websocket</groupId><artifactId>Java-WebSocket</artifactId><version>1.3.5</version></dependency><dependency><groupId>org.apache.tomcat.websocket</groupId&…...
篇章一 论坛系统——前置知识
目录 1.软件开发 1.1 软件的生命周期 1.2 面向对象 1.3 CS、BS架构 1.CS架构编辑 2.BS架构 1.4 软件需求 1.需求分类 2.需求获取 1.5 需求分析 1. 工作内容 1.6 面向对象分析 1.OOA的任务 2.统一建模语言UML 3. 用例模型 3.1 用例图的元素 3.2 建立用例模型 …...
前端打包工具简单介绍
前端打包工具简单介绍 一、Webpack 架构与插件机制 1. Webpack 架构核心组成 Entry(入口) 指定应用的起点文件,比如 src/index.js。 Module(模块) Webpack 把项目当作模块图,模块可以是 JS、CSS、图片等…...
生成对抗网络(GAN)损失函数解读
GAN损失函数的形式: 以下是对每个部分的解读: 1. , :这个部分表示生成器(Generator)G的目标是最小化损失函数。 :判别器(Discriminator)D的目标是最大化损失函数。 GAN的训…...
