解决数据不平衡

通过 SMOTE 及其变体过采样处理不平衡数据 在这篇文章中,我将解释使用 SMOTE、SVM SMOTE、BorderlineSMOTE、K-Means SMOTE 和 SMOTE-NC 进行过采样/上采样。我将通过一个实际示例进行解释,在该示例中我们应用这些方法来解决不平衡的机器学习问题,以了解它们的影响。 阅读详情

解决数据不平衡问题方案

机器学习中不平衡数据集的工具箱

软件包:imbalanced-learn0.3.2
介绍文档:https://pypi.python.org/pypi/imbalanced-learn/
API文档:http://contrib.scikit-learn.org/imbalanced-learn/stable/
详细API:http://contrib.scikit-learn.org/imbalanced-learn/stable/api.html

包介绍

imbalanced-learn是一个python软件包,提供了一些数据集中常用的重新采样技术,显示出强烈的不平衡性。它与scikit-learn兼容,是scikit-learn-contrib 项目的一部分。
测试imbalanced-learn是在Python 2.7和Python 3.5以及3.6下工作的。依赖关系需求基于最后的scikit-learn版本:
SciPy的(> = 0.13.3)
numpy的(> = 1.8.2)
scikit学习(> = 0.19.0)
另外,为了运行这些例子,你需要matplotlib(> = 2.0.0)。
不平衡学习目前在PyPi的存储库上可用,你可以通过点安装它:

包安装

pip install -U imbalanced-learn
import imblearn as ll
该软件包也在Anaconda Cloud平台发布
更新sklearn到0.19以上
from imblearn.over_sampling import SMOTE
I’m using Jupyter Notebooks but because I have Windows I cannot use the terminal that came with Jupyter. I have anaconda so on the anaconda prompt I wrote:
pip install imblearn
Afterwards, I upgraded sklearn (because I’ve got an error of that):
pip install --upgrade sklearn
The upgrade and the install ran well in Anaconda prompt.

需求

​ 大多数分类算法只能在每个类的样本数大致相同的情况下才能达到最佳效果。高度倾斜的数据集,其中少数人数量严重超过一个或多个类,已被证明是一个挑战,同时变得越来越普遍。
​ 解决这个问题的一种方法是对数据集进行重新采样,以抵消这种不平衡,希望达到一个更为稳健和公平的决策边界。

重新抽样技术分为两类:
1.对大多数class进行抽样采样。
2.过度抽样少数class类别。
3.结合过度采样和欠采样。
4.创建合奏平衡套。
以下列出了当前在这个模块中实现的方法。

过采样-----Over-sampling

将多的类别数据减少 , 随机少数过度抽样与替换
SMOTE - 合成少数过采样技术[8]
​ bSMOTE(1&2) - 类型1和2的边界线SMOTE [9]
​ SVM SMOTE - 支持载体SMOTE [10]
​ ADASYN - 适应不平衡学习的自适应综合抽样方法[15]
过采样然后是欠采样Over-sampling followed by under-sampling
​ SMOTE + Tomek
​ SMOTE + ENN
Ensemble sampling合奏采样
​ EasyEnsemble
​ BalanceCascade
在sphinx-gallery中提供了不同的算法。

  • 过采样参考代码
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=5000, 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 collections import Counter
print(sorted(Counter(y).items()))
from imblearn.over_sampling import RandomOverSampler,SMOTE
# ros = RandomOverSampler(random_state=0)
ros = SMOTE()
X_resampled, y_resampled = ros.fit_sample(X, y)
print(sorted(Counter(y_resampled).items()))
# [(0, 4674), (1, 4674), (2, 4674)]

from sklearn.svm import LinearSVC
clf = LinearSVC()
clf.fit(X_resampled, y_resampled) # doctest : +ELLIPSIS

print(clf.score(X_resampled, y_resampled))

欠采样Under-sampling

​ 随机抽样替换多数
​ 提取大多数少数Tomek链接[1]
​ 采用群集质心进行欠采样
​ NearMiss-(1&2&3)[2]
​ Condensend Nearest Neighbor [3]
​ 单面选择[4]
​ Neighboorhood清理规则[5]
​ 编辑最近的邻居[6]
​ 实例硬度阈值[7]
​ 重复编辑最近的邻居[14]
​ AllKNN [14]

  • 欠采样参考代码
