我正在尝试编写一个函数,该函数从汇总表中不同数据集的几种分类算法中生成输出。我正在使用该caret
软件包。
我将尝试浏览到目前为止我拥有的不同代码位:
library(foreign) ## Get a concacated list of files is working directry
f<-c(dir())
## create and view an object with file names and full paths
file<-file.path("C:/Users/Documents/Datasets",c (f))
# use a loop to read all of these files from my working directry
dlist<-lapply(file,read.table,header=TRUE,sep="\t")
lapply(d, names)
所以dlist
包含我的一组训练和测试数据集。我已经拆分了我的数据;例如,文件名为pca.test
, pca.train
, svm.test
, svm.train
, rf.train
, rf.test
. 刚刚意识到其中的文件dlist
也已经是 R 中的 data.frames,即我首先在 R 中创建它们,然后将它们保存为制表符分隔的文件(冗余!)。
对于每对数据集(例如 pca.test 和 pca.train),我想执行不同的分类和预测方法:
library(caret)
set.seed(100)
# Classification method 1, Naive baiyes
model_pca.NB = train(pca.train[,-5],pca.train[,5],'nb', trControl=trainControl(method='cv',number=5))
pca.nb.pred<-predict(model_pca.NB, pca.test[,-5])
nb.conf<-confusionMatrix(pca.nb.pred,pca.test[,5])
# Classification method 2, LDA
set.seed(100)
ctrl <- trainControl( repeats = 5, method='cv', number = 5,
allowParallel = FALSE)
model.pca.LDA <- train(Species~., data= pca.train,
method = "lda", trControl = ctrl)
pred.anova.LDA<-predict(model.pca.LDA, pca.test[,-5])
lda.conf<-confusionMatrix(pred.anova.LDA,pca.test[,5])
# Classification method 3, ANN
set.seed(100)
mlpcontrol<-trainControl(method='cv',
number =2, repeats=2, returnResamp = 'none')
model.pca.ann<-train(Species~., data=pca.train, method='mlp',
tuneGrid = data.frame(.size = c(10,20,30,40,50,60,70,80,90,100)),
allowParallel = TRUE, trControl=mlpcontrol)
pred.pca.ann<-predict(model.pca.ann, pca.test[,-5])
ann.conf<-confusionMatrix(pred.pca.ann,pca.test[,5])
对于可重现的示例,将使用iris
数据集;训练和测试:
pca.train<-iris; pca.test<-iris
通过使用 lda.conf$byClass,我可以访问表列表
> lda.conf$byClass
Sensitivity Specificity Pos Pred Value Neg Pred Value Prevalence Detection Rate Detection Prevalence
Class: setosa 1.00 1.00 1.0000000 1.000000 0.3333333 0.3333333 0.3333333
Class: versicolor 0.96 0.99 0.9795918 0.980198 0.3333333 0.3200000 0.3266667
Class: virginica 0.98 0.98 0.9607843 0.989899 0.3333333 0.3266667 0.3400000
从每对数据集和每种方法中,我想在一个表中获得Sensitivity
和......我想,但我不确定如何获得标签以反映分类方法和数据集用过的。所以效果如下:Specificity
Pos Pred
cbind
pca_LDA_Sensitivity pca_lda_Specifi pca_lda_PosPred pca_ANN_Sensistivity svm_LDA_Sensitivity.....
1 1 1 .98
然后我需要相同的(很可能是一个单独的表)通过lda.conf$overall
.
为了安全起见,我可能需要lda.conf$table
每种方法的每对数据集的单独混淆矩阵 ( )。
最后,我想创建一个train
函数的所有结果列表。
我不确定如何继续实现执行上述操作的功能。我知道这个问题很长,但我将不胜感激任何帮助。