用于不平衡分类的 Bagging 和随机森林

news2024/9/25 7:16:00

用于不平衡分类的 Bagging 和随机森林

Bagging 是一种集成算法,它在训练数据集的不同子集上拟合多个模型,然后结合所有模型的预测。

[随机森林]是 bagging 的扩展,它也会随机选择每个数据样本中使用的特征子集。bagging 和随机森林都已被证明能有效解决各种不同的预测建模问题。

虽然这些算法很有效,但它们并不适合处理类别分布不均的分类问题。不过,人们已经提出了许多算法修改方案,以调整算法的行为,使其更适合严重的类别不平衡问题。

在本教程中,您将了解如何使用装袋和随机森林进行不平衡分类。

完成本教程后,您将了解:

  • 如何使用随机欠采样的 Bagging 来解决不平衡分类问题。
  • 如何使用具有类别加权和随机欠采样的随机森林来解决不平衡分类问题。
  • 如何使用结合 bagging 和 boosting 的 Easy Ensemble 来解决不平衡分类问题。

教程概述

本教程分为三个部分:

  1. 不平衡分类的 Bagging
    1. 标准装袋
    2. 随机欠采样的 Bagging
  2. 不平衡分类的随机森林
    1. 标准随机森林
    2. 带类别权重的随机森林
    3. 带引导类权重的随机森林
    4. 随机欠采样的随机森林
  3. 不平衡分类的简单集成
    1. 简易合奏

不平衡分类的 Bagging

[Bootstrap Aggregation(简称 Bagging)是一种集成机器学习算法。

它首先涉及选择训练数据集的随机样本,并进行替换,这意味着给定的样本可能包含训练数据集中零个、一个或多个示例副本。这称为引导样本。然后对每个数据样本拟合一个弱学习器模型。通常,不使用剪枝的决策树模型(例如,可能略微过度拟合其训练集)被用作弱学习器。最后,将所有拟合弱学习器的预测组合起来以做出单个预测(例如,聚合)。

然后使用集成中的每个模型来生成新样本的预测,并对这些 m 个预测取平均值以得出 bagged 模型的预测。

— 第 192 页,《应用预测模型》,2013 年。

创建新的引导样本以及拟合和向样本添加树的过程可以持续进行,直到在验证数据集上集合的性能不再得到改善为止。

这个简单的过程通常比单个配置良好的决策树算法产生更好的性能。

原样装袋将创建[引导样本],不会考虑不平衡分类数据集的倾斜类别分布。因此,尽管该技术总体上表现良好,但如果存在严重的类别不平衡,则可能表现不佳。

标准Bagging

在我们深入探索 bagging 的扩展之前,让我们先评估一个标准的 bagged 决策树集成,并将其用作比较点。

我们可以使用BaggingClassifier scikit-sklearn 类来创建具有大致相同配置的袋装决策树模型。

首先,让我们定义一个合成的不平衡二元分类问题,其中包含 10,000 个示例,其中 99% 属于多数类,1% 属于少数类。

...
# generate dataset
X, y = make_classification(n_samples=10000, n_features=2, n_redundant=0,
	n_clusters_per_class=1, weights=[0.99], flip_y=0, random_state=4)

然后,我们可以定义标准的袋装决策树集成模型以供评估。

...
# define model
model = BaggingClassifier()

然后,我们可以使用重复分层[k 折交叉验证来]评估该模型,重复 3 次,折数 10 次。

我们将使用所有折叠和重复的平均[ROC AUC 分数来评估模型的性能。

...
# define evaluation procedure
cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)
# evaluate model
scores = cross_val_score(model, X, y, scoring='roc_auc', cv=cv, n_jobs=-1)

综合以上几点,下面列出了在不平衡分类数据集上评估标准袋装集成的完整示例。

# bagged decision trees on an imbalanced classification problem
from numpy import mean
from sklearn.datasets import make_classification
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import RepeatedStratifiedKFold
from sklearn.ensemble import BaggingClassifier
# generate dataset
X, y = make_classification(n_samples=10000, n_features=2, n_redundant=0,
	n_clusters_per_class=1, weights=[0.99], flip_y=0, random_state=4)
# define model
model = BaggingClassifier()
# define evaluation procedure
cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)
# evaluate model
scores = cross_val_score(model, X, y, scoring='roc_auc', cv=cv, n_jobs=-1)
# summarize performance
print('Mean ROC AUC: %.3f' % mean(scores))