from collections import Counter
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=5000, 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)
print(sorted(Counter(y).items()))
# [(0, 64), (1, 262), (2, 4674)]
from imblearn.under_sampling import ClusterCentroids
cc = ClusterCentroids(random_state=0)
X_resampled, y_resampled = cc.fit_sample(X, y)
print(sorted(Counter(y_resampled).items()))
# [(0, 64), (1, 64), (2, 64)]
参考文献:
[1]	:I. Tomek,“CNN的两种修改”,In Systems,Man,and Cyber​​netics,IEEE Transactions on,6,pp 769-772,2010。
[2]	:I. Mani,I. Zhang。“kNN不平衡数据分布的方法:涉及信息提取的案例研究”,2003年在不平衡数据集学习研讨会论文集。
[3]	:体育哈特,“凝聚最近邻规则,”在信息理论,IEEE交易,第一卷。14(3),第515-516页,1968。
[4]	:M. Kubat,S. Matwin,“解决不平衡训练集的诅咒:单方面的选择”,ICML,vol。97,pp.179-186,1997。
[5]	:J. Laurikkala,“通过平衡阶级分配来改善困难小班的识别”,Springer Berlin Heidelberg,2001年。
[6]	:D. Wilson,“使用编辑数据的最近邻规则的渐近性质”,在IEEE Transactions on Systems,Man,and Cyber​​netrics,vol。2(3),408-421页,1972。
[7]	:D. Smith,Michael R.,Tony Martinez和Christophe Giraud-Carrier。“数据复杂性的实例级分析”机器学习95.2(2014):225-256。
[8]	:NV Chawla,KW Bowyer,LOHall,WP Kegelmeyer,“SMOTE:synthetic minority over-sampling technique,”Journal of artificial intelligence research,321-357,2002。
[9]	:H. Han,W。Wen-Yuan,M. Bing-Huan,“边界线SMOTE:一种新的过采样方法在不平衡数据集学习”,智能计算进展,878-887,2005。
[10]:HM Nguyen,EW Cooper,K. Kamei,“不平衡数据分类的边界过采样”,国际知识工程和软数据范例,3(1),pp.4-21,2001。
[11]:G. Batista,RC Prati,MC Monard。“一个平衡机器学习训练数据的几种方法的行为的研究,”ACM Sigkdd探索通讯6(1),20-29,2004。
[12]:G.Batista,B.Bazzan,M.Monard,“平衡关键词自动标注的训练数据:一个案例研究”,WOB,10-18,2003。
[13](1,2):XY刘,吴J.和ZH周,“探索欠了类不平衡学习,”在系统,人在IEEE Transactions与控制,B部分(控制论),第二卷。39,没有。2,第539-550页,2009年4月。
[14](1,2):I.托梅克,“在编辑的最近邻规则的实验,”系统,人,和控制论,第一卷IEEE交易。6(6),第448-452页,1976年6月。
[15]:他,海博,杨白,爱德华加西亚,李树涛。“ADASYN:自适应合成采样方法的不平衡学习,”在IEEE国际神经网络联合会议(IEEE世界大会的计算智能),页1322-1328,2008年。

不平衡学习imbalanced-learn API

  • imblearn.under_sampling欠采样方法
    在imblearn.under_sampling提供的方法下的试样的数据集。

  • 原型生成

该imblearn.under_sampling.prototype_generation子模块包含了为了平衡数据集生成新样本的方法。

under_sampling.CondensedNearestNeighbour([…])基于压缩最近邻法进行欠采样的类。
under_sampling.EditedNearestNeighbours([…])根据编辑的最近邻方法执行欠采样的类。
under_sampling.RepeatedEditedNearestNeighbours([…])根据重复编辑的最近邻居方法执行欠采样的类。
under_sampling.AllKNN([比例,…])根据AllKNN方法执行欠采样的类。
under_sampling.InstanceHardnessThreshold([…])根据实例硬度阈值执行欠采样的类。
under_sampling.NearMiss([比例,…])根据NearMiss方法执行欠采样的类。
under_sampling.NeighbourhoodCleaningRule([…])根据邻居清理规则执行欠采样的类。
under_sampling.OneSidedSelection([比例,…])基于片面选择方法执行欠采样的类。
under_sampling.RandomUnderSampler([比例,…])类执行随机欠采样。
under_sampling.TomekLinks([比例,…])通过删除Tomek的链接来执行欠采样的类。

