Kaggle实战系列之"San Francisco Crime
ImBalance Data and Resampling
如前所述,源数据中犯罪类别的分布极不平衡(如下图),最高的LARCENY/THEFT与最少的TREA存在3个数量级的差别。
如下表所列,或许本身就是录入系统中的笔误所致的噪声数据(这点可从数据条的Descript描述字段中很明显的看出),因此可以考虑与加以合并。其它频数不足400的少数类别也可考虑与相近类别合并。
本项目中记录数<400的类别及其近似类别
No | Original Category | Similary Category |
---|---|---|
39 | ('TREA',6') | ('TRESPASS', 7326) |
38 | ('PORNOGRAPHY/OBSCENE MAT', 22) | ('PROSTITUTION', 7484) |
37 | ('GAMBLING', 146) | ('DISORDERLY CONDUCT', 4320)妨害治安行为 |
36 | ('SEX OFFENSES NON FORCIBLE', 148) | ('SEX OFFENSES FORCIBLE', 4388) |
35 | ('EXTORTION', 256)勒索;强夺 | ('ROBBERY', 23000) |
34 | ('BRIBERY', 289) | ('FRAUD', 16679)欺诈 |
类似的,参考文献《Exploratory Data Analysis And Crime Prediction In San Francisco》中也对犯罪类别做了如下调整:
- INDECENT EXPOSURE or OBSCENE or DISORDERLY CONDUCT then return PORNOGRAPHY/OBSCENE MAT.
- crime has something to do with WEAPON LAWS, the Category column has classifi ed it under OTHER OFFENSES.
<center>Original Category containing </center> | <center>New Category</center> |
---|---|
Weapon Laws | Deadly Tool Possession |
Bad Check, Counterfeiting, Embezzlement | Fraud/Counterfeiting |
Suspicious Occ | Suspicious Person/act |
Warrants | Warrant Issued |
Vandalism | Arson |
Alice Zheng在《精通特征工程》一书中提到了名为back-off的对于稀有类的处理方法。这是一种将所有稀有类的计数累加到一个特殊分箱的简单计数。如果类别的计数大于一个确定的阈值,则使用它自己的计数统计量;否则就是用back-off分箱的统计量。当使用back-off方法时,可添加一个表示统计量是否来自于back-off分箱的二值指示器。
此外,对于类别不平衡数据,可以考虑利用如imblearn等进行重采样(resampling)之后再训练模型。重采样包括两大类:
过采样:对训练集里面样本数量较少的类别(少数类)进行过采样,合成新的样本来缓解类不平衡,如SMOTE过采样(上采样)。
欠采样:对训练集里面样本数量较多的类别(多数类)进行欠采样,抛弃一些样本来缓解类不平衡。
欠采样(undersampling)和过采样(oversampling)
LightGBM的'is_unbalance'或'unbalanced_set'只适用于二分类任务,不适用于多类别分类任务。鉴于类别分布极不平衡,有可能在模型训练之前需用到重采样。
SMOTE Oversampling
JAIR'2002的文章《SMOTE: Synthetic Minority Over-sampling Technique》提出了一种过采样算法SMOTE(Synthetic Minority Oversampling TEchnique:合成少数类过采样技术)。概括来说,SMOTE算法是基于“插值”来为少数类合成新的样本。
SMOTE算法的具体实现:设训练集的一个少数类的样本数为,那么SMOTE算法将为这个少数类合成个新样本。这里要求必须是正整数,如果给定的那么算法将“认为”少数类的样本数,并将强制。
考虑该少数类的一个样本 ,其特征向量为
首先从该少数类的全部个样本中找到样本的个近邻(例如用欧氏距离),记为
然后从这 k 个近邻中随机选择一个样本,再生成一个到之间的随机数,从而合成一个新样本
将步骤2重复进行次,从而可以合成个新样本
那么,对全部的个少数类样本进行上述操作,便可为该少数类合成个新样本。如果样本的特征维数是 2 维,那么每个样本都可以用二维平面上的一个点来表示。SMOTE算法所合成出的一个新样本相当于是表示样本 xi 的点和表示样本的点之间所连线段上的一个点。所以说该算法是基于“插值”来合成新样本。
为了获得更好的结果,你可以在使用诸如 Gradeint boosting 和 XGBoost 的同时也使用 SMOTE 和 MSMOTE 等合成采样技术。
通常用于解决不平衡数据集问题的先进 bagging 技术之一是 SMOTE bagging。这个办法采取了一种完全不同于传统 bagging 技术的办法来创造每个 Bag/Bootstrap。通过每次迭代时设置一个 SMOTE 重采样率,它可以借由 SMOTE 算法生成正例。每次迭代时,负例集会被 bootstrap。
Smote的优点包括:
* 通过随机采样生成的合成样本而非实例的副本,可以缓解过拟合的问题。
* 不会损失有价值信息。
Smote的缺点包括:
* 当生成合成性实例时,SMOTE 并不会把来自其他类的相邻实例考虑进来。这导致了类重叠的增加,并会引入额外的噪音。
* SMOTE 对高维数据不是很有效。
MSMOTE重采样
MSMOTE是 SMOTE 的改进版本,SMOTE 没有考虑数据集中少数类和潜在噪声的基本分布。所以为了提高 SMOTE 的效果,MSMOTE 应运而生。该算法将少数类别的样本分为 3 个不同的组:安全样本、边界样本和潜在噪声样本。分类通过计算少数类的样本和训练数据的样本之间的距离来完成。安全样本是可以提高分类器性能的那些数据点。而另一方面,噪声是可以降低分类器的性能的数据点。两者之间的那些数据点被分类为边界样本。
虽然 MSOMTE 的基本流程与 SMOTE 的基本流程相同,在 MSMOTE 中,选择近邻的策略不同于 SMOTE。该算法是从安全样本出发随机选择 k-最近邻的数据点,并从边界样本出发选择最近邻,并且不对潜在噪声样本进行任何操作。
本项目调用imbalanced程序包完成重采样。相对于采样随机的方法进行过采样, 该程序包给出了两种较为流行的升采用方法:SMOTE(Synthetic Minority Oversampling Technique)和ADASYN(Adaptive Synthetic)。其中SMOTE是对于少数类样本a, 随机选择一个最近邻的样本b, 然后从a与b的连线上随机选取一个点c作为新的少数类样本;ADASYN关注的是在那些基于K最近邻分类器被错误分类的原始样本附近生成新的少数类样本。SMOTE算法与ADASYN都是基于同样的算法来合成新的少数类样本: 对于少数类样本a, 从它的最近邻中选择一个样本b, 然后在两点的连线上随机生成一个新的少数类样本, 不同的是对于少数类样本的选择。imblearn还提供了MSMOTE算法的变体: (i) borderline1, (ii) borderline2, (iii) svm。
此外,除重采样技术外,Scikit-learn 有许多可以使用可选的 class_weight 参数(可以设置成大于 1)的分类器; Tomek link等基于临近的方法(Neighbor-based approaches)采样;算法集成技术(Algorithmic Ensemble Techniques)都是可以考虑的方法之一。
Category SMOTE
重采样结果示例
Condensed Nearest Neighbour
Condensed Nearest Neighbour
从上述重采样后的分布结果可见,对于多类别的分类问题,重采样的方法也许有简单粗暴之嫌。降采样(Undersampling)浪费了数据导致训练不足,而升采样(Oversampling)大概率可能导致过拟合。是否实施重采样,应结合模型特征等具体情况而定。时间允许的话利用Pipeline结合GridSearchCV,将重采样算法与模型调参综合考虑也许会有效果。
如下表所列,或许本身就是录入系统中的笔误所致的噪声数据,这点可从数据条的Descript描述字段中勘察,因此可以考虑与考虑合并。其它频数不足400的少数类别也可考虑与相近类别合并。
本项目中记录数<400的类别及其近似类别
No | Original Category | Similary Category |
---|---|---|
39 | ('TREA',6') | ('TRESPASS', 7326) |
38 | ('PORNOGRAPHY/OBSCENE MAT', 22) | ('PROSTITUTION', 7484) |
37 | ('GAMBLING', 146) | ('DISORDERLY CONDUCT', 4320)妨害治安行为 |
36 | ('SEX OFFENSES NON FORCIBLE', 148) | ('SEX OFFENSES FORCIBLE', 4388) |
35 | ('EXTORTION', 256)勒索;强夺 | ('ROBBERY', 23000) |
34 | ('BRIBERY', 289) | ('FRAUD', 16679)欺诈 |
类似的,参考文献《Exploratory Data Analysis And Crime Prediction In San Francisco》中也对犯罪类别做了如下调整:
- INDECENT EXPOSURE or OBSCENE or DISORDERLY CONDUCT then return PORNOGRAPHY/OBSCENE MAT.
- crime has something to do with WEAPON LAWS, the Category column has classifi ed it under OTHER OFFENSES.
<center>Original Category containing </center> | <center>New Category</center> |
---|---|
Weapon Laws | Deadly Tool Possession |
Bad Check, Counterfeiting, Embezzlement | Fraud/Counterfeiting |
Suspicious Occ | Suspicious Person/act |
Warrants | Warrant Issued |
Vandalism | Arson |
参考资料
机器学习——类不平衡问题与SMOTE过采样算法
深度|解决真实世界问题:如何在不平衡类上使用机器学习?
从重采样到数据合成:如何处理机器学习中的不平衡分类问题?
Imblearn package study
Comparison of the different under-sampling algorithms
欠采样(undersampling)和过采样(oversampling)会对模型带来怎样的影响
imbalanced-learn