运行示例评估模型并报告平均 ROC AUC 分数。

注意:由于算法或评估程序的随机性,或数值精度的差异,您的结果可能会有所不同。考虑运行示例几次并比较平均结果。

在这种情况下,我们可以看到该模型的得分约为 0.87。

Mean ROC AUC: 0.871

随机欠采样的 Bagging

有很多方法可以使 bagging 适应不平衡分类的情况。

也许最直接的方法是在拟合弱学习器模型之前对引导样本应用数据重采样。这可能涉及对少数类进行过采样或对多数类进行欠采样。

在 bagging 的重采样阶段,克服类别不平衡问题的一个简单方法是,在从原始数据集中随机抽取实例时考虑实例的类别。

— 第 175 页,从不平衡数据集学习,2018 年。

在引导法中对少数类进行过度采样称为 OverBagging;同样,在引导法中对多数类进行欠采样称为 UnderBagging,将两种方法结合起来称为 OverUnderBagging。

不平衡学习库提供了 UnderBagging 的实现。

具体来说,它提供了一种 bagging 版本,该版本对引导样本中的多数类使用随机欠采样策略来平衡两个类。这在BalancedBaggingClassifier 类中提供。

...
# define model
model = BalancedBaggingClassifier()

接下来,我们可以评估袋装决策树集成的修改版本,该版本在拟合每个决策树之前对多数类进行随机欠采样。

我们期望使用随机欠采样能够提高集成的性能。

此模型和前一个模型的默认树数(n_estimators)均为 10。实际上,测试此超参数的较大值(例如 100 或 1,000)是个好主意。

完整的示例如下。

# bagged decision trees with random undersampling for imbalanced classification
from numpy import mean
from sklearn.datasets import make_classification
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import RepeatedStratifiedKFold
from imblearn.ensemble import BalancedBaggingClassifier
# generate dataset
X, y = make_classification(n_samples=10000, n_features=2, n_redundant=0,
	n_clusters_per_class=1, weights=[0.99], flip_y=0, random_state=4)
# define model
model = BalancedBaggingClassifier()
# define evaluation procedure
cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)
# evaluate model
scores = cross_val_score(model, X, y, scoring='roc_auc', cv=cv, n_jobs=-1)
# summarize performance
print('Mean ROC AUC: %.3f' % mean(scores))

运行示例评估模型并报告平均 ROC AUC 分数。

注意:由于算法或评估程序的随机性,或数值精度的差异,您的结果可能会有所不同。考虑运行示例几次并比较平均结果。

在这种情况下,我们可以看到平均 ROC AUC 从没有任何数据重采样时的约 0.87 提升到多数类随机欠采样时的约 0.96。

这不是一个真正的同类比较,因为我们使用的是来自两个不同库的相同算法实现,但它表明,当类分布不均匀时,在拟合弱学习器之前平衡引导程序会带来一些好处。

Mean ROC AUC: 0.962

尽管BalancedBaggingClassifier类使用决策树,但您可以测试不同的模型,例如 k-最近邻等。您可以在定义类时设置base_estimator参数以使用不同的较弱学习器分类器模型。

不平衡分类的随机森林

随机森林是另一组决策树模型,可以被认为是 bagging 的改进。

与 bagging 类似,随机森林涉及从训练数据集中选择引导样本,并在每个样本上拟合决策树。主要区别在于,不使用所有特征(变量或列);而是为每个引导样本选择一小部分随机选择的特征(列)。这可以降低决策树的相关性(使它们更加独立),从而改善集成预测。

然后,集合中的每个模型都用于生成新样本的预测,并将这 m 个预测取平均值以得出森林的预测。由于算法在每次分割时随机选择预测因子,因此树相关性必然会降低。

— 第 199 页,《应用预测模型》,2013 年。

再次,随机森林在广泛的问题上非常有效,但与装袋一样,标准算法在不平衡分类问题上的性能并不好。

在学习极度不平衡的数据时,引导样本很有可能包含很少甚至不包含少数类,从而导致树在预测少数类方面性能较差。

—使用随机森林学习不平衡数据,2004 年。

标准随机森林

在我们深入研究随机森林集成算法的扩展以使其更适合不平衡分类之前,让我们在我们的合成数据集上拟合和评估随机森林算法。

