我有一个庞大的数据集,而且我对R非常陌生,所以我唯一能想到自己实现100倍简历的方法是通过许多for和if's,这使得我的大型数据集效率极低,甚至可能需要几个小时的编译。我开始寻找这样做的软件包,并在堆栈溢出上发现了与简历相关的相当多的主题,我一直试图使用我找到的那些,但没有一个是为我工作的,我想知道我在这里做错了什么。
例如,来自DAAG
包的代码:
cv.lm(data=Training_Points, form.lm=formula(t(alpha_cofficient_values)
%*% Training_Points), m=100, plotit=TRUE)
..gives me的错误如下:
Error in formula.default(t(alpha_cofficient_values)
%*% Training_Points) : invalid formula
我正在尝试做内核岭回归,因此我已经计算了α系数值。因此,为了得到预测,我只需要做t(alpha_cofficient_values)%*% Test_Points
或简单的crossprod(alpha_cofficient_values,Test_Points)
,这将给我所有未知值的预测。因此,我假设为了测试我的模型,我应该做同样的事情,但是对于已知的值,因此我需要使用我的Training_Points数据集。
我的Training_Points数据集有9000列和9000行。我可以写‘s和if's,做100倍的简历,每次取100行作为test_data,留下8900行用于培训,直到整个数据集完成为止,然后取平均值,然后与我的已知值进行比较。但是,难道没有一个包可以做同样的事情吗?(理想情况下,还可以将预测值与已知值进行比较,并尽可能绘制它们)
请原谅我的基本问题,我对R和交叉验证都很陌生,所以我可能遗漏了一些基本点。
发布于 2016-05-14 18:14:41
CVST软件包实现了基于顺序测试的快速交叉验证。该方法在保持完全交叉验证能力的同时,大大加快了计算速度。此外,包开发人员还添加了默认交叉验证功能。
我以前没有使用过这个包,但是它看起来非常灵活和简单易用。此外,KRR可以通过CVST.learner
函数作为constructKRRLearner()
对象随时使用。要使用交叉功能,首先必须使用CVST.data
函数将数据转换为constructData(x, y)
对象,其中x
为特性数据,y
为标签。接下来,可以使用交叉验证函数之一对定义的参数空间进行优化。您可以根据自己的喜好调整cv
或fastcv
方法的设置。
在交叉验证输出最佳参数之后,可以使用learn
函数创建模型,然后使用predict
新标签创建模型。我对CRAN上的包文档中的一个例子感到困惑。
# contruct CVST.data using constructData(x,y)
# constructData(x,y)
# Load some data..
ns = noisySinc(1000)
# Kernel ridge regression
krr = constructKRRLearner()
# Create parameter Space
params=constructParams(kernel="rbfdot", sigma=10^(-3:3),
lambda=c(0.05, 0.1, 0.2, 0.3)/getN(ns))
# Run Crossval
opt = fastCV(ns, krr, params, constructCVSTModel())
# OR.. much slower!
opt = CV(ns, krr, params, fold=100)
# p = list(kernel=opt[[1]]$kernel, sigma=opt[[1]]$sigma, lambda=opt[[1]]$lambda)
p = opt[[1]]
# Create model
m = krr$learn(ns, p)
# Predict with model
nsTest = noisySinc(10000)
pred = krr$predict(m, nsTest)
# Evaluate..
sum((pred - nsTest$y)^2) / getN(nsTest)
如果需要进一步加速,可以并行运行交叉验证。查看这个职位以获取doparallel
包的示例。
https://stackoverflow.com/questions/37227795
复制相似问题