【机器学习】类别不平衡数据的处理

本文涉及的产品
资源编排,不限时长
简介: 【机器学习】类别不平衡数据的处理

🍔 前言

在现实环境中,采集的数据(建模样本)往往是比例失衡的。比如:一个用于模型训练的数据集中,A 类样本占 95%,B 类样本占 5%。

🐼 类别的不平衡会影响到模型的训练,所以,我们需要对这种情况进行处理。处理的主要方法如下:

  1. 过采样:增加少数类别样本的数量,例如:减少 A 样本数量,达到 AB 两类别比例平衡。
  2. 欠采样:减少多数类别样本的数量,例如:增加 B 类样本数量,达到 AB 两类别比例平衡。

🍔 方案1:LR自带参数

处理不均衡的数据 class_weight=“balanced” 参数 根据样本出现的评论自动给样本设置权重

示例代码💯:

# 处理不均衡的数据
import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn import datasets
from sklearn.preprocessing import StandardScaler
iris = datasets.load_iris()
# 移走40个数据,使数据不均衡
features = iris.data[40:, :]
target = iris.target[40:]
target
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2])
# 打标签 
target = np.where((target == 0), 0, 1)
target
# 标准化数据
scaler = StandardScaler()
features_standardized = scaler.fit_transform(features)
# class_weight="balanced"  参数  根据样本出现的评论自动给 样本设置 权重
logistic_regression = LogisticRegression(random_state=0, class_weight="balanced")
model = logistic_regression.fit(features_standardized, target)

🍔 方案2:imbalanced-learn

imbalanced-learn是一个基于Python的开源库,专门用于处理不平衡数据集的机器学习问题。该库提供了一系列的重采样技术、组合方法和机器学习算法,旨在提高在不平衡数据集上的分类性能。以下是对imbalanced-learn的详细介绍:

主要功能

🐻 重采样技术:包括欠采样(如Tomek Links、Random Under Sampler等)、过采样(如SMOTE、ADASYN等)以及结合欠采样和过采样的方法(如SMOTEENN、SMOTETomek等)。这些技术通过重新调整数据集中各类别的样本数量,以达到类别平衡的目的。

🐻 组合方法:imbalanced-learn还提供了一些组合方法,如集成学习和自适应集成学习等,这些方法通过结合多个分类器的预测结果来提高整体分类性能。

🐻 机器学习算法:除了重采样技术和组合方法外,imbalanced-learn还包含了一些专门为不平衡数据集设计的机器学习算法,如Easy Ensemble classifier、Balanced Random Forest等。

特点

🐻 多样性:imbalanced-learn提供了多种不同的重采样技术和组合方法,用户可以根据具体的数据集和需求选择合适的方法。

🐻 可扩展性:该库支持与scikit-learn和Pandas等常见的Python库集成,可以方便地与其他的机器学习算法和工具进行组合和使用。

🐻 灵活性:imbalanced-learn提供了多种参数调整和定制化的选项,用户可以根据不同的应用场景和需求进行调整和定制化。

3.1 安装

imbalanced-learn的安装非常简单,用户可以通过pip或conda等包管理工具进行安装。例如,使用pip安装imbalanced-learn的命令如下:

pip install imbalanced-learn

3.2 过采样

  1. 随机过采样:随机在少数类别样本中选择一些样本,通过复制所选择的样本方式补充少数类别样本数量。
  2. 合成少数类过采样(SMOTE): 1. 计算每个样本的 K 个近邻
  1. 对每个少数样本,从其 K 近邻中随机选择若干个样本
  2. 在少数样本和选择的近邻样本之间的连线上选择一点作为新的样本
  3. 将新样本添加到少数类样本集中

示例代码💯:

from sklearn.datasets import make_classification
import matplotlib.pyplot as plt
from collections import Counter
# 随机过采样
def test01(X, y):
    from imblearn.over_sampling import RandomOverSampler
    # 构建随机过采样对象
    ros = RandomOverSampler(random_state=0)
    # 对X中的少数样本进行随机过采样,返回类别平衡的数据集
    X_resampled, y_resampled = ros.fit_resample(X, y)
    # 查看新数据集类别比例
    print(Counter(y_resampled))
    # 数据可视化
    plt.title("过采样数据集")
    plt.scatter(X_resampled[:, 0], X_resampled[:, 1], c=y_resampled)
    plt.show()