我们可以使用scikit-learn 中的RandomForestClassifier类并使用少量的树,在本例中为 10 棵。

...
# define model
model = RandomForestClassifier(n_estimators=10)

下面列出了在不平衡数据集上拟合标准随机森林集成的完整示例。

# random forest for imbalanced classification
from numpy import mean
from sklearn.datasets import make_classification
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import RepeatedStratifiedKFold
from sklearn.ensemble import RandomForestClassifier
# generate dataset
X, y = make_classification(n_samples=10000, n_features=2, n_redundant=0,
	n_clusters_per_class=1, weights=[0.99], flip_y=0, random_state=4)
# define model
model = RandomForestClassifier(n_estimators=10)
# define evaluation procedure
cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)
# evaluate model
scores = cross_val_score(model, X, y, scoring='roc_auc', cv=cv, n_jobs=-1)
# summarize performance
print('Mean ROC AUC: %.3f' % mean(scores))

运行示例评估模型并报告平均 ROC AUC 分数。

注意:由于算法或评估程序的随机性,或数值精度的差异,您的结果可能会有所不同。考虑运行示例几次并比较平均结果。

在这种情况下,我们可以看到该模型实现了约 0.86 的平均 ROC AUC。

Mean ROC AUC: 0.869

带类别权重的随机森林

修改决策树以解决分类不平衡问题的一个简单技巧是,在计算所选分割点的“不纯度”分数时改变每个类别的权重。

杂质衡量的是训练数据集中给定分割的样本组的混合程度,通常用基尼系数或熵来衡量。计算可能会出现偏差,导致有利于少数类的混合受到青睐,从而允许多数类出现一些假阳性。

这种随机森林的修改被称为加权随机森林。

另一种使随机森林更适合从极度不平衡的数据中学习的方法遵循成本敏感学习的思想。由于 RF 分类器倾向于偏向多数类,因此我们将对错误分类少数类施加更重的惩罚。

—使用随机森林学习不平衡数据,2004 年。

这可以通过在RandomForestClassifier类上设置class_weight参数来实现。

此参数采用一个字典,其中包含每个类值(例如 0 和 1)到权重的映射。可以提供“ balanced ”参数值以自动使用训练数据集中的逆权重,重点关注少数类。

...
# define model
model = RandomForestClassifier(n_estimators=10, class_weight='balanced')

我们可以在测试问题上测试随机森林的这种修改。虽然不是针对随机森林的,但我们预计会有一些适度的改进。

完整的示例如下。

# class balanced random forest for imbalanced classification
from numpy import mean
from sklearn.datasets import make_classification
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import RepeatedStratifiedKFold
from sklearn.ensemble import RandomForestClassifier
# generate dataset
X, y = make_classification(n_samples=10000, n_features=2, n_redundant=0,
	n_clusters_per_class=1, weights=[0.99], flip_y=0, random_state=4)
# define model
model = RandomForestClassifier(n_estimators=10, class_weight='balanced')
# define evaluation procedure
cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)
# evaluate model
scores = cross_val_score(model, X, y, scoring='roc_auc', cv=cv, n_jobs=-1)
# summarize performance
print('Mean ROC AUC: %.3f' % mean(scores))

运行示例评估模型并报告平均 ROC AUC 分数。

注意:由于算法或评估程序的随机性,或数值精度的差异,您的结果可能会有所不同。考虑运行示例几次并比较平均结果。

在这种情况下,我们可以看到该模型的平均 ROC AUC 从 0.86 适度提升至约 0.87。

Mean ROC AUC: 0.871

带引导类权重的随机森林

鉴于每棵决策树都是由引导样本(例如,有放回的随机选择)构建的,因此数据样本中的类分布对于每棵树来说都会有所不同。

因此,根据每个引导样本而不是整个训练数据集中的类分布来改变类权重可能会很有趣。

这可以通过将class_weight参数设置为值“ balanced_subsample ”来实现。

我们可以测试这个修改并将结果与上面的“平衡”情况进行比较;完整的示例如下所示。

# bootstrap class balanced random forest for imbalanced classification
from numpy import mean
from sklearn.datasets import make_classification
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import RepeatedStratifiedKFold
from sklearn.ensemble import RandomForestClassifier
# generate dataset
X, y = make_classification(n_samples=10000, n_features=2, n_redundant=0,
	n_clusters_per_class=1, weights=[0.99], flip_y=0, random_state=4)
