IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 利用采样方法解决数据样本不平衡问题 -> 正文阅读

[人工智能]利用采样方法解决数据样本不平衡问题

一. 什么是样本不平衡

对于一个二分类问题,若两个类别的样本数目相差很大,那么在模型训练时会出现很严重的问题。

举一个简单的例子:对一个图片集分类,其中狗有990张,猫有10张,像这样属于某一分类的数据量与其他分类的数据量相比很少的情况就称为不平衡。这时在模型里只需要把所有输入的样本都预测分类为狗就可获得99%的准确率,而这样训练得到的分类器却是没有用(价值)的,因为该模型无法预测分类出为猫的图片,即分类器预测分类失败。

二. 对样本不平衡的处理

为了解决类别不平衡问题,我们可以采取以下方法:

  1. 对不同分类的数据赋予权重,即选择调整阈值,使模型适应较少的类别的预测分类。
  2. 选择合适的评估指标,比如ROC或F1值,而不是准确度(accuracy)。
  3. 利用采样方法,即欠采样或过采样来处理。

三.欠采样和过采样原理与示例

通过采样来调整数据的不平衡的问题具体分为欠采样和过采样两种情况:
欠采样就是从多数类的样本中删除部分样本;而过采样则是在少数类的样本中添加部分样本,如随机重复正比例的数据。

这里使用一个Python上处理数据不平衡的工具库:imblearn,作示例。

from collections import Counter
from sklearn.datasets import make_classification
from imblearn.over_sampling import RandomOverSampler

X, y = make_classification(n_classes=2, class_sep=2,
weights=[0.1, 0.9], n_informative=3, n_redundant=1, flip_y=0,
n_features=20, n_clusters_per_class=1, n_samples=1000, random_state=10)
print('Original dataset shape %s' % Counter(y))

ros = RandomOverSampler(random_state=42)
X_res, y_res = ros.fit_resample(X, y)
print('Resampled dataset shape %s' % Counter(y_res))

输出结果

Original dataset shape Counter({1: 900, 0: 100})
Resampled dataset shape Counter({0: 900, 1: 900})

虽然使用采样方法(过采样和欠采样)一般情况下可以提升模型的泛化能力,但是有一定的过拟合的风险。

因为过采样是采取随机的简单复制样本的方式来增加少数类的样本,会容易导致模型出现过拟合的问题,即削弱了模型的泛化能力。

但是如果欠采样丢弃大量的数据,则也会和过采样一样会存在过拟合的情况。

所以为了降低过拟合的风险,我们可以进行数据合成(Synthetic Minority Oversampling Technique,SMOTE)。

四.数据合成

数据合成:即合成少数类样本的过采样技术,它是基于随机过采样算法的一种改进方案,SMOTE算法的基本思想是对少数类样本分析并依据少数类样本进行人工合成新样本增加到数据集中。使用SMOTE 进行过度采样,示例如下。

from collections import Counter
from sklearn.datasets import make_classification
from imblearn.over_sampling import SMOTE 

X, y = make_classification(n_classes=2, class_sep=2,
weights=[0.1, 0.9], n_informative=3, n_redundant=1, flip_y=0,
n_features=20, n_clusters_per_class=1, n_samples=1000, random_state=10)
print('Original dataset shape %s' % Counter(y))

sm = SMOTE(random_state=42)
X_res, y_res = sm.fit_resample(X, y)
print('Resampled dataset shape %s' % Counter(y_res))

输出结果

Original dataset shape Counter({1: 900, 0: 100})
Resampled dataset shape Counter({0: 900, 1: 900})

SMOTE算法的变体–SVM-SMOTE的示例

#使用SVM-SMOTE进行过度采样
from collections import Counter
from sklearn.datasets import make_classification
from imblearn.over_sampling import SVMSMOTE
 
X, y = make_classification(n_classes=2, class_sep=2,
weights=[0.1, 0.9], n_informative=3, n_redundant=1, flip_y=0,
n_features=20, n_clusters_per_class=1, n_samples=1000, random_state=10)
print('Original dataset shape %s' % Counter(y))

sm = SVMSMOTE(random_state=42)
X_res, y_res = sm.fit_resample(X, y)
print('Resampled dataset shape %s' % Counter(y_res))

输出结果

Original dataset shape Counter({1: 900, 0: 100})
Resampled dataset shape Counter({0: 900, 1: 900})

想了解imbalanced的的更多信息的,请移步:https://imbalanced-learn.org/stable/

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-05-10 11:54:11  更:2022-05-10 11:57:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 6:45:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码