Python Smote
什么是SMOTE
合成少数类过采样(SMOTE)过程是在用于机器学习的数据集中扩展出现较少的实例数量的方法。这是一种通过复制现有实例来增加实例数量的更好方法。
当我们处理不平衡的数据集时,我们想要使用SMOTE。
一个数据集失衡可以有很多理由,比如:
- 你关注的分类在总体中可能非常罕见。
- 数据集可能难以收集。
当你发现你需要评估的类在数据集中缺乏代表性时,最好使用SMOTE。
例如,假设你将其应用于一个关于印度人口的数据集。然而,在某种程度上,相比女性类别,数据集中的男性类别样本较少。所以在这种情况下,你可以知道印度男性的数量多于女性。因此,在这里,SMOTE将返回一个包含原始“男性”类别示例和根据你指定的比例生成的人为少数类别示例的数据集。
SMOTE是如何工作的
它是一种在数据集中相对增加观察值数量的统计过程。它通过从你想要给出的现有少数类实例中生成新实例来工作。请注意,此实现不会改变大多数实例的数量。
新创建的实例不仅仅是现有少数类的副本。算法采用每个目标类别及其最近邻的所有特征的实例。这种方法将增加每个类别的可用特征数量,并使模型更加全面。
然后,SMOTE以数据集作为输入。我们可以考虑与上面相同的模型,假设你有一个不平衡的数据集,只有1%的案例具有目标值“男性”,大多数案例具有值“女性”。但是,它会增加数据中少数类的比例。为了将少数类案例的比例增加到之前的两倍,你需要输入200作为SMOTE比例参数。
SMOTE:解决不平衡数据的强大解决方案
SMOTE是处理分类问题中不平衡数据的一种更好的方法。这种方法是在2002年发表在《人工智能研究杂志》上的一篇论文中提出的。SMOTE代表合成少数类过采样技术。
何时使用SMOTE
要开始使用SMOTE,我们需要评估什么是不平衡数据以及何时会出现不平衡数据。
不平衡数据是指在不同可能结果的明确变量之间观察频率不同的数据。基本上,某些类型的观察结果很多,而另一些类型很少。
当你有不平衡数据时,SMOTE是一种解决方案。
例如,想象一个关于山地运动新产品销售的数据集。为了简单起见,假设网站有两种类型的用户:滑雪者和登山者。
对于每个访客,我们还记录了其是否购买了新的山地产品。假设我们想要创建一个分类模型,根据用户数据预测访客是否会购买新产品。
大多数互联网商业客户并不购买:经常只是来看看商品,只有少部分访客购买。我们的数据集将不平衡,因为我们有大量的非购买者和很少的购买者。
SMOTE算法解释
SMOTE是一种通过生成人工数据来对原始数据进行增强的算法。SMOTE可以看作是过采样的高级形式,也可以看作是一种特定的数据增强算法。SMOTE的优势在于它不会产生副本,而是生成与原始数据略有不同的人工数据点。
SMOTE是一种优于过采样的选择
SMOTE算法的运行如下:
- 从少数类中随机抽取一个样本。
- 对于该样本中的观测值,确定k个最近邻。
- 然后选择一个邻居,并计算连续数据与所选邻居之间的向量。
- 将该向量扩大一个介于0和1之间的随机数。
- 为了获取人工数据,将其添加到连续数据中。
这个操作类似于将连续数据朝着其邻居稍微移动。通过这种方式,您确保您生成的人工数据点不是当前数据的精确副本,同时又确保它与少数类中的已知观测值过于不同。
SMOTE影响准确率与召回率
在新引入的山地运动模型中,我们对模型的整体准确率进行了评估。准确率测量了您正确预测的比率。在分类问题中,我们通常需要更进一步并考虑每个类的预测性能。
在二元分类中,混淆矩阵是一种显示以下数量的机器学习指标:
- 真阳性(模型正确预测为真)
- 假阳性(模型错误预测为真)
- 真阴性(模型正确预测为假)
- 假阴性(模型错误预测为假)
在这种情况下,我们还讨论了准确率与召回率。准确率指的是模型在仅识别确定案例方面的表现如何。召回率指的是模型在识别数据中的所有正例方面的表现如何。
真阳性和真阴性是正确的预测:拥有很多这样的预测是一个很好的结果。假阳性和假阴性都是错误的预测:尽量少有这些情况是最好的。然而,总体而言,我们可能更愿意选择假阳性而不是假阴性。
当人工智能被用于自动化业务流程时,将不会出现假阴性(被预测为负面的阳性结果)。它们很可能永远不会被识别,而假阳性(错误地预测为正面的阴性结果)通常会在后续人工检查中被有效地过滤掉,许多公司已经采取了这种检查措施。
在许多商业场景中,假阳性比假阴性风险较小。
一个引人注目的模型将检测新冠病毒。想象一下,病人接受检测,结果出现假阴性:他们将外出传染他人。相反,如果检测结果是假阳性,他们将被强制待在家里,这不好,但他们并不构成公共卫生威胁。
当我们对某一类别的样本数量不平衡时,某些类别的样本很少,导致模型很少预测到这一类别。使用SMOTE,我们可以改变模型,减少误报阴性的同时增加误报阳性。使用SMOTE的结果通常是提高召回率,但降低准确率。这意味着我们将增加对少数类别的预测:部分预测是正确的(提高召回率),但部分预测是错误的(降低准确率)。
SMOTE会增加召回率,但降低准确率
例如,一个经常预测购买者的模型在召回率方面表现良好,因为它能识别出所有的正例。但在准确率方面可能不太好。总体模型的准确性也可能降低,但这并不是问题:在不平衡数据的情况下,不应将准确率作为评估指标。