imblearn.over_sampling:过度采样方法

在imblearn.over_sampling提供了一组方法来执行过采样的。

over_sampling.ADASYN([ratio,random_state,…])使用ADASYN执行过采样。
over_sampling.RandomOverSampler([比例,…])类执行随机过采样。
over_sampling.SMOTE([ratio,random_state,…])使用SMOTE执行过采样的类。

imblearn.combine:结合了过度采样和欠采样方法

combine.SMOTEENN([ratio,random_state,…])使用SMOTE执行过采样并使用ENN进行清洁的类。
combine.SMOTETomek([ratio,random_state,…])类使用SMOTE执行过采样并使用Tomek链接进行清理。
  • imblearn.ensemble:集成方法

该**imblearn.ensemble模块包括生成组合在集合内的欠采样子集的方法。

ensemble.BalanceCascade([比例,…])通过使用估计器迭代地对不平衡数据集进行欠采样来创建平衡集的集合。
ensemble.BalancedBaggingClassifier([…])带有额外平衡的装袋分类器。
ensemble.EasyEnsemble([比例,…])通过迭代应用随机欠采样来创建集合集。
  • imblearn.pipeline:管道

该imblearn.pipeline模块实现实用程序来构建一个复合估计器,作为变换链,样本和估计器。

pipeline.Pipeline(步骤[,内存])使用最终估计器进行变换和重新采样的流水线。
pipeline.make_pipeline(*脚步)从给定的估计者构建管道。
  • imblearn.metrics:指标

该imblearn.metrics模块包括分数函数,性能指标和成对指标和距离计算。

metrics.classification_report_imbalanced(…)根据与不平衡相关的指标构建分类报告
metrics.sensitivity_specificity_support(…)计算每个班级的敏感度,特异度和支持度
metrics.sensitivity_score(y_true,y_pred [,…])计算灵敏度
metrics.specificity_score(y_true,y_pred [,…])计算特异性
metrics.geometric_mean_score(y_true,y_pred)计算几何平均值
metrics.make_index_balanced_accuracy([…])使用索引平衡准确性平衡任何得分功能
  • imblearn.datasets:数据集

在imblearn.datasets提供的方法来产生不平衡数据。

datasets.make_imbalance(X,y,比率[,…])将数据集转换为特定比例的不平衡数据集。
datasets.fetch_datasets([data_home,…])从Zenodo加载基准数据集,如果需要的话下载。
  • imblearn.utils:公用事业

    该imblearn.utils模块包含各种实用程序。

    utils.estimator_checks.check_estimator
    utils.check_neighbors_object(nn_name,nn_object)检查对象是一致的是一个NN。
    utils.check_ratio(ratio,y,sampling_type,…)采样器的比率验证。
    utils.hash_X_y(X,y [,n_samples])计算输入数组的哈希值。
解决不平衡数据集问题 解决不平衡数据集问题 数据不平衡通常反映数据集中类的不均匀分布。例如,在信用卡欺诈检测数据集中,大多数信用卡交易都不是欺诈,只有很少的类是欺诈交易。这使得我们在欺诈类和非欺诈类之间的比例约为50:1。 迄今为止 , 解决不平衡分类问题的策略可以分 为两大类 .一类是从训练集入手 , 通过改变训练集样本分布 ,降低不平衡程度 .另一类是从学习算法入手 , 根据算法在解决不平衡问题时的缺陷 , 适当地... 阅读详情

相关推荐

数据不平衡问题及解决方案

