我刚刚使用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创建了一个重复的样本,而不是创建一个人为的样本,对特征的值进行了“一点”修改。
我希望你能理解我。
谢谢!
发布于 2015-05-07 07:28:36
Smote是一种生成给定类(少数类)的合成示例以处理不平衡分布的算法。然后,将这种生成新数据的策略与多数类的随机欠采样相结合。当您在package DMwR中使用SMOTE时,需要指定一个过采样百分比和一个欠采样百分比。必须仔细设置这些值,因为获得的数据分布可能仍然不平衡。
在您的情况下,给定参数集,即欠采样和过采样smote的百分比将引入少数类示例的副本。
你的初始职业分布是12到62,在应用smote之后,你的职业分布是60到72。这意味着少数类被过采样,产生了smote和这一类的新合成示例。
然而,你的大多数类有62个例子,现在有72个!欠采样百分比应用于这个类,但它实际上增加了示例的数量。由于要从多数类中选择的样本的数量是基于少数类的样本来确定的,因此从该类中采样的样本的数量大于已经存在的样本的数量。
因此,您有62个示例,而算法尝试随机选择72个!这意味着引入了多数类示例的一些副本。
因此,为了解释您选择的过采样和欠采样:
来自少数类的12个例子,具有400%的过采样: 12*400/100=48。因此,将48个新的合成示例添加到少数类(12+48=60少数类的最终样本数)。
从多数类中选择的示例数量为: 48*150/100=72。但是大多数类只有62个,所以必须引入副本。
发布于 2014-06-08 09:06:54
我不确定DMwR中SMOTE的实现,但是将新数据舍入到最接近的整数值对您来说应该是安全的。一种猜测是,这是留给你来做的,以防你想要做回归而不是分类。否则,如果你想要回归和SMOTE返回的整数,你会无意中丢失相反方向的信息(SMOTE -> integers -> reals)。
如果你不熟悉SMOTE是做什么的,它会通过查看最近的邻居来建立邻域,然后从该邻域内采样来创建“新数据”。当给定类别的分类问题中数据不足时,通常会这样做。它基于这样的假设,即数据附近的数据由于接近而相似。
或者,您也可以使用Weka's implementation of SMOTE,它不会让您做这些额外的工作。
发布于 2019-09-27 02:53:54
SMOTE是一种非常简单的生成合成样本的算法。然而,在你开始使用它之前,你必须了解你的特性。例如,如果您的每个功能都相同,等等。
简单地说,在你这样做之前,试着理解你的数据...!
https://stackoverflow.com/questions/24101802
复制相似问题