如何处理数据不均衡问题(分类问题)

本文作者用python代码示例解释了3种处理不平衡数据集的可选方法,包括数据层面上的2种重采样数据集方法和算法层面上的1个集成分类器方法。

分类是机器学习最常见的问题之一,处理它的最佳方法是从分析和探索数据集开始,即从探索式数据分析(Exploratory Data Analysis, EDA)开始。除了生成尽可能多的数据见解和信息,它还用于查找数据集中可能存在的任何问题。在分析用于分类的数据集时,类别不平衡是常见问题之一。

什么是数据不平衡(类别不平衡)?

数据不平衡通常反映了数据集中类别的不均匀分布。例如,在信用卡欺诈检测数据集中,大多数信用卡交易类型都不是欺诈,仅有很少一部分类型是欺诈交易,如此以来,非欺诈交易和欺诈交易之间的比率达到50:1。本文中,我将使用来自Kaggle的信用卡欺诈交易数据数据集,你可以从这里下载。

这里

https://www.kaggle.com/mlg-ulb/creditcardfraud

首先,我们先绘制类分布图,查看不平衡情况。

如你所见,非欺诈交易类型数据数量远远超过欺诈交易类型。如果我们在不解决这个类别不平衡问题的情况下训练了一个二分类模型,那么这个模型完全是有偏差的,稍后我还会向你演示它影响特征相关性的过程并解释其中的原因。

现在,我们来介绍一些解决类别不平衡问题的技巧,你可以在这里找到完整代码的notebook。

这里

https://github.com/wmlba/innovate2019/blob/master/Credit_Card_Fraud_Detection.ipynb

一、 重采样(过采样和欠采样)

这听起来很直接。欠采样就是一个随机删除一部分多数类(数量多的类型)数据的过程,这样可以使多数类数据数量可以和少数类(数量少的类型)相匹配。一个简单实现代码如下:

# Shuffle the Dataset.
shuffled_df = credit_df.sample(frac=1,random_state=4)
# Put all the fraud class in a separate dataset.
fraud_df = shuffled_df.loc[shuffled_df[‘Class‘] == 1]
#Randomly select 492 observations from the non-fraud (majority class)
non_fraud_df=shuffled_df.loc[shuffled_df[‘Class‘]== 0].sample(n=492,random_state=42)
# Concatenate both dataframes again
normalized_df = pd.concat([fraud_df, non_fraud_df])
#plot the dataset after the undersampling
plt.figure(figsize=(8, 8))
sns.countplot(‘Class‘, data=normalized_df)
plt.title(‘Balanced Classes‘)
plt.show()

对多数类进行欠采样

对数据集进行欠采样之后,我重新画出了类型分布图(如下),可见两个类型的数量相等。

平衡数据集(欠采样)

第二种重采样技术叫过采样,这个过程比欠采样复杂一点。它是一个生成合成数据的过程,试图学习少数类样本特征随机地生成新的少数类样本数据。对于典型的分类问题,有许多方法对数据集进行过采样,最常见的技术是SMOTE(Synthetic Minority Over-sampling Technique,合成少数类过采样技术)。简单地说,就是在少数类数据点的特征空间里,根据随机选择的一个K最近邻样本随机地合成新样本。

来源

https://imbalanced-learn.readthedocs.io/en/stable/over_sampling.html

为了用python编码,我调用了imbalanced-learn 库(或imblearn),实现SMOTE的代码如下:

imbalanced-learn

https://imbalanced-learn.readthedocs.io/en/stable/index.html

from imblearn.over_sampling import SMOTE
# Resample the minority class. You can change the strategy to ‘auto‘ if you are not sure.
sm = SMOTE(sampling_strategy=‘minority‘, random_state=7)
# Fit the model to generate the data.
oversampled_trainX,oversampled_trainY=sm.fit_sample(credit_df.drop(‘Class‘, axis=1), credit_df[‘Class‘])
oversampled_train=pd.concat([pd.DataFrame(oversampled_trainY), pd.DataFrame(oversampled_trainX)], axis=1)
oversampled_train.columns = normalized_df.columns

还记得我说过不平衡的数据会影响特征相关性吗?让我向您展示处理不平衡类问题前后的特征相关性。

重采样之前:

下面的代码用来绘制所有特征之间的相关矩阵:

# Sample figsize in inches
fig, ax = plt.subplots(figsize=(20,10))
# Imbalanced DataFrame Correlation
corr = credit_df.corr()
sns.heatmap(corr, cmap=‘YlGnBu‘, annot_kws={‘size‘:30}, ax=ax)
ax.set_title("Imbalanced Correlation Matrix", fontsize=14)
plt.show()

重采样之后:

请注意,现在特征相关性更明显了。在解决不平衡问题之前,大多数特征并没有显示出相关性,这肯定会影响模型的性能。除了会关系到整个模型的性能,特征性相关性还会影响ML模型的性能,因此修复类别不平衡问题非常重要。

会关系到整个模型的性能

https://towardsdatascience.com/why-feature-correlation-matters-a-lot-847e8ba439c4

二、 集成方法(采样器集成)

在机器学习中,集成方法会使用多种学习算法和技术,以获得比单独使用其中一个算法更好的性能(是的,就像一个民主投票系统)。当使用集合分类器时,bagging方法变得流行起来,它通过构建多个分类器在随机选择的不同数据集上进行训练。在scikit-learn库中,有一个名叫“BaggingClassifier”的集成分类器,然而这个分类器不能训练不平衡数据集。当训练不平衡数据集时,这个分类器将会偏向多数类,从而创建一个有偏差的模型。

为了解决这个问题,我们可以使用imblearn库中的BalancedBaggingClassifier。它允许在训练集成分类器中每个子分类器之前对每个子数据集进行重采样。

BalancedBaggingClassifier

因此,BalancedBaggingClassifier除了需要和Scikit Learn BaggingClassifier相同的参数以外,还需要2个参数sampling_strategy和replacement来控制随机采样器的执行。下面是具体的执行代码:

from imblearn.ensemble import BalancedBaggingClassifier
from sklearn.tree import DecisionTreeClassifier

#Create an object of the classifier.

bbc = BalancedBaggingClassifier(base_estimator=DecisionTreeClassifier(),
sampling_strategy=‘auto‘,
replacement=False,
random_state=0)
y_train = credit_df[‘Class‘]
X_train = credit_df.drop([‘Class‘], axis=1, inplace=False)
\#Train the classifier.
bbc.fit(X_train, y_train)
preds = bbc.predict(X_train)

使用集合采样器训练不平衡数据集

这样,您就可以训练一个分类器来处理类别不平衡问题,而不必在训练前手动进行欠采样或过采样。

总之,每个人都应该知道,建立在不平衡数据集上的ML模型会难以准确预测稀有点和少数点,整体性能会受到限制。因此,识别和解决这些点的不平衡对生成模型的质量和性能是至关重要的。

原文地址:https://www.cnblogs.com/louieowrth/p/12604127.html

时间: 2024-10-28 06:26:41

如何处理数据不均衡问题(分类问题)的相关文章

高性能负载均衡之分类架构

原文:高性能负载均衡之分类架构 今天跟大家分享一下关于高性能负载均衡的分类架构相关的知识. 当然了,首先要强调一点,并不是所有的项目一开始就要求高性能的.前面我也提到过.如果不是太清楚的可以参考这篇文章:架构设计之六个复杂度来源 下面进入正题,说说高性能负载均衡之分类架构. 单服务器无论如何优化,无论采用多好的硬件,总会有一个性能天花板,单服务器的性能无法满足业务需求时,就需要设计高性能集群来提升系统整体的处理性能. 高性能集群的本质很简单,通过增加更多的服务器来提升系统整体的计算能力.由于计算

推荐系统如何处理数据?

据统计,全球数据总量预计2020年达到44ZB,中国数据量将达到8060EB,占全球数据总量的18%.现阶段我们所讨论的人工智能,很大程度上都是在谈"人工智能"这个大概念下机器学习领域中的深度学习技术.它的底层原理相对简单,对数据有很大的依赖性,本质上是一种基于大数据的统计分析技术. 推荐系统作为人工智能的落地场景之一,对数据的依赖性不言而喻.企业通过前期的数据收集,全面了解自身的产品和目标用户:之后,通过一系列的数据挖掘技术,对目标用户进行分类,刻画用户画像:最后,再通过数据决策,制

从重采样到数据合成:如何处理机器学习中的不平衡分类问题?

