【机器学习导引】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=1∑mL(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=n1∑i=1n(yi−yi^)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=n1∑i=1n(yi−yi^)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=n1∑i=1n∣yi−yi^∣
- 适用场景:用于回归任务,但相比 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=1∑n[yilogyi^+(1−yi)log(1−yi^)]
-
适用场景:主要用于分类任务,例如二分类任务(如猫和狗的分类)、多分类任务(如手写数字识别)。
-
解释:交叉熵损失衡量的是两个概率分布之间的差异,预测值 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,1−y⋅y^)
- 适用场景:主要用于**支持向量机(SVM)**等分类模型。
- 解释:当样本的预测结果 y ⋅ y ^ ≥ 1 y \cdot \hat{y} \geq 1 y⋅y^≥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δ(∣a∣−21δ)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)=i∑P(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=−N1∑i=1Nlog∑jeyj^eyi^
- 适用场景:通常用于多分类问题的神经网络输出层,结合交叉熵损失。
- 解释: S o f t m a x Softmax Softmax 损失将多个分类的输出归一化为概率分布,并计算与真实标签的交叉熵损失。
总结:
- 回归任务:常用 MSE、MAE、Huber 损失等。
- 分类任务:常用交叉熵损失、Hinge 损失、Softmax 损失等。
- 生成模型/概率测量:常用 KL 散度等。
损失函数的选择取决于具体的任务类型、数据特性以及模型需求。
评估方法 (Evaluation method)
-
留出法 (Hold-out method):
这是最简单的验证方法之一,将数据集分成两个或三个部分:训练集和测试集(有时还有验证集)。训练集用于训练模型,测试集用于评估模型的性能。常见的划分比例是70%用于训练,30%用于测试。这种方法简单直接,但在数据量较小时可能不够稳定。
-
交叉验证法 (Cross-validation):
交叉验证是一种比留出法更可靠的验证技术。最常见的是 k折交叉验证。数据集被分成
k
个相同大小的部分,模型训练k
次,每次使用一个不同的部分作为测试集,其余部分作为训练集。这样可以更好地减少模型性能估计的方差,提供更稳定的结果。 -
自助法 (Bootstrapping):
- 自助法是一种重采样技术,数据点从数据集中随机选取,允许有放回地抽样,以创建多个新的训练集。这种方法在数据集较小时尤其有用,因为它可以通过创建许多样本来帮助估计模型性能的不确定性。自助法主要用于估计统计量的分布或不确定性。
- 通过自助法,初始数据集 D D D 中约有 36.8 % 36.8 \% 36.8% 的样本未被采样到数据集 D D D’ 中。
-
调参与最终模型 (Parameter tuning and final model):
这指的是调整模型的超参数以优化性能的过程。常用的方法包括网格搜索(Grid Search)和随机搜索(Random Search),它们用于找到最佳的参数组合。在找到最佳参数之后,最终模型会在整个训练集上进行训练,并在测试集上评估模型的性能。
性能度量(Performance measure)
错误率与精度
- 错误率:
-
错误率表示模型预测错误的比例。公式如下:
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=1∑mI(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。
-
错误率的意思是,模型在整个数据集上预测错误的样本占总样本数的比例。
-
- 精度:
-
精度表示模型预测正确的比例。公式如下:
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=1∑mI(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)=1−E(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(xi∈D+∑I(f(xi)=yi)×cost01+xi∈D−∑I(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[(yD−y)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~(∠・ω< )⌒☆ ~ 今天,我将继续和大家一起学习C基础篇第五章下篇----string类的模拟实现 ~ 上篇:★ C基础篇 ★ string类-CSDN博客 C基础篇专栏:★ 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,时间还长 NO COMPRESS 1820 5924 0:5 R…...
创建一个Oracle版本的JDK的Docker镜像
背景说明 OpenJDK 和Oracle JDK 一般情况下我们选择OpenJDK,两者针对大部分场景都可以满足,有些地方例如反射技术获得某些包路径下的类对象等,有时候选择OpenJDK会导致空指针异常。 两者在底层实现方面有部分区别。 创建镜像 这里是Linux…...

地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...

python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...

深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...

基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...