首页 > 编程知识 正文

大型不规则数据汇总教程(解决类别不平衡问题)

时间:2023-05-03 08:43:34 阅读:80464 作者:2577

翻译: qpdz

校正: xsdss

正文约1500字,建议读5分钟。

作者通过python代码的例子,说明了处理三种不平衡数据集的可选方法,包括数据级的两种重采样数据集方法和算法级的一种统一分类器方法。

分类是机器学习最常见的问题之一,处理它的最佳方法从分析和探索数据集开始。 也就是说,它从浏览器数据分析(EDA )开始。 它不仅可以生成尽可能多的数据见解和信息,还可以用于搜索数据集上可能存在的问题。 分析分类中使用的数据集时,类别不均衡是常见的问题之一。

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

数据不均衡通常反映数据集中类别的不均匀分布。 例如,在信用卡诈骗检测数据集上,大部分信用卡交易类型不是诈骗,只有很小一部分类型是诈骗交易,到目前为止,非诈骗交易与诈骗交易的比率达到了50:1。 本文使用来自Kaggle的信用卡诈骗交易数据集。 可以从这里下载。

在这里

3559 www.ka ggle.com/mlg-ulb/credit card fraud首先,绘制类分布图,调查不均衡性。

如您所见,非欺诈交易类型的数据数量远远超过了欺诈交易类型。 如果我们没有解决这个类别的不平衡问题而训练了二分类模型,这个模型就会完全有偏差。 稍后给出影响特征关联性的过程,并说明其理由。

现在,让我介绍一下解决类别不平衡的技巧。 在这里可以找到完整代码的笔记本。

在这里

359 Github.com/WML BA/Innovate 2019/Blob/master/Credit _ Card _ Fraud _ detection.IPynb

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

(9503.163 .

这听起来很直接。 可与下采样是指随机删除多个类(数量多的类型)的数据的一部分的过程,是指将多个类的数据数量设为少数类)数量少的类型)一致。 简单的实现代码如下。

# Shuffle the Dataset

shuffled _ df=credit _ df.sample (断面=1,随机状态=4) ) )。

# # putallthefraudclassinaseparatedataset。

fraud _ df=shuffled _ df.loc [ shuffled _ df ]==1

# #随机选择(492 ) ) ) ) ) ) ) ) )中) ) ) ) ) ) )的一个示例。) )

non _ fraud _ df=shuffled _ df.loc [ shuffled _ df [ '类' ]=0].sample (n=492,随机_ state=42 )。

# # concatenatebothdataframesagain

normalized _ df=PD.concat ([标准化_ df,否]

n_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

https://mp.weixin.qq.com/cgi-bin/appmsg?t=media/appmsg_edit&action=edit&type=10&isMul=1&isNew=1&lang=zh_CN&token=89565677#imblearn.ensemble.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模型会难以准确预测稀有点和少数点,整体性能会受到限制。因此,识别和解决这些点的不平衡对生成模型的质量和性能是至关重要的。

原文标题:

How to fix an Unbalanced Dataset

原文链接:

https://www.kdnuggets.com/2019/05/fix-unbalanced-dataset.html

编辑:王菁

校对:tzdl

译者简介

qpdz,在岗数据分析师,计算机硕士毕业。从事数据工作,需要重塑自我的勇气,也需要终生学习的毅力。但我依旧热爱它的严谨,痴迷它的艺术。数据海洋一望无境,数据工作充满挑战。感谢数据派THU提供如此专业的平台,希望在这里能和最专业的你们共同进步!

— 完 —

关注清华-青岛数据科学研究院官方微信公众平台“THU数据派”及姊妹号“数据派THU”获取更多讲座福利及优质内容。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。