1.数据不平衡 1.1 数据不平衡介绍 数据不平衡,又称样本比例失衡。对于二分类问题,在正常情况下,正负样本的比例应该是较为接近的,很多现有的分类模型也正是基于这一假设。但是在某些特定的场景下,正负样本的比例却可能相差悬殊,如社交网络中的大V判断、电商领域的恶意差评检测、金融领域的欺诈用户判断、风控领域的异常行为检测、医疗领域的肿瘤诊断 1.2 数据不平衡的常见形式及特点 根据数据量的多少和数据不平衡程度,可以将数据不平衡问题分为以几类: (1)大数据+轻微数据不平衡(正负样本数量相差在一个数量级内) 如豆

u013602059的专栏 3301

使用Imblearn对不平衡数据进行随机重采样

我们希望为模型准备或分析的数据是完美的。但是数据可能有缺失的值、异常值和复杂的数据类型。我们需要做一些预处理来解决这些问题。但是有时我们在分类任务中会遇到不平衡的数据。因为在我们的生活中,数据不可能是平衡的,这种不平衡的情况非常常见而且需要进行修正。 例如,有一个二进制分类任务,数据中有100条记录(行),其中90行标记为1,其余10行标记为0。 有了这些数据,我们的模型就会有偏差。预测将由多数类主导。 为了防止这种情况的发生,我们可以使用现成的imblearn。 imblearn是一个开源的由麻省理工.

deephub 9226

V-REP(Cooprliesim EDU)自学笔记 实现UR5机械臂末端按轨迹移动

V-REP(Cooprliesim EDU)自学笔记 实现UR5机械臂末端按轨迹移动

xu_white的博客 7583

TowardsDataScience 博客中文翻译 2020(二百零二)

在迈向数据科学的一篇文章中,Haebichan Jung 讨论了我们通常如何高估硬技能的作用,例如在求职面试过程中的数据科学项目,并阐述了真正重要的“软”技能。然而,众所周知,找到一份工作是一件(非常重要的)事情,而在工作中茁壮成长是完全不同的,有时要困难得多。在科学领域,很多时候,一个好的研究问题比它的答案更重要。答案可能(而且通常)是错误的——而一个问题,即使看起来很天真,有时也要等上几年才能得到一个好的或正确的答案。“你见过数据科学家被解雇吗?如果是,为什么?。

龙哥盟 3323

STM32/GD32以太网开发避坑指南:ZLG EPORTM模块调试实战(含YT8512H配置)

本文针对STM32/GD32平台使用ZLG EPORTM模块进行以太网开发时遇到的常见问题,提供了详细的调试实战指南。重点解析了从传统PHY驱动迁移到YT8512H芯片的核心步骤,包括软件复位延时、RMII时钟配置等关键陷阱,并分享了LWIP集成与稳定性验证的实用经验,帮助开发者高效避坑。

rice5的博客 1161

如何让 RTX 5090 开启 PCIE P2P 以加速多卡通信

RTX 5090 基于新的 Blackwell 架构。NVIDIA 出于对某些主板兼容性(如 IOMMU、Resizable BAR 策略)的保守考虑,**屏蔽了 5090 的 BAR1 P2P 功能**。 我们需要通过 Patch 驱动源码,强制开启这一隐藏功能。 开启 P2P 后,PyTorch 的集合通信算子(Multi-GPU 训练的核心)延迟显著降低,**All-Reduce 甚至降低了 60% 以上**。

Hi20240217的博客 1733

TowardsDataScience 博客中文翻译 2021(六百零九)

MLflow 是一个与框架无关的机器学习工具,可以覆盖整个 ML 过程,从数据探索到模型开发、调整和部署。MLflow Python API 非常通用,允许开发人员为不同 ML 框架和后端完全集成 MLflow。插件是 MLflow 提供的集成之一。插件允许用户拥有额外的 MLflow 兼容组件,例如,可以保存特定服务的人工制品(例如,在专用数据库上)。此外,可以开发插件来接受第三方认证,或者将任何模型部署到定制平台。你可以找到 ml flow 部署插件的列表。

龙哥盟 3310

解决Calibre中license的错误

本次解决了Calibre在Cadence 617 virtuoso版本中运行不了的错误,在遇到问题的时候,我也跟你们一样,首先是上网查询为什么运行不了呢?明明我安装了之后里面有Calibre的,我当时也是这样的疑惑,一点Calibre运行LVS的时候,一片空白,然后就出现了license的错误,后来点点点,看看看,搜搜搜,最终解决了这个问题。虚拟机是VMware16版本,cadence617,Calibre是2015版本。旨在记录遇到的实际问题。

