相信能看到这边文章的同僚们都能明白SMOTE算法是什么,在此就不过多介绍了,直接应用:
#利用SMOTE算法对原数据进行预处理
whitewine<-read.csv("C:/Users/Administrator/Desktop/实验数据集/whitewines.csv")上面是我自己电脑中存储的数据,你可以按照你自己的 数据进行处理,切勿粘贴复制
#注意当条件是一个向量时,比较的结果也是一个向量,分段函数应该如下编程:
w<-matrix(data = whitewine$quality,nrow = 2)summary(whitewine$quality)
length(w)
y<-numeric(length(w))
y[w>4]<-1
y[w<=4]<-2
y
whitewine$quality<-y
当然,比上述更简单的是下面这种:
#对原数据的标签进行处理,使之成为二类不平衡数据集
whitewine$quality<-ifelse(whitewine$quality>4,1,2)summary(whitewine$quality)
table(whitewine$quality)
prop.table(table(whitewine$quality))
#简要查看数据,因为均为数值型属性,故不需要二值化,注意可能要运用标准化
head(whitewine,3)
#先对数据集进行分割,两种方法
set.seed(12345)
whitewine_rand<-whitewine[order(runif(4898)),]
summary(whitewine_rand$quality)
whitewine_rand_train<-whitewine_rand[1:4000,]
whitewine_rand_test<-whitewine_rand[4001:4898,]
prop.table(table(whitewine_rand_test$quality))
table(whitewine_rand_train$quality)
class(whitewine_rand_train$quality)
#另一种
library(caret)
set.seed(12345)
splitIndex<-createDataPartition(whitewine$quality,time=1,p=0.817,list=FALSE)
trainSplit<-whitewine[splitIndex,]
testSplit<-whitewine[-splitIndex,]
table(testSplit$quality)
prop.table(table(trainSplit$quality))
class(trainSplit$quality)
#利用第一种分割方法建立模型
whitewine_rand_train$quality<-factor(whitewine_rand_train$quality)
library(C50)
whitewine_model_a<-C5.0(whitewine_rand_train[-12],wh