# define model
model = RandomForestClassifier(n_estimators=10, class_weight='balanced_subsample')
# define evaluation procedure
cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)
# evaluate model
scores = cross_val_score(model, X, y, scoring='roc_auc', cv=cv, n_jobs=-1)
# summarize performance
print('Mean ROC AUC: %.3f' % mean(scores))

运行示例评估模型并报告平均 ROC AUC 分数。

注意:由于算法或评估程序的随机性,或数值精度的差异,您的结果可能会有所不同。考虑运行示例几次并比较平均结果。

在这种情况下,我们可以看到该模型的平均 ROC AUC 从 0.87 适度提升至约 0.88。

Mean ROC AUC: 0.884

随机欠采样的随机森林

随机森林的另一个有用的修改是对引导样本执行数据重采样,以便明确改变类分布。

不平衡学习库中的BalancedRandomForestClassifier类实现了这一点,并在达到引导样本时对多数类进行随机欠采样。这通常被称为平衡随机森林。

...
# define model
model = BalancedRandomForestClassifier(n_estimators=10)

鉴于数据重采样技术的广泛成功,我们预计这将对模型性能产生更显著的影响。

我们可以在我们的合成数据集上测试随机森林的这种修改并比较结果。完整的示例如下所示。

# random forest with random undersampling for imbalanced classification
from numpy import mean
from sklearn.datasets import make_classification
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import RepeatedStratifiedKFold
from imblearn.ensemble import BalancedRandomForestClassifier
# generate dataset
X, y = make_classification(n_samples=10000, n_features=2, n_redundant=0,
	n_clusters_per_class=1, weights=[0.99], flip_y=0, random_state=4)
# define model
model = BalancedRandomForestClassifier(n_estimators=10)
# define evaluation procedure
cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)
# evaluate model
scores = cross_val_score(model, X, y, scoring='roc_auc', cv=cv, n_jobs=-1)
# summarize performance
print('Mean ROC AUC: %.3f' % mean(scores))

运行示例评估模型并报告平均 ROC AUC 分数。

注意:由于算法或评估程序的随机性,或数值精度的差异,您的结果可能会有所不同。考虑运行示例几次并比较平均结果。

在这种情况下,我们可以看到该模型的平均 ROC AUC 从 0.89 适度提升至约 0.97。

Mean ROC AUC: 0.970

不平衡分类的简单集成

当考虑使用袋装集成进行不平衡分类时,一个自然的想法可能是对多数类进行随机重采样,以创建具有平衡类分布的多个数据集。

具体来说,可以从少数类中的所有示例和从多数类中随机选择的样本创建一个数据集。然后可以在这个数据集上拟合一个模型或弱学习器。这个过程可以重复多次,并且可以使用整个模型集合的平均预测来进行预测。

这正是 Xu-Ying Liu 等人在 2008 年的论文“类别不平衡学习的探索性欠采样”中提出的方法。

子样本的选择性构建被视为多数类的欠采样的一种。生成多个子样本允许集成克服欠采样的缺点,因为在欠采样中有价值的信息会被从训练过程中丢弃。

…欠采样是解决类别不平衡的有效策略。然而,欠采样的缺点是它会丢弃许多可能有用的数据。

—用于类别不平衡学习的探索性欠采样,2008 年。

作者提出了该方法的变体,例如 Easy Ensemble 和 Balance Cascade。

让我们仔细看看 Easy Ensemble。

Easy Ensemble

Easy Ensemble 涉及通过从少数类中选择所有示例并从多数类中选择子集来创建训练数据集的平衡样本。

不是使用剪枝决策树,而是在每个子集上使用增强决策树,具体来说是 AdaBoost 算法。

AdaBoost 的工作原理是,首先在数据集上拟合一个决策树,然后确定决策树的错误,并根据这些错误对数据集中的示例进行加权,以便更多地关注错误分类的示例,而较少关注正确分类的示例。然后在加权数据集上拟合后续树,旨在纠正错误。然后对给定数量的决策树重复该过程。

这意味着难以分类的样本会获得越来越大的权重,直到算法找到一个可以正确分类这些样本的模型。因此,算法的每次迭代都需要学习数据的不同方面,重点关注包含难以分类样本的区域。