yytu231的博客 1万+

python imblearn toolbox 解决数据不平衡问题(四)——联合采样、集成采样、其它细节

一、Combination of over- and under-sampling 主要是解决SMOTE算法中生成噪声样本,解决方法为cleaning the space resulting from over-sampling。 主要思路是先使用SMOTE进行上采样,再通过Tomek’s link或者edited nearest-neighbours方法去获得一个 cleaner space.对...

mathlxj的博客 6114

从零搭建企业级AI网关:基于LiteLLM的安全防护体系设计

本文详细介绍了如何从零搭建企业级AI网关,基于LiteLLM构建全面的安全防护体系。内容涵盖分层防御架构、敏感数据处理、合规性配置与审计追踪,以及生产环境部署策略,助力企业安全高效地集成LLM技术,确保数据安全和合规性。

qq_27496129的博客 1291

python基于语音识别的智能垃圾分类系统

大家好我是蓝天,混迹在java圈的辛苦码农。今天要和大家聊的是一款《python基于语音识别的智能垃圾分类系统》毕业设计项目。项目源码以及部署相关请联系蓝天,文末附上联系信息。🎈作者:蓝天🎈🎈个人简介:精通 Java、Python、C#、C、C++ 等编程语言,同时对微信小程序、Php 和 Android 等技术也能熟练掌握,可为大家提供全面的技术支持与交流。我拥有丰富的成品 Java、Python、C# 毕业设计项目经验,能够为学生提供各类个性化的开题框架及实际运作方案。🎈。

Chujun123528的博客 660

如何解决数据不平衡问题?

目录 一、什么是类别不平衡问题 二、如何解决不平衡问题 1. 从数据角度 2.从评价指标角度 3.从算法角度 三、目标检测中的不平衡问题的进展 在机器学习的实践中,我们通常会遇到实际数据中正负样本比例不平衡的情况,也叫数据倾斜。对于数据倾斜的情况,如果选取的算法不合适,或者评价指标不合适,那么对于实际应用线上时效果往往会不尽人意,所以如何解决数据不平衡问题是实际生产中非常常见且重要的...

weixin_36670529的博客 6874

深度学习在移动开发中的应用:实时姿态估计实战

我们将使用TensorFlow Lite框架,结合专为移动端优化的MoveNet模型,实现一个能够在主流Android设备上达到30FPS的多人姿态跟踪解决方案,并深入探讨其优化技巧和实际应用场景。特别是3D姿态估计、多人长期跟踪等前沿技术的发展,将进一步推动移动端姿态估计技术的应用深度和广度。在下一篇文章中,我们将探讨深度学习在移动端的另一个创新应用:实时手势识别,包括如何在资源受限的环境中实现复杂手势的实时识别,以及这项技术在AR/VR交互、智能家居控制等场景中的应用。第四部分:典型应用场景实现。

Programming Talk 325

如何解决数据不平衡问题

1.前言 这几年来,机器学习和数据挖掘非常火热,它们逐渐为世界带来实际价值。与此同时,越来越多的机器学习算法从学术界走向工业界,而在这个过程中会有很多困难。数据不平衡问题虽然不是最难的,但绝对是最重要的问题之一。 2. 数据不平衡 在学术研究与教学中,很多算法都有一个基本假设,那就是数据分布是均匀的。当我们把这些算法直接应用于实际数据时,大多数情况下都无法取得理想的结果。因为实际数据往往...

hxcaifly的博客 1万+

项目管理知识体系(PMBOK)中的质量规划详解

你是否遇到过这些场景?软件上线后用户投诉“功能漏洞多”,团队连夜返工;装修完的房子墙面开裂,施工方和业主互相推诿;新研发的手机电池续航不达标,被迫延迟发布。这些问题的根源,往往是项目启动时没有做好质量规划。本文聚焦PMBOK中“质量规划”(Plan Quality Management)过程,覆盖其核心概念、操作步骤、工具技术与实战应用,适用于IT、建筑、制造等各类项目场景。

