当前位置: 首页 > news >正文

Imbalanced-learn 5. Ensemble of samplers

Ensemble of samplers

  • 5. 采样器的集成方法
    • 5.1. 包含内部平衡采样器的分类器
      • 5.1.1. 袋外分类器(Bagging classifier)
      • 5.1.2. 随机树森林
      • 5.1.3. 提升(Boosting)

5. 采样器的集成方法

5.1. 包含内部平衡采样器的分类器

5.1.1. 袋外分类器(Bagging classifier)

在集成分类器中,bagging 方法会在数据的不同随机子集上构建多个估计器。在 scikit-learn 中,该分类器被称为 BaggingClassifier。然而,这个分类器不允许对每个数据子集进行平衡处理。因此,在不平衡数据集上训练时,该分类器会偏向多数类:

>>> from sklearn.datasets import make_classification
>>> X, y = make_classification(n_samples=10000, n_features=2, n_informative=2,
...                            n_redundant=0, n_repeated=0, n_classes=3,
...                            n_clusters_per_class=1,
...                            weights=[0.01, 0.05, 0.94], class_sep=0.8,
...                            random_state=0)
>>> from sklearn.model_selection import train_test_split
>>> from sklearn.metrics import balanced_accuracy_score
>>> from sklearn.ensemble import BaggingClassifier
>>> from sklearn.tree import DecisionTreeClassifier
>>> X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
>>> bc = BaggingClassifier(DecisionTreeClassifier(), random_state=0)
>>> bc.fit(X_train, y_train) #doctest:
BaggingClassifier(...)
>>> y_pred = bc.predict(X_test)
>>> balanced_accuracy_score(y_test, y_pred)
0.77...

BalancedBaggingClassifier 中,每一个自助样本还会进一步进行重采样,以实现所需的 sampling_strategy。因此,BalancedBaggingClassifier 拥有与 scikit-learn 的 BaggingClassifier 相同的参数。此外,采样方式可以通过参数 sampler,或者通过 sampling_strategyreplacement 这两个参数来控制,后者适用于希望使用 RandomUnderSampler 的情况:

>>> from imblearn.ensemble import BalancedBaggingClassifier
>>> bbc = BalancedBaggingClassifier(DecisionTreeClassifier(),
...                                 sampling_strategy='auto',
...                                 replacement=False,
...                                 random_state=0)
>>> bbc.fit(X_train, y_train)
BalancedBaggingClassifier(...)
>>> y_pred = bbc.predict(X_test)
>>> balanced_accuracy_score(y_test, y_pred)
0.8...

更改 sampler 将会引出不同的已知实现方法[MO97], [HKT09], [WY09]。你可以参考以下示例,以了解这些不同方法在实际中的应用:使用采样器的Bagging分类器

5.1.2. 随机树森林

BalancedRandomForestClassifier 是另一种集成方法,森林中的每棵树都会获得一个平衡的自助样本 [CLB+04]。此类提供了 RandomForestClassifier 的所有功能:

>>> from imblearn.ensemble import BalancedRandomForestClassifier
>>> brf = BalancedRandomForestClassifier(
...     n_estimators=100, random_state=0, sampling_strategy="all", replacement=True,
...     bootstrap=False,
... )
>>> brf.fit(X_train, y_train)
BalancedRandomForestClassifier(...)
>>> y_pred = brf.predict(X_test)
>>> balanced_accuracy_score(y_test, y_pred)
0.8...

5.1.3. 提升(Boosting)

已有多种基于提升(Boosting)的方法被设计出来。

RUSBoostClassifier 会在执行增强迭代之前对数据集进行随机欠采样 [SKVHN09]:

>>> from imblearn.ensemble import RUSBoostClassifier
>>> rusboost = RUSBoostClassifier(n_estimators=200, algorithm='SAMME.R',
...                               random_state=0)
>>> rusboost.fit(X_train, y_train)
RUSBoostClassifier(...)
>>> y_pred = rusboost.predict(X_test)
>>> balanced_accuracy_score(y_test, y_pred)
0...

一种特别的方法是在装袋分类器中使用 AdaBoostClassifier 作为基学习器,这种方法被称为“EasyEnsemble”。 EasyEnsembleClassifier 允许对在平衡自助样本上训练的 AdaBoost 学习器进行装袋集成 [LWZ08]。与 BalancedBaggingClassifier 的 API 类似,可以按如下方式构建集成模型:

>>> from imblearn.ensemble import EasyEnsembleClassifier
>>> eec = EasyEnsembleClassifier(random_state=0)
>>> eec.fit(X_train, y_train)
EasyEnsembleClassifier(...)
>>> y_pred = eec.predict(X_test)
>>> balanced_accuracy_score(y_test, y_pred)
0.6...

示例

  • 使用重采样比较集成分类器

该篇文章由ChatGPT翻译,如有疑问,欢迎提交Issues

相关文章:

  • Springboot整合Elasticsearch及常用方法大全
  • 鸿蒙图片相似性对比
  • dp进阶,树形背包(dfs+01)
  • 临床项目范围管理:确保项目聚焦与成功交付
  • go写前端打包的自动化工具
  • [特殊字符] Python 批量合并 Word 表格中重复单元格教程(收货记录案例实战)
  • 概率密度基本概念
  • 金蝶云星空客户端自定义控件插件-WPF实现自定义控件
  • 杭州西湖断桥不断:3D扫描还原‘残雪‘视觉骗局
  • 功率分析仪线路滤波与频率滤波的应用指南
  • C++11 lambda
  • 高标准+安全可控:关键领域研发选择什么软件?
  • 车载诊断架构 --- 诊断与ECU平台工作说明书
  • Java基础 Map集合框架 TreeMap
  • Windows下CMake通过鸿蒙SDK交叉编译三方库
  • 北京信创工委会获评“中小企业创新创业大赛优秀对接服务单位”,工委会副理事长单位悬镜安全获创客中国大赛决赛三等奖
  • uniapp处理后端返回的html字符串
  • element-plus限制日期可选范围(这里以7天为例)
  • 浅谈Apache HttpClient的相关配置和使用
  • 重生之拿着标准当令箭---[常见国内外设计标准有哪些]