— 第 389 页,《应用预测模型》,2013 年。

不平衡学习库中的EasyEnsembleClassifier 类提供了简单集成技术的实现。

...
# define model
model = EasyEnsembleClassifier(n_estimators=10)

我们可以在我们的综合不平衡分类问题上评估该技术。

鉴于使用某种类型的随机欠采样,我们期望该技术总体上表现良好。

完整的示例如下。

# easy ensemble for imbalanced classification
from numpy import mean
from sklearn.datasets import make_classification
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import RepeatedStratifiedKFold
from imblearn.ensemble import EasyEnsembleClassifier
# generate dataset
X, y = make_classification(n_samples=10000, n_features=2, n_redundant=0,
	n_clusters_per_class=1, weights=[0.99], flip_y=0, random_state=4)
# define model
model = EasyEnsembleClassifier(n_estimators=10)
# define evaluation procedure
cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)
# evaluate model
scores = cross_val_score(model, X, y, scoring='roc_auc', cv=cv, n_jobs=-1)
# summarize performance
print('Mean ROC AUC: %.3f' % mean(scores))

运行示例评估模型并报告平均 ROC AUC 分数。

注意:由于算法或评估程序的随机性,或数值精度的差异,您的结果可能会有所不同。考虑运行示例几次并比较平均结果。

在这种情况下,我们可以看到集成在数据集上表现良好,实现了约 0.96 的平均 ROC AUC,接近使用随机欠采样的随机森林在该数据集上实现的 AUC(0.97)。

Mean ROC AUC: 0.968

尽管每个子样本都使用了 AdaBoost 分类器,但可以通过为模型设置base_estimator参数来使用替代分类器模型。

在这里插入图片描述

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

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

相关文章

【Word与WPS如何冻结首行首列及窗口】

1.Word如何冻结首行首列及窗口 microsoft word 中锁定表头是一项实用的功能,可让您在滚动文档时保持表头可见。这在处理大型文档或包含大量数据的表格时非常有用。php小编柚子将为您详细介绍 word 锁定表头位置的方法,帮助您轻松掌握这项实用技巧。 1.…

实体书商城小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,小说分类管理,小说信息管理,订单管理,系统管理 微信端账号功能包括:系统首页,小说信息,小说资讯&#xff0…

Qt_两种创建组件的方式-通过图形化-通过代码

文章目录 一、通过图形化的方式,在界面上创建一个控件,显示hello world1.打开UI设计界⾯2.拖拽控件⾄ ui 界⾯窗⼝并修改内容3.构建并运行 二、通过代码的方式,通过编写代码,在界面上创建控件,显示hello world在Widget…

手撕python之基本数据类型以及变量

​​​​​​1.基础概念 python就是将不同的数据划分成了不同的类型 就像我们生活中的数据有数字、字符等数据一样 小知识点: 注释:# 全体注释:AltF3 取消注释:AltF4 2.数值类型 数值类型概括 数值类型分为三种&#xff…

Cesium 展示——动态洪水淹没效果

文章目录 需求分析1. 引入插件2. 定义变量3. 开始绘制3.1 绘制点3.2 绘制线3.3 绘制面3.4 开始分析(第一种)3.5 开始分析(第二种)3.6 方法调用4. 整体代码其他需求 从低处到高处实现洪水淹没效果 分析 本篇文章对方法进行单独抽离,因此支持拿来即用,注意传参就可 1. …

宠物系统小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,商品信息管理,店主管理,猫狗查询管理,猫狗宠物社区,管理员管理,系统管理 微信端账号功能包括:系统首页&…

宝塔 出现 请使用正确的入口登录面板

目录 前言1. 问题所示2. 原理分析3. 解决方法 前言 记录实战中所有的问题导向、原理分析以及解决方法 1. 问题所示 在登录宝塔的时候,出现如下问题 请使用正确的入口登录面板 错误原因:当前新安装的已经开启了安全入口登录,新装机器都会随…

使用redis模拟cookie-session,例子:实现验证码功能

目录 在前后端分离架构中不建议使用cookie-session机制实现端状态识别 所以我们可以使用redis来模拟session-cookie机制 下面我们通过实现验证码的功能来举例 第一步:了解前端要我们返回的数据变量名字,变量类型 1.封装code,data成一个result类&…

多模态技术应用场景探析,景联文科技多模态数据测试平台推动多模态大模型技术突破

