点击“阅读原文”直接打开【北京站 | GPU CUDA 进阶课程】报名链接
沙韬伟,苏宁易购高级算法工程师。
曾任职于Hewlett-Packard、滴滴出行。
数据学院特邀讲师。
主要研究方向包括风控、推荐和半监督学习。目前专注于基于深度学习及集成模型下的用户行为模式的识别。
之前一直没有用过python,最近做了一些数量级比较大的项目,觉得有必要熟悉一下python,正好用到了smote,网上也没有搜到,所以就当做一个小练手来做一下。
首先,看下Smote算法之前,我们先看下当正负样本不均衡的时候,我们通常用的方法:

常规的包含过抽样、欠抽样、组合抽样
过抽样:将样本较少的一类sample补齐。
欠抽样:将样本较多的一类sample压缩。
组合抽样:约定一个量级N,同时进行过抽样和欠抽样,使得正负样本量和等于约定量级N。
这种方法要么丢失数据信息,要么会导致较少样本共线性,存在明显缺陷。

常规的包括算法中的weight,weight matrix。
改变入参的权重比,比如boosting中的全量迭代方式、逻辑回归中的前置的权重设置。
这种方式的弊端在于无法控制合适的权重比,需要多次尝试。

通过核函数的改变,来抵消样本不平衡带来的问题。
这种使用场景局限,前置的知识学习代价高,核函数调整代价高,黑盒优化。
通过现有的较少的样本类别的数据,用算法去探查数据之间的特征,判读数据是否满足一定的规律。
比如,通过线性拟合,发现少类样本成线性关系,可以新增线性拟合模型下的新点。
实际规律比较难发现,难度较高。
SMOTE(Synthetic minoritye over-sampling technique,SMOTE)是Chawla在2002年提出的过抽样的算法,一定程度上可以避免以上的问题。
下面介绍一下这个算法:
正负样本分布
<