工作生活数目字生存

Kaggle实战系列之"San Francisco Crime

2019-07-02  本文已影响0人  askka

ImBalance Data and Resampling

\quad\;\;如前所述,源数据中犯罪类别的分布极不平衡(如下图),最高的LARCENY/THEFT与最少的TREA存在3个数量级的差别。

Category barchart
如下表所列,或许本身就是录入系统中的笔误所致的噪声数据(这点可从数据条的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)欺诈

\quad\;\;类似的,参考文献《Exploratory Data Analysis And Crime Prediction In San Francisco》中也对犯罪类别做了如下调整:

  1. INDECENT EXPOSURE or OBSCENE or DISORDERLY CONDUCT then return PORNOGRAPHY/OBSCENE MAT.
  2. 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)

\quad\;\;LightGBM的'is_unbalance'或'unbalanced_set'只适用于二分类任务,不适用于多类别分类任务。鉴于类别分布极不平衡,有可能在模型训练之前需用到重采样。
\quad\;\;SMOTE Oversampling
\quad\;\;JAIR'2002的文章《SMOTE: Synthetic Minority Over-sampling Technique》提出了一种过采样算法SMOTE(Synthetic Minority Oversampling TEchnique:合成少数类过采样技术)。概括来说,SMOTE算法是基于“插值”来为少数类合成新的样本。
\quad\;\;SMOTE算法的具体实现:设训练集的一个少数类的样本数为T,那么SMOTE算法将为这个少数类合成NT个新样本。这里要求N必须是正整数,如果给定的N<1那么算法将“认为”少数类的样本数T=NT,并将强制N=1
\quad\;\;考虑该少数类的一个样本i ,其特征向量为\boldsymbol{x}_{i},i \in\{ 1, \ldots, T \}
\quad\;\;首先从该少数类的全部T个样本中找到样本x_ik个近邻(例如用欧氏距离),记为\boldsymbol{x}_{i(near)}, near \in\{1,\ldots, k\}
\quad\;\;然后从这 k 个近邻中随机选择一个样本x_{i(nn)},再生成一个01之间的随机数\zeta_{1},从而合成一个新样本\boldsymbol{x}_{i1}
\boldsymbol{x}_{i1}=\boldsymbol{x}_{i}+\zeta_{1} \cdot\left(\boldsymbol{x}_{i(nn)}-\boldsymbol{x}_{i}\right)
\quad\;\;将步骤2重复进行N次,从而可以合成N个新样本\boldsymbol{x}_{inew}, \boldsymbol{new} \in \mathbf{1}, \dots, N
那么,对全部的T个少数类样本进行上述操作,便可为该少数类合成NT个新样本。如果样本的特征维数是 2 维,那么每个样本都可以用二维平面上的一个点来表示。SMOTE算法所合成出的一个新样本x_{i1}相当于是表示样本 xi 的点和表示样本x_{i(nn)}的点之间所连线段上的一个点。所以说该算法是基于“插值”来合成新样本。

smote theory 从重采样到数据合成:如何处理机器学习中的不平衡分类问题? 一文中建议:遇到不平衡数据集时,没有改善预测模型准确性的一站式解决方案。你可能需要尝试多个办法来搞清楚最适合数据集的采样技术。在绝大多数情况下,诸如SMOTE 以及 MSMOTE 之类的合成技术会比传统过采样或欠采样的办法要好。
为了获得更好的结果,你可以在使用诸如 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)欺诈

\quad\;\;类似的,参考文献《Exploratory Data Analysis And Crime Prediction In San Francisco》中也对犯罪类别做了如下调整:

  1. INDECENT EXPOSURE or OBSCENE or DISORDERLY CONDUCT then return PORNOGRAPHY/OBSCENE MAT.
  2. 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

上一篇 下一篇

猜你喜欢

热点阅读