【发布时间】:2016-09-10 16:49:22
【问题描述】:
我有一个庞大的数据集,而且我对 R 很陌生,所以我能想到自己实现 100 倍 CV 的唯一方法是通过许多 for 和 if 的方法,这对于我的庞大数据集来说效率极低,并且甚至可能需要几个小时来编译。我开始寻找执行此操作的软件包,并在 stackoverflow 上找到了很多与 CV 相关的主题,我一直在尝试使用我找到的那些,但没有一个对我有用,我想知道我做错了什么在这里。
例如,DAAG 包中的这段代码:
cv.lm(data=Training_Points, form.lm=formula(t(alpha_cofficient_values)
%*% Training_Points), m=100, plotit=TRUE)
..给我以下错误:
Error in formula.default(t(alpha_cofficient_values)
%*% Training_Points) : invalid formula
我正在尝试进行内核岭回归,因此我已经计算了 alpha 系数值。因此,为了获得预测,我只需要t(alpha_cofficient_values)%*% Test_Points 或简单地crossprod(alpha_cofficient_values,Test_Points),这将为我提供未知值的所有预测。所以我假设为了测试我的模型,我应该做同样的事情,但对于 KNOWN 值,因此我需要使用我的 Training_Points 数据集。
我的 Training_Points 数据集有 9000 列和 9000 行。我可以写for和if,每次做100倍CV,取100行作为test_data,留下8900行进行训练,直到整个数据集完成,然后取平均值,然后与我的已知值进行比较。但是没有一个包可以做同样的事情吗? (理想情况下,还可以将预测值与已知值进行比较并绘制它们,如果可能的话)
请原谅我的基本问题,我对 R 和交叉验证都很陌生,所以我可能会遗漏一些基本点。
【问题讨论】:
-
我不太明白您是如何获得系数的,因为 100 种不同模型的系数会有所不同?那么你有一个 9000 x 100 的系数矩阵吗?
-
你可以使用 caret 包(一旦我检查了运行需要多长时间,我会添加一个答案)。拥有 9k 个预测变量确实不可避免地会使其相当慢。需要做100折交叉验证吗? 10折合理吗?
-
啊,插入符号没有内置内核岭回归。您必须添加它。
标签: r cross-validation