多模态技术应用场景探析,景联文科技多模态数据测试平台推动多模态大模型技术突破 在大语言模型背景下,多模态技术的发展已成为一个重要趋势。 Sora是OpenAI推出的多模态大模型,具备高级视频生成与编辑功能,支持长视频、多视角、多…

使用OpenCV库来捕获摄像头视频流,并按指定格式保存

今天我们来使用OpenCV库来捕获摄像头视频流,并将其保存为AVI格式的视频文件, 代码的主要功能包括: 初始化摄像头捕获对象。设置视频编解码器和输出文件路径。循环读取视频帧,处理并保存到文件中。显示处理后的视频帧。按下q键退…

Python | 处理海洋2C 数据 | 非标准时间格式

写在前面 最近,师弟在用Python读取某海洋2C数据时,突然冒出一个报错:“时间单位的参考日期无效,当前日期 00:00:00.0”。这让我回想起,似乎在很久很久以前,我处理SMAP和Argo数据时也遇到过类似的问题。为了…

JavaScript 模块化开发:ES6 模块与 CommonJS 的对比与应用

​ ​ 您好,我是程序员小羊! 前言 随着前端项目规模的增长,代码组织和管理变得越来越复杂。模块化开发成为解决这一问题的有效手段,能够帮助开发者将代码进行分割、复用和维护。JavaScript 在发展过程中出现了多种模块化规范&…

【精通SDL之----使用PBO异步传输像素数据】

使用PBO异步传输像素数据 前言一、 一些GPU 分配的常用内存对象介绍二、 PBO 传输原理三、 PBO 使用方法 前言 书接上文【精通SDL之----SDL_RenderReadPixels截屏】,SDL_RenderReadPixels在GLES2上是一个非常耗时的操作,因为   1. OpenGL ES 是一个异步…

.NET Razor类库 - 静态资源组件化

1. 找到Razor类库 打开VS2022 文件 - 新建 - 项目 或者 使用 CtrlShiftN 快捷键 输入Razor 搜索 , 选中Razor类库, 点击 下一步2.创建Razor类库项目 输入项目名称 IX.RCL.Front RCL 是 RazorClassLibrary的简称意思 Front 代表前端静态资源的意思 位…

KEIL Stm32 bin文件生成的两种方法以及报错的处理

Keil里生成bin文件的方法有两种,记录如下,以免忘记~ 首先,在Keil主页面,点击如下按钮,打开Options for Target ‘target 1’对话框,并选择User标签页。 其次,通过在 User标签页 设置 “After B…

一种基于 JavaEE 的合同管理系统,用于存储、管理和跟踪合同的软件工具,功能很完善(附源码)

前言 在现代企业管理中,合同管理是一项至关重要的任务。传统的手动管理合同不仅耗时耗力,而且容易出现错误和遗漏,导致合同执行效率低下,甚至面临法律风险。随着业务的不断扩展,越来越多的企业开始寻求一种更为高效、…

作为HR,如何解决简历筛选难度大的问题

简历筛选需要耗费大量的时间和精力,尤其是当应聘者过多的情况下,往往让HR精疲力竭,而且效率低下。当下也有很多这方面的工具可以辅助的,如:招聘管理,简历解析类等。 借助软件,可以更好的获取简…

GLM-4-Flash 大模型API免费了,手把手构建“儿童绘本”应用实战(附源码)

老牛同学刚刷到了一条劲爆的消息,GLM-4-Flash大模型推理 API 免费了:https://bigmodel.cn/pricing 老牛同学一直觉得上次阿里云百炼平台为期 1 个月免费额度的“羊毛”已经够大了(太卷了,阿里云免费 1 个月大模型算力额度&#xf…

什么是BI?BI系统的功能有哪些?哪些人需要BI工具支持?

什么是BI? BI是商业智能(Business Intelligence)的缩写。它是指通过收集、整理、分析和可视化企业内部和外部数据,从中获得洞察信息和决策支持的技术和流程。BI利用数据分析工具和技术,帮助企业管理者和决策者更好地理…

Cesium 展示——获取指定区域地形的最大最小高程

文章目录 需求分析方法一:方法二:需求 在地图上勾选某一处的区域,分析获取区域内最大最小高程 分析 方法一: function getAreaHeight(viewer, positions) {const startP = positions[0