如何在julia中执行交叉验证(K-fold)?
假设我有一个包含两列的数据集。我已经在我的数据集上建立了线性回归模型,现在我的问题是如何检查模型的准确性 我发现我的问题的答案是在我的数据集上应用K倍。我知道K-fold是如何工作的,但我不知道如何在我的Julia程序中实现K-fold如何在julia中执行交叉验证(K-fold)?,julia,Julia,假设我有一个包含两列的数据集。我已经在我的数据集上建立了线性回归模型,现在我的问题是如何检查模型的准确性 我发现我的问题的答案是在我的数据集上应用K倍。我知道K-fold是如何工作的,但我不知道如何在我的Julia程序中实现K-fold #suppose I have two columns x and y in my dataset x= [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20] y=[2,3,4,5,6,7,8,9,10,
#suppose I have two columns x and y in my dataset
x= [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
y=[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21]
# now how do I use K-fold to split dataset and also evaluate my algorithm?
正如注释中提到的,一旦给出了任何基本源代码,就可以更容易地设置一些代码。例如,在这种情况下,K-折叠交叉验证可能需要进行如下准备:
julia> x= [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20];
julia> y=[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21];
julia> K = 5 # number of folds in validation
5
julia> N = length(x) # number of samples in dataset
20
julia> stops = round.(Int,linspace(1,N,K+1))
6-element Array{Int64,1}:
1
5
9
12
16
20
julia> vsets = [s:e-(e<N)*1 for (s,e) in zip(stops[1:end-1],stops[2:end])]
5-element Array{UnitRange{Int64},1}:
1:4
5:8
9:11
12:15
16:20
julia> tsets1 = [1:s-1 for (s,e) in zip(stops[1:end-1],stops[2:end])]
5-element Array{UnitRange{Int64},1}:
1:0
1:4
1:8
1:11
1:15
julia> tsets2 = [e+(e<=N)*1:N for (s,e) in zip(stops[1:end-1],stops[2:end])]
5-element Array{UnitRange{Int64},1}:
6:20
10:20
13:20
17:20
21:20
julia> σ = randperm(N);
julia> [x[σ[vsets[i]]] for i=1:K] # validation sets
5-element Array{Array{Int64,1},1}:
[5, 13, 6, 10]
[16, 4, 2, 3]
[9, 19, 20]
[17, 12, 14, 11]
[8, 1, 18, 7, 15]
julia> [x[vcat(σ[tsets1[i]],σ[tsets2[i]])] for i=1:K] # training sets
5-element Array{Array{Int64,1},1}:
[4, 2, 3, 9, 19, 20, 17, 12, 14, 11, 8, 1, 18, 7, 15]
[5, 13, 6, 10, 19, 20, 17, 12, 14, 11, 8, 1, 18, 7, 15]
[5, 13, 6, 10, 16, 4, 2, 3, 12, 14, 11, 8, 1, 18, 7, 15]
[5, 13, 6, 10, 16, 4, 2, 3, 9, 19, 20, 1, 18, 7, 15]
[5, 13, 6, 10, 16, 4, 2, 3, 9, 19, 20, 17, 12, 14, 11]
julia>x=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20];
julia>y=[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21];
julia>K=5#验证中的折叠数
5.
julia>N=长度(x)#数据集中的样本数
20
julia>stops=round(Int,linspace(1,N,K+1))
6元素数组{Int64,1}:
1.
5.
9
12
16
20
julia>vsets=[s:e-(e tsets1=[1:s-1,用于zip中的(s,e)(停止[1:end-1],停止[2:end])]
五元素数组{UnitRange{Int64},1}:
1:0
1:4
1:8
1:11
1:15
julia>tsets2=[e+(eσ=randperm(N);
julia>[x[σ[vsets[i]]]对于i=1:K]#验证集
五元素数组{Array{Int64,1},1}:
[5, 13, 6, 10]
[16, 4, 2, 3]
[9, 19, 20]
[17, 12, 14, 11]
[8, 1, 18, 7, 15]
julia>[x[vcat(σ[tsets1[i]],σ[tsets2[i]])]用于i=1:K]#训练集
五元素数组{Array{Int64,1},1}:
[4, 2, 3, 9, 19, 20, 17, 12, 14, 11, 8, 1, 18, 7, 15]
[5, 13, 6, 10, 19, 20, 17, 12, 14, 11, 8, 1, 18, 7, 15]
[5, 13, 6, 10, 16, 4, 2, 3, 12, 14, 11, 8, 1, 18, 7, 15]
[5, 13, 6, 10, 16, 4, 2, 3, 9, 19, 20, 1, 18, 7, 15]
[5, 13, 6, 10, 16, 4, 2, 3, 9, 19, 20, 17, 12, 14, 11]
这可能是令人满意的。有关K-fold交叉验证的更多详细信息,请访问Wikipedia:您可以从中使用
fold
向问题添加代码可以提高答案的速度和相关性。添加运行代码更好。我已经用示例代码更新了帖子!我认为共享我模型的源代码也没有意义!最好是随机洗牌数据集,或者通过随机排列传递数据,以确保条件是正确的ght获得公正的结果。好的,是的。这样做,然后使用这个,当然。谢谢你的努力,我认为这太详细了。我只是想知道如何使用Julia中提供的软件包中的Kfold。无论如何,我现在知道如何使用Kfold了
kfolds([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],5)