# 合成少数过采样
def test02(X, y):
    from imblearn.over_sampling import SMOTE
    # 构建 SMOTE 对象
    ros = SMOTE(random_state=0)
    # 对X中的少数样本进行合成少数过采样,返回类别平衡的数据集
    X_resampled, y_resampled = ros.fit_resample(X, y)
    # 查看新数据集类别比例
    print(Counter(y_resampled))
    # 数据可视化
    plt.title("过采样数据集")
    plt.scatter(X_resampled[:, 0], X_resampled[:, 1], c=y_resampled)
    plt.show()
if __name__ == "__main__":
    # 构建数据集
    X, y = make_classification(n_samples=5000,
                               n_features=2,
                               n_informative=2,
                               n_redundant=0,
                               n_repeated=0,
                               n_redundant 特征
                               n_classes=3,
                               n_clusters_per_class=1, 
                               weights=[0.01, 0.05, 0.94],
                               random_state=0)
    # 统计各类别样本数量
    print(Counter(y))
    # 数据可视化
    plt.title("类别不平衡数据集")
    plt.scatter(X[:, 0], X[:, 1], c=y)
    plt.show()
    # 随机过采样
    test01(X, y)
    # 合成少数过采样
    test02(X, y)

3.3 欠采样

随机欠采样: 随机减少多数类别样本数量, 达到样本数量平衡.

示例代码💯:

from sklearn.datasets import make_classification
import matplotlib.pyplot as plt
from collections import Counter
def test(X, y):
    from imblearn.under_sampling import RandomUnderSampler
    # 构建随机欠采样对象
    ros = RandomUnderSampler(random_state=0)
    # 对X中的少数样本进行随机过采样,返回类别平衡的数据集
    X_resampled, y_resampled = ros.fit_resample(X, y)
    # 查看新数据集类别比例
    print(Counter(y_resampled))
    # 数据可视化
    plt.title("过采样数据集")
    plt.scatter(X_resampled[:, 0], X_resampled[:, 1], c=y_resampled)
    plt.show()
if __name__ == "__main__":
    # 构建数据集
    X, y = make_classification(n_samples=5000,
                               n_features=2,
                               n_informative=2,
                               n_redundant=0,
                               n_repeated=0,
                               n_redundant 特征
                               n_classes=3,
                               n_clusters_per_class=1, 
                               weights=[0.01, 0.05, 0.94],
                               random_state=0)
    # 统计各类别样本数量
    print(Counter(y))
    # 数据可视化
    plt.title("类别不平衡数据集")
    plt.scatter(X[:, 0], X[:, 1], c=y)
    plt.show()
    # 随机欠采样
    test(X, y)