转载自[机器之心]http://www.jiqizhixin.com/article/2499本文作者为来自 KPMG 的数据分析顾问 Upasana Mukherjee 如果你研究过一点机器学习和数据科学,你肯定遇到过不平衡的类分布(imbalanced class distribution).这种情况是指:属于某一类别的观测样本的数量显著少于其它类别. 这个问题在异常检测是至关重要的的场景中很明显,例如电力盗窃.银行的欺诈交易.罕见疾病识别等.在这种情况下,利用传统机器学习算法开发出的预测模

SQLServer中游标是如何处理数据的?

游标(Cursor)是处理数据的一种方法,为了查看或者处理结果集中的数据,游标提供了在结果集中一次以行或者多行前进或向后浏览数据的能力.我们可以把游标当作一个指针,它可以指定结果中的任何位置,然后允许用户对指定位置的数据进行处理. 1.游标的组成 游标包含两个部分:一个是游标结果集.一个是游标位置. 游标结果集:定义该游标得SELECT语句返回的行的集合.游标位置:指向这个结果集某一行的当前指针. 2.游标的分类 游标共有3类: API服务器游标 Transaction-SQL游标 API客户端

机器不学习:如何处理数据中的「类别不平衡」?

机器不学习 jqbxx.com -机器学习好网站 机器学习中常常会遇到数据的类别不平衡(class imbalance),也叫数据偏斜(class skew).以常见的二分类问题为例,我们希望预测病人是否得了某种罕见疾病.但在历史数据中,阳性的比例可能很低(如百分之0.1).在这种情况下,学习出好的分类器是很难的,而且在这种情况下得到结论往往也是很具迷惑性的. 以上面提到的场景来说,如果我们的分类器总是预测一个人未患病,即预测为反例,那么我们依然有高达99.9%的预测准确率.然而这种结果是没有意

数据表的无限分类

一.什么是无限分类? 无限级别的向下分类 二.无限分类数据表的设计 id name pid path  (级别) 1 国际新闻   0 0  (顶级分类) 2 国内新闻   0 0  (顶级分类) 3 国际娱乐新闻   1 0-3  (上级分类级别-本分类主键ID) 4 国际体育新闻   1 0-4 5 国内娱乐新闻   2 0-5 6 国内体育新闻   2 0-6 7 足球新闻   4 0-4-7 8 篮球新闻   6 0-6-8 原文地址:https://www.cnblogs.com/zh

分析微信如何处理数据的存储

微信本来作为一个社交的工具因为吸引了众多的用户被加入了越来越多的功能,有些功能比如支付之类的需要有更高的安全保障. 如何保证数据的安全呢? 从数据存放的位置来看,有些数据可以放在移动端,有些放在服务端. 数据在服务端 传统的C/S, B/S结构的应用的数据基本都在服务端,所以对保证数据的安全已经有很多成熟的方案,比如在数据传输的过程中采用安全的连接(SSL), 本地的数据基本在数据库里,保护数据库的数据不外泄,安全要求很高的话也可以加密数据库的数据. 数据在移动端 Android里在移动端存储数

京东如何处理数据中心网络对应用性能的影响

?随着现代数据中心规模的不断扩张,网络拓扑和路由转发变得越来越复杂.传统的数据中心使用大型机和小型机,网络规模相对较小,普通的机框式交换机就能满足网络的需求.随着CLOS集群架构的普及,标准的x86服务器集群以低成本和高扩展性逐渐取代大型机和小型机而成为数据中心的主流. 下图就是一个典型的基于CLOS架构的数据中心解决方案,在这样的大规模网络中,如何让数据在传输过程中能以最快的速度从发送端到接收端,成为网络性能调优的关键因素. 京东IT资源服务部举办的未来数据中心核心技术研讨会上,京东人工智能,

Atitit 个人信息数据文档知识分类

1.1. 知识分类法,参照图书分类法 1 2. Attilax知识分类 2 2.1. 公共文档(一般技术资料,通过标题可以网上搜索到的) 2 2.2. sum  Ati sum doc 2 2.3. sum  Ati doc mini 2 2.4. Sum Pic info 2 2.5. Music 2 2.6. v 2 2.7. Foto ppl 人物摄影 3 2.8. Foto pose  拍摄姿势摄影 3 2.9. Isho 衣物摄影 3 2.10. Isho hot 3 2.11. Wr