Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中岭回归的100倍交叉验证_R_Cross Validation - Fatal编程技术网

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

R中岭回归的100倍交叉验证,r,cross-validation,R,Cross Validation,我有一个巨大的数据集,而且我对R非常陌生,所以我能想到的实现100倍CV的唯一方法是通过许多for和if,这使得我的巨大数据集效率极低,甚至可能需要几个小时来编译。我开始寻找这样做的软件包,并在stackoverflow上找到了很多与CV相关的主题,我一直在尝试使用我找到的那些主题,但没有一个适合我,我想知道我在这里做错了什么 例如,此代码来自DAAG软件包: cv.lm(data=Training_Points, form.lm=formula(t(alpha_cofficient_value

我有一个巨大的数据集,而且我对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\u cofficient\u值)%*%Test\u点
或者简单地
crossprod(alpha\u cofficient\u值,Test\u点)
,这将给出未知值的所有预测。所以我假设为了测试我的模型,我应该做同样的事情,但是对于已知的值,因此我需要使用我的训练点数据集

我的训练点数据集有9000列和9000行。我可以写for's和if's,每次做100倍CV,取100行作为测试数据,留下8900行进行训练,直到完成整个数据集,然后取平均值,然后与已知值进行比较。但是,难道没有一个包可以做同样的事情吗?(理想情况下,还应将预测值与已知值进行比较,如果可能,绘制它们)

请原谅我的基本问题,我对R和交叉验证都很陌生,所以我可能缺少一些基本点。

工具。该方法在保持完全交叉验证能力的同时显著加快了计算速度。此外,包开发人员还添加了默认的交叉验证功能

我以前没有使用过这个软件包,但是它看起来非常灵活和简单。此外,通过
constructKRRLearner()
函数,KRR作为
CVST.learner
对象随时可用。 要使用crossval功能,您必须首先使用
constructData(x,y)
功能将数据转换为
CVST.data
对象,并使用
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
软件包的示例。

我不太明白您是如何获得系数的,因为100种不同型号的系数会有所不同?那么,你有一个9000 x 100的系数矩阵吗?你可以使用插入符号包(一旦我检查了运行所需的时间,我会添加一个答案)。拥有9k预测变量确实不可避免地会让它变得相当缓慢。您需要进行100倍交叉验证吗?10倍是否合理?啊,插入符号没有内置内核岭回归。你必须加上它。