Smote无法进行过采样

时间:2014-06-08 00:09:22

标签: r

我刚刚使用包含在DMwR包中的Smote对我的数据集进行了过采样。

我的数据集由两个类组成。最初的分布是12比62.所以,我编码了这个过采样:

newData <- SMOTE(Score ~ ., data, k=3, perc.over = 400,perc.under=150)

现在,分布是60比72。

然而,当我显示'newData'数据集时,我发现了SMOTE如何进行过采样并且重复了一些样本。

例如,样本编号24显示为24.1,24.2和24.3。

这是对的吗?这直接影响分类,因为分类器将学习一个模型,其中包含测试中将出现的数据,因此这在分类中是不合法的。

编辑: 我想我没有正确解释我的问题:

如您所知,SMOTE是一种过采样技术。它从原始样本创建新样本,修改其特征值。但是,当我显示由SMOTE生成的新数据时,我得到了这个:

(这些值是特征值)Sample50:1.8787547 0.19847987 -0.0105946940 4.420207 4.660536 1.0936388 0.5312777 0.07171645 0.008043167

样品50.1:1.8787547 0.19847987 -0.0105946940 4.420207 4.660536 1.0936388 0.5312777 0.07171645

样本50属于原始数据集。样本50.1是由SMOTE生成的“人工”样本。然而(这是我的问题),SMOTE已经创建了一个重复的样本,而不是创建一个人为的修改“一点”特征的值。

我希望你能理解我。

谢谢!

3 个答案:

答案 0 :(得分:4)

Smote是一种算法,可生成给定类(少数类)的合成示例,以处理不平衡的分布。然后,这种用于生成新数据的策略与多数类的随机欠采样相结合。在DMwR包中使用SMOTE时,需要指定过采样百分比和欠采样百分比。必须仔细设置这些值,因为获得的数据分布可能仍然不平衡。

在你的情况下,并且给定参数设置,即不足和过采样的百分比的百分比将引入你的少数群体的例子的复制品。

你的初始班级分布是12到62,并且在申请击打之后你以60到72结束。这意味着少数族级被过度抽样,并且使用了这个类的新的合成例子。

然而,你的大多数班级有62个例子,现在包含72个!欠抽样百分比适用于此类,但它实际上增加了示例的数量。由于基于少数类的示例确定要从多数类中选择的示例的数量,因此从该类中采样的示例的数量大于已存在的示例的数量。

因此,你有62个例子,算法试图随机选择72!这意味着引入了多数类示例的一些副本。

因此,要解释您选择的过采样和欠采样:

来自少数民族的12个例子,400%的过采样给出:12 * 400/100 = 48。因此,48个新的合成例子被添加到少数群体中(12 + 48 = 60个少数群体的最终例子)。

从多数类中选择的示例数量为:48 * 150/100 = 72。 但是大多数班级只有62个,所以必须引入复制品。

答案 1 :(得分:0)

我不确定DMwR中SMOTE的实现,但是将新数据四舍五入到最接近的整数值应该是安全的。一个猜测是,你可以选择做回归而不是分类。否则,如果您想要回归并且SMOTE返回整数,则会通过向相反方向无意中丢失信息(SMOTE - &gt;整数 - &gt;实数)。

如果您不熟悉SMOTE的作用,它会通过查看最近的邻居来建立一个邻域,然后从该邻域内进行采样来创建“新数据”。通常在给定类的分类问题中的数据不足时完成。它依据的假设是数据附近的数据因接近而相似。

或者,您可以使用Weka's implementation of SMOTE,这不会让您执行此额外工作。

答案 2 :(得分:0)

SMOTE是生成合成样本的非常简单的算法。但是,在继续使用它之前,您必须了解您的功能。例如,您的每个功能是否应该相同,等等。

简单地说,在您尝试之前,请先了解您的数据... !!!