d = read.csv(“train.csv”,header = TRUE)
dc= d[complete.cases(d),]
#分类数据Y0~3 保持原来Y的分布,进行平均抽
d0=d[d
y
=
=
0
,
]
d
1
=
d
[
d
y==0,] d1=d[d
y==0,]d1=d[dy1,]
d2=d[d
y
=
=
2
,
]
d
3
=
d
[
d
y==2,] d3=d[d
y==2,]d3=d[dy3,]
#自己分训练集和测试集
label0=sample(c(1:10),dim(d0[1]),replace = TRUE)
label1=sample(c(1:10),dim(d1[1]),replace = TRUE)
label2=sample(c(1:10),dim(d2[1]),replace = TRUE)
label3=sample(c(1:10),dim(d3[1]),replace = TRUE)
d0_train=d0[label0<=5,]
d0_test=d0[label0>5,]
d1_train=d1[label1<=5,]
d1_test=d1[label1>5,]
d2_train=d2[label2<=5,]
d2_test=d2[label2>5,]
d3_train=d3[label3<=5,]
d3_test=d3[label3>5,]
#在合起来训练集和测试集
d_train=rbind(d0_train,d1_train,d2_train,d3_train)
d_test=rbind(d0_test,d1_test,d2_test,d3_test)
#以上,准备数据,大作业需要文字描述 .所有都要 -id除去id
library(nnet)
re_log=multinom(y~.-id,data=d_train) #建模 多元逻辑回归(因为Y是0~3,不只是0和1)
#stopped after 100 iterations表示没有收敛,算了100次没有找到最佳值,函数自动停止数
pred_log=predict(re_log,newdata = d_test) #把数据套进去算结果,进行预测
summary(pred_log) #看模型
tab_log=table(d_test$y,pred_log) #测试集中的Y,左边真实值,右边预测值
tab_log
#横向真值,正确率对角线除总数
library(rpart) #换了决策树的两个方法
#id3是互熵 CART是基尼
re_id3=rpart(y~.-id,data=d_train,method = “class”,parms = list(split=“information”)) #parms是参数,用信息熵
re_CART=rpart(y~.-id,data=d_train,method = “class”,parms = list(split=“gini”),control = rpart.control(cp=0.0001))
pred_id3=predict(re_id3,newdata = d_test,type=“class”)
pred_CART=predict(re_CART,newdata = d_test,type=“class”)
table(d_test$y,pred_CART)
re_id3$cptable #cp值(参数复杂度)最低0.01,交叉验证误差最小
re_CART$cptable
#找到最小的xerror即第四行,的第一个数(默认的)
min=which.min(re_CART$cptable[,4])
#修剪,剪枝,83行中第一列
re_CART_f=prune(re_CART,cp=re_CART$cptable[min,1])
pred_CART_f=predict(re_CART_f,newdata = d_test,type=“class”) #用新修剪完的模型在预测一次
re_CART_f$cptable
table(d_test$y,pred_CART_f)