相关实践学习
使用ROS创建VPC和VSwitch
本场景主要介绍如何利用阿里云资源编排服务,定义资源编排模板,实现自动化创建阿里云专有网络和交换机。
阿里云资源编排ROS使用教程
资源编排(Resource Orchestration)是一种简单易用的云计算资源管理和自动化运维服务。用户通过模板描述多个云计算资源的依赖关系、配置等,并自动完成所有资源的创建和配置,以达到自动化部署、运维等目的。编排模板同时也是一种标准化的资源和应用交付方式,并且可以随时编辑修改,使基础设施即代码(Infrastructure as Code)成为可能。 产品详情:https://www.aliyun.com/product/ros/
相关文章
|
3月前
|
机器学习/深度学习 数据可视化 搜索推荐
Python在社交媒体分析中扮演关键角色,借助Pandas、NumPy、Matplotlib等工具处理、可视化数据及进行机器学习。
【7月更文挑战第5天】Python在社交媒体分析中扮演关键角色,借助Pandas、NumPy、Matplotlib等工具处理、可视化数据及进行机器学习。流程包括数据获取、预处理、探索、模型选择、评估与优化,以及结果可视化。示例展示了用户行为、话题趋势和用户画像分析。Python的丰富生态使得社交媒体洞察变得高效。通过学习和实践,可以提升社交媒体分析能力。
72 1
|
3月前
|
机器学习/深度学习 人工智能 专有云
人工智能平台PAI使用问题之怎么将DLC的数据写入到另一个阿里云主账号的OSS中
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
29天前
|
机器学习/深度学习 数据采集 监控
探索机器学习:从数据到决策
【9月更文挑战第18天】在这篇文章中,我们将一起踏上一段激动人心的旅程,穿越机器学习的世界。我们将探讨如何通过收集和处理数据,利用算法的力量来预测未来的趋势,并做出更加明智的决策。无论你是初学者还是有经验的开发者,这篇文章都将为你提供新的视角和思考方式。
|
1月前
|
机器学习/深度学习 数据采集 算法
利用未标记数据的半监督学习在模型训练中的效果评估
本文将介绍三种适用于不同类型数据和任务的半监督学习方法。我们还将在一个实际数据集上评估这些方法的性能,并与仅使用标记数据的基准进行比较。
91 8
|
2月前
|
监控 数据安全/隐私保护 异构计算
借助PAI-EAS一键部署ChatGLM,并应用LangChain集成外部数据
【8月更文挑战第8天】借助PAI-EAS一键部署ChatGLM,并应用LangChain集成外部数据
70 1
|
2月前
|
数据采集 机器学习/深度学习 算法
"揭秘数据质量自动化的秘密武器:机器学习模型如何精准捕捉数据中的‘隐形陷阱’,让你的数据分析无懈可击?"
【8月更文挑战第20天】随着大数据成为核心资源,数据质量直接影响机器学习模型的准确性和效果。传统的人工审查方法效率低且易错。本文介绍如何运用机器学习自动化评估数据质量,解决缺失值、异常值等问题,提升模型训练效率和预测准确性。通过Python和scikit-learn示例展示了异常值检测的过程,最后强调在自动化评估的同时结合人工审查的重要性。
69 2
|
2月前
|
机器学习/深度学习 JSON API
【Python奇迹】FastAPI框架大显神通:一键部署机器学习模型,让数据预测飞跃至Web舞台,震撼开启智能服务新纪元!
【8月更文挑战第16天】在数据驱动的时代,高效部署机器学习模型至关重要。FastAPI凭借其高性能与灵活性,成为搭建模型API的理想选择。本文详述了从环境准备、模型训练到使用FastAPI部署的全过程。首先,确保安装了Python及相关库(fastapi、uvicorn、scikit-learn)。接着,以线性回归为例,构建了一个预测房价的模型。通过定义FastAPI端点,实现了基于房屋大小预测价格的功能,并介绍了如何运行服务器及测试API。最终,用户可通过HTTP请求获取预测结果,极大地提升了模型的实用性和集成性。
179 1
|
2月前
|
缓存 开发者 测试技术
跨平台应用开发必备秘籍:运用 Uno Platform 打造高性能与优雅设计兼备的多平台应用,全面解析从代码共享到最佳实践的每一个细节
【8月更文挑战第31天】Uno Platform 是一种强大的工具,允许开发者使用 C# 和 XAML 构建跨平台应用。本文探讨了 Uno Platform 中实现跨平台应用的最佳实践,包括代码共享、平台特定功能、性能优化及测试等方面。通过共享代码、采用 MVVM 模式、使用条件编译指令以及优化性能,开发者可以高效构建高质量应用。Uno Platform 支持多种测试方法,确保应用在各平台上的稳定性和可靠性。这使得 Uno Platform 成为个人项目和企业应用的理想选择。
44 0
|
2月前
|
机器学习/深度学习 缓存 TensorFlow
TensorFlow 数据管道优化超重要!掌握这些关键技巧,大幅提升模型训练效率!
【8月更文挑战第31天】在机器学习领域,高效的数据处理对构建优秀模型至关重要。TensorFlow作为深度学习框架,其数据管道优化能显著提升模型训练效率。数据管道如同模型生命线,负责将原始数据转化为可理解形式。低效的数据管道会限制模型性能,即便模型架构先进。优化方法包括:合理利用数据加载与预处理功能,使用`tf.data.Dataset` API并行读取文件;使用`tf.image`进行图像数据增强;缓存数据避免重复读取,使用`cache`和`prefetch`方法提高效率。通过这些方法,可以大幅提升数据管道效率,加快模型训练速度。
37 0

热门文章

最新文章