我们之前探讨了多种算法,每种算法都有优缺点,因而当我们针对具体问题去判断选择那种算法时,必须对不同的预测模型进行重做评估。为了简化这个过程,我们使用caret包来生成并比较不同的模型与性能。
操作
加载对应的包与将训练控制算法设置为10折交叉验证,重复次数为3:
library(ROCR)
library(e1071)
library("pROC")
library(caret)
library("pROC")
control = trainControl(method = "repaetedcv",
number = 10,
repeats =3,
classProbs = TRUE,
summaryFunction = twoClassSummary)
使用glm在训练数据集上训练一个分类器
glm.model = train(churn ~ .,
data= trainset,
method = "glm",
metric = "ROC",
trControl = control)
使用svm在训练数据集上训练一个分类器
svm.model = train(churn ~ .,
data= trainset,
method = "svmRadial",
metric = "ROC",
trControl = control)
使用rpart函数查看rpart在训练数据集上的运行情况
rpart.model = train(churn ~ .,
data = trainset,
method = "svmRadial",
metric = "ROC",
trControl = control)
使用不同的已经训练好的数据分类预测:
glm.probs = predict(glm.model,testset[,!names(testset) %in% c("churn")],type = "prob")
svm.probs = predict(svm.model,testset[,!names(testset) %in% c("churn")],type = "prob")
rpart.probs = predict(rpart.model,testset[,!names(testset) %in% c("churn")],type = "prob")
生成每个模型的ROC曲线,将它们绘制在一个图中:
glm.ROC = roc(response = testset[,c("churn")],
predictor = glm.probs$yes,
levels = levels(testset[,c("churn")]))
plot(glm.ROC,type = "S",col = "red")
svm.ROC = roc(response = testset[,c("churn")],
predictor = svm.probs$yes,
levels = levels(testset[,c("churn")]))
plot(svm.ROC,add = TRUE,col = "green")
rpart.ROC = roc(response = testset[,c("churn")],
predictor = rpart.probs$yes,
levels = levels(testset[,c("churn")]))
plot(rpart.ROC,add = TRUE,col = "blue")
三种分类器的ROC曲线
说明将不同的分类模型的ROC曲线绘制在同一个图中进行比较,设置训练过程的控制参数为重复三次的10折交叉验证,模型性能的评估参数为twoClassSummary,然后在使用glm,svm,rpart,三种不同的方法建立分类模型。
从图中可以看出,svm对训练集的预测结果(未调优)是三种分类算法里最好的。
说明神经网络由一组互联的结点组成,这些节点分别负责网络的输入,连接,处理以及输出。神经网络被广泛用于诸如分类、聚类、预测等诸多领域。借助neuralnet训练得到神经网络模型。
操作
导入数据集,并将数据分为训练集和测试集
data("iris")
set.seed(2)
ind = sample(2,nrow(iris),replace = TRUE,prob = c(0.7,0.3))
trainset = iris[ind == 1,]
testset = iris[ind == 2,]
1
2
3
4
5
导入与安装包
library(neuralnet)
1
根据数据集在species列取值不同,为训练集新增三种数列
train_sub <- sample(nrow(data),0.7*nrow(data))##随机无回放抽取train_set <- data[train_sub,]
test_set <- data[-train_sub,]##
可以这样来划分,把data改成你自己的数据名称就可以了