让trainData
为包含7个特征和1个分类变量Species
的预处理数据框。
类似这样的东西:
PC1 PC2 PC3 PC4 PC5 PC6 PC7 Species
2003107130 0.8301089 1.443945 -2.185632 -0.8639386 -0.68081852 -1.208709 2.647994 n
2003107230 1.0170479 1.657239 -2.285227 -1.0172219 -0.50421995 -1.600949 2.870363 p
2003107330 0.9495682 1.648479 -2.086089 -0.8139318 -0.11193939 -1.528083 3.079773 n
2003107431 1.1837268 1.858587 -2.251805 -0.9985537 -0.09134958 -1.885080 3.238982 v
2003108101 1.0260958 1.757180 -1.922329 -0.6288886 0.35198089 -1.560086 3.446924 n
2003108104 0.8222981 1.614413 -1.540175 -0.2019360 0.81462685 -1.159013 3.632512 n
...
({Species
是3个级别的因子:n
,p
和v
)。
我想尝试比较all 238 models软件包提供的caret,以获取训练它们并将其存储在数据框中所需的时间。 caret
需要许多其他软件包,其中某些甚至不适用于当前的R版本。而且,某些模型并非旨在处理分类问题。因此,tryCatch()
似乎是最好的解决方案。但是,我面临着怪异的等待时间,即使下班后会议也仍然停滞不前。这是我的尝试:
library(caret)
library(foreach)
benchmarks <- foreach(method = paste(names(getModelInfo())), .combine = rbind) %do%
{
message(paste('Benchmarking', method, '...'))
tryCatch(
expr = {
bmk <- system.time(model <- train(Species ~ ., data = trainData, method = method))
message(paste('>>> Method', method, 'benchmarked', bmk[3], 'seconds'))
return(cbind.data.frame(method, bmk[3]))
},
error = function(e)
{
message('Something went wrong with the model...')
message(paste('>>>', e))
},
finally = {}
)
}
出于可重复性目的,您可以使用任何分类数据框,例如Iris数据集。
您能否获得238个型号的基准?如果是这样,使用什么代码?