大数据:思维、技术、交易和人性

Python爬虫大数据采集与挖掘(PPT、代码、视频)

大都数分类器假设输入的数据是理想的,不同类别样本数量是均衡的。但是,在现实中也经常遇到非平衡数据分类,比如信用卡欺诈检测、入侵检测等,相比于正常类数据,欺诈类、异常类数据在实际中能获得的数量是很有限的。

python处理不平衡数据集 不平衡数据集分类算法_kdd数据集

一、数据层的主要方法

       基于数据层的SMOTE算法(2002)是解决非平衡分类问题的一种常见方法,原始的SMOTE采用线性插值的方法增加少数类样本,但容易出现过泛化、样本重叠、噪声等一系列问题。

       同时从数据生成机制的角度看,非平衡数据集的类别分布不平衡还往往伴随着三大问题,即小样本、类别重叠和小分离区域。

       上述过泛化、样本重叠、噪声、小样本和小分离区域的问题,由此成为SMOTE等改进型数据层方法着重要解决的问题。点击链接可以阅读在Python中实现非平衡数据采样SMOTE算法的方法

       主要思路有:

(1)SMOTEBoost(2003)

(2)基于聚类的过采样CBO(2004):使用Kmeans对多数类和少数类分别聚类,解决有小分离区域时的样本合成问题。

(3)Borderline-SMOTE(2005),只针对边界线邻近的少数类样本进行过采样,但由于是边界,容易导致类别模糊和分类风险(ambiguous and dangerous);

(4)safe-level-SMOTE(2009),给每个少数类样本指定一个安全等级,让生成的样本更靠近安全等级高的样本。

(5)基于聚类的欠采样SBC(2009):在整个数据集上使用Kmeans聚类。然后根据每个类中多数类样本数量和少数类样本数量的比值来选择合适多数类数量,从而实现欠采样。

python处理不平衡数据集 不平衡数据集分类算法_数据集_02

(6)挖掘少数类内部结构的SMOTE,DBSMOTE(2012)先对少数类进行DBSCAN聚类,最终在样本到类中心的直线上进行采样获得合成样本。充分挖掘少数类的潜在结构(分布)是提升合成样本质量的一种有效途径。

(7)基于特征变换的过采样MOT2LD(2015): 使用无监督特征选择方法t-SNE将训练样本降维到二维空间,在该空间中学习训练样本的聚类结构,并运用少数类过采样。

(8)与算法层方法的结合:SMOTEBagging(2015)、 UnderOverBagging,朝着小类 的方向改变用于训练下一个分类器的数据分布

(9)基于Mahalanobis距离的过采样方法MDO(TKDE,2016):针对多类不平衡,仅在少数类密集的区域中合成样例,能有效克服样本重叠问题。

python处理不平衡数据集 不平衡数据集分类算法_kdd数据集_03

Mahalanobis距离和欧氏距离的差别可以看如下两个图,左图是基于欧氏距离计算得到的与中心等距离的点,右边是Mahalanobis距离相同的点构成的椭圆轮廓。

python处理不平衡数据集 不平衡数据集分类算法_kdd数据集_04

(10)基于模型的样本合成方法MBS(2020):使用回归模型捕获特征之间的相关性

二、主要结论

       - 过采样算法在不平衡程度较高的数据集上的性能较好,欠采样算法在不平衡程度较低的数据集上的性能更优。

       - 在基于集成学习的不平衡数据分类方法中,与过采样相结合的集成方法能在不平衡程度较高的数据集上取得较好的效果,与欠采样相结合的集成方法更利于处理不平衡程度较低的数据集.(1、2具体见发表在控制与决策上的不平衡数据分类方法综述. 2019.4)

      - 分类器性能不仅与数据的不平衡程度有关,数据集的其他特性如样本数量、数据分布等因素也会影响分类器的性能。因此并不是每种不平衡分类方法都能得到较为显著的提升效果.

       - 半监督学习也许是解决不平衡数据分类的一种重要途径,利用未标记样本以及少数类样本的自学习,弥补标记样本的不足。主要难点是在考虑数据的不平衡特性的情况下,如何选取最有价值的无标签数据。但是是否能减轻不平衡分布程度,仍然与未标注数据本身隐含的分布有关。因此,很可能还是要和数据层的技术结合起来。

三、常用的数据集

Kaggle   https://www.kaggle.com/  

UCI  https://archive.ics.uci.edu/ml 

KDD-99/NSL-KDD: 入侵检测数据

KEEL数据集的非平衡率(IR)在1.80~8.8之间,样本 数在214~2308之间,特征数3-20,http://www.keel.es/

python处理不平衡数据集 不平衡数据集分类算法_数据集_05