0.数据探索
#0.读取数据并稍加了解
data0 <-read.csv("PimaIndiansDiabetes2.csv",T)#读入数据
head(data0)#查看前几行
dim(data0)#查看数据记录数与列数
str(data0)#查看数据类型
#1.缺失值探索
#列表显示缺失值概览
table(is.na(data0)) #缺失值个数
table(complete.cases(data0)) #缺失值记录数
#列表显示缺失值细看
library(mice)
md.pattern(data0)#最后一行汇总数据可以明显看到缺失值最多的变量是triceps & insulin
#图形探索缺失数据
library(VIM)
aggr(data0,prop=F,numbers=T)#从左边图表很容易观察到缺失值最多的变量是triceps & insulin,从右边图表可以直观看到缺失值的分布
2.数据完善
#多重插补
dmy <- dummyVars(~.,data0)#将分类变量处理成哑变量
dmfp <- predict(dmy,data0)
head(dmfp)
imp <- mice(dmfp,m=5)#5重插补,生成5个无缺失数据集
fit <- with(imp,lm(diabetes.neg~preg.nt+glucose+pressure+triceps+insulin+mass+pedigree+age))#插补模型
#summary(fit)
pooled <- pool(fit)
summary(pooled)
dataimput <- complete(imp,action=2)#用第二个数据集
head(dataimput)
table(is.na(dataimput[,-1]))
#随机森林插补
library(missForest)
f <- missForest(data0)
names(f)
data0all <- f$ximp
table(is.na(data0all))
3.数据分区
#用随机森林插补的数据做预测
index <-createDataPartition(data0all$diabetes,p=0.2,list=FALSE)
test <- data0all[index,]
train <- data0all[-index,]
4.建立模型及评估
#用朴素贝叶斯
library(e1071)
naiveBayes.model <-naiveBayes(diabetes~.,data=train)
tr_predict <-predict(naiveBayes.model,newdata=train)
te_predict <-predict(naiveBayes.model,newdata=test)
tabletr <-table(actual=train$diabetes,predict=tr_predict);tabletr
tablete <- table(actual=test$diabetes,predict=te_predict);tablete
#计算误差率
errtr <-paste0(round((sum(tabletr)-sum(diag(tabletr)))*100/sum(tabletr),2),"%");errtr
errte <-paste0(round((sum(tablete)-sum(diag(tablete)))*100/sum(tablete),2),"%");errte
可以看出用朴素贝叶斯算法预测的是否患糖尿病准确率在75%左右。