首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >R中岭回归的100倍交叉验证

R中岭回归的100倍交叉验证
EN

Stack Overflow用户
提问于 2016-05-14 06:22:03
回答 1查看 989关注 0票数 1

我有一个庞大的数据集,而且我对R非常陌生,所以我唯一能想到自己实现100倍简历的方法是通过许多for和if's,这使得我的大型数据集效率极低,甚至可能需要几个小时的编译。我开始寻找这样做的软件包,并在堆栈溢出上发现了与简历相关的相当多的主题,我一直试图使用我找到的那些,但没有一个是为我工作的,我想知道我在这里做错了什么。

例如,来自DAAG包的代码:

代码语言:javascript
运行
AI代码解释
复制
cv.lm(data=Training_Points, form.lm=formula(t(alpha_cofficient_values)
%*% Training_Points), m=100, plotit=TRUE)

..gives me的错误如下:

代码语言:javascript
运行
AI代码解释
复制
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和交叉验证都很陌生,所以我可能遗漏了一些基本点。

EN

回答 1

Stack Overflow用户

发布于 2016-05-14 18:14:41

CVST软件包实现了基于顺序测试的快速交叉验证。该方法在保持完全交叉验证能力的同时,大大加快了计算速度。此外,包开发人员还添加了默认交叉验证功能。

我以前没有使用过这个包,但是它看起来非常灵活和简单易用。此外,KRR可以通过CVST.learner函数作为constructKRRLearner()对象随时使用。要使用交叉功能,首先必须使用CVST.data函数将数据转换为constructData(x, y)对象,其中x为特性数据,y为标签。接下来,可以使用交叉验证函数之一对定义的参数空间进行优化。您可以根据自己的喜好调整cvfastcv方法的设置。

在交叉验证输出最佳参数之后,可以使用learn函数创建模型,然后使用predict新标签创建模型。我对CRAN上的包文档中的一个例子感到困惑。

代码语言:javascript
运行
AI代码解释
复制
# 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包的示例。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37227795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档