尔云间生信代码|用R包实现SOMTE算法解决数据不平衡的问题
科研有捷径,输入代码,一键获取科研成果!就是这么省事,来具体看下有多方便!
搜索http://985.so/a9kb查看全部代码(目前共计50+持续新增中),也可以点击右侧【目录】,可以看到更多有趣的代码;真香提示:文末可以知道如何获取代码~
在数据分析时,往往存在数据的不平衡性。比如我们有600多例良性肿瘤和1800例恶性肿瘤,很明显阳性数据和阴性数据不等,这样必然会使得分析结果产生偏倚。而SMOTE就是一种可以纠正这种不平衡数据偏倚的算法。
处理有不平衡数据的最简单的方法是随机复制,然而随机复制往往会导致过度拟合,从而影响模型效果。现在的做法一般有两种:一是去除训练数据集多数分类中的样本数,即欠抽样;二是形成新的样本从而平衡数据,即过抽样。而欠抽样往往会导致样本中一些隐含的信息丢失,所以过抽样的算法应用地更为广泛。
SMOTE(Synthetic minoritye over-sampling technique,SMOTE)是Chawla在2002年提出的过抽样的算法,其核心思想是在一些位置相近的少数类样本中插入新样本来达到平衡样本的目的,特点是算法是增加新的不存在的样例,因此一定程度上避免了分类器过度拟合。
这里,主要介绍如何用R包实现SMOTE算法解决数据不平衡的问题:
1. 安装载入DMwR
rm(list=ls())
install.packages(“DMwR”,dependencies=T)
library(DMwR)
2. 读入数据
data=read.csv(“data.csv”,header=T)
3. SMOTE处理
在SMOTE算法中,会对多数样本进行欠抽样,少数样本进行过抽样。
newdata=SMOTE(formula,data,perc.over=,perc.under=)
formula:设定数据集中的自变量和分组变量
data:指定处理的数据集
perc.over,perc.under选项分别定义过抽样和欠抽样的次数。
4. 整理数据
使用table()查看阳性数据和阴性数据的比例。
table(“data$class”)
有兴趣的读者可尝试以下代码,可以看到样本数目少的分组经过SMOTE算法的处理,实现了样例的增加。


以上就是小编的分享内容,如果您苦于没有思路不知道如何来入手生信分析,或者需要一些热门生信手段的代码,可以联系小云~