项目管理的博客 1118

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

数据不平衡解决方法

某种样本数量远小于另一种样本数量:数据采样方法(随机过/欠采样,SMOTE,OSS),数据增强。

爱远方的博客 639

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

如何解决机器学习中数据不平衡问题

转载自:如何解决机器学习中数据不平衡问题 作者:BYR_jiandong 主页:https://blog.youkuaiyun.com/lujiandong1 这几年来,机器学习和数据挖掘非常火热,它们逐渐为世界带来实际价值。与此同时,越来越多的机器学习算法从学术界走向工业界,而在这个过程中会有很多困难。数据不平衡问题虽然不是最难的,但绝对是最重要的问题之一。 一、数据不平衡 在学术研究与教学中,

积一时之步,臻千里之遥程 999

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

机器学习数据不平衡问题及其解决方法

数据不平衡是机器学习任务中的一个常见问题。真实世界中的分类任务中,各个类别的样本数量往往不是完全平衡的,某一或某些类别的样本数量远少于其他类别的情况经常发生,我们称这些样本数量较少的类别为少数类,与之相对应的数量较多的类别则被称为多数类。在很多存在数据不平衡问题的任务中,我们往往更关注机器学习模型在少数类上的表现,一个典型的例子是制造业等领域的缺陷产品检测任务,在这个任务中,我们希望使用机器学习方...

weixin_37801695的博客 1万+

如何解决机器学习中的数据不平衡问题

这几年来,机器学习和数据挖掘非常火热,它们逐渐为世界带来实际价值。与此同时,越来越多的机器学习算法从学术界走向工业界,而在这个过程中会有很多困难。数据不平衡问题虽然不是最难的,但绝对是最重要的问题之一。 一、数据不平衡 在学术研究与教学中,很多算法都有一个基本假设,那就是数据分布是均匀的。当我们把这些算法直接应用于实际数据时,大多数情况下都无法取得理想的结果。因为实际数据往往分布得很不

1万+

什么是数据不平衡问题,应该如何解决

数据不平衡又称样本比例失衡,比如二分类问题,如果标签为1的样本占总数的99%,标签为0的样本占比1%则会导致判断「失误严重」,准确率虚高。 常见的解决不平衡问题的方法如下。 「数据采样」 数据采样分为上采样和下采样,上采样是将少量的数据通过重复复制使得各类别比例均衡,不过很容易导致过拟合问题,所以需要在新生成的数据中加入随机扰动。 下采样则相反,下采样是从多数类别中筛选出一部分从而使得各类别数据比例维持在正常水平,但容易丢失比较重要的信息,所以应该多次随机下采样。 「数据合成」是利用已有样本的特征

我们都是码农 7657

【机器学习】解决数据不平衡问题

在机器学习的实践中,我们通常会遇到实际数据中正负样本比例不平衡的情况,也叫数据倾斜。对于数据倾斜的情况,如果选取的算法不合适,或者评价指标不合适,那么对于实际应用线上时效果往往会不尽人意,所以如何解决数据不平衡问题是实际生产中非常常见且重要的问题。 什么是类别不平衡问题   我们拿到一份数据时,如果是二分类问题,通常会判断一下正负样本的比例,在机器学习中,通...

weixin_30343157的博客 451

数据不平衡问题及解决方法

对于一些二分类问题或者多分类问题,部分类别数据相较于其它类别数据而言是要小得多的,这种现象就是数据不平衡问题。这种数据分布严重不平衡的情况下,模型将具有严重的倾向性,倾向于数据样本的多的类别,因为模型每次猜样本多对应的类别的对的次数多。简单来说就是少样本数据全部保留,对多样本数据按照小样本的数量及比例采样量级差不是那么大的多样本数据,比如说正样本10个,负样本1000个,二者相差两个量级。解决数据不平衡的方法比较多,这里大致罗列一下,具体原理可以针对每种方式去详细搜索对应的文章介绍,这里不做过多的解释。

uncle_ll的博客 1760
上一篇: GBDT&XGBoost&LightGBM的区别
下一篇: 推荐系统-Ctr点击率预估理论基础及项目实战
CoderBoom
博客等级 码龄8年 62粉丝 75原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值