Moh*_*aad 5 julia train-test-split
我正在尝试将数据集拆分为 Julia 中的训练子集和测试子集。到目前为止,我已经尝试使用MLDataUtils.jl包进行此操作,但是结果未达到预期。\n以下是我的发现和问题:
\n代码
\n# the inputs are\n\na = DataFrame(A = [1, 2, 3, 4,5, 6, 7, 8, 9, 10],\n B = [1, 2, 3, 4,5, 6, 7, 8, 9, 10],\n C = [1, 2, 3, 4,5, 6, 7, 8, 9, 10]\n )\nb = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\n\nusing MLDataUtils\n(x1, y1), (x2, y2) = stratifiedobs((a,b), p=0.7)\n\n#Output of this operation is: (which is not the expectation)\nprintln("x1 is: $x1")\nx1 is:\n10\xc3\x973 DataFrame\n\xe2\x94\x82 Row \xe2\x94\x82 A \xe2\x94\x82 B \xe2\x94\x82 C \xe2\x94\x82\n\xe2\x94\x82 \xe2\x94\x82 Int64 \xe2\x94\x82 Int64 \xe2\x94\x82 Int64 \xe2\x94\x82\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4\n\xe2\x94\x82 1 \xe2\x94\x82 1 \xe2\x94\x82 1 \xe2\x94\x82 1 \xe2\x94\x82\n\xe2\x94\x82 2 \xe2\x94\x82 2 \xe2\x94\x82 2 \xe2\x94\x82 2 \xe2\x94\x82\n\xe2\x94\x82 3 \xe2\x94\x82 3 \xe2\x94\x82 3 \xe2\x94\x82 3 \xe2\x94\x82\n\xe2\x94\x82 4 \xe2\x94\x82 4 \xe2\x94\x82 4 \xe2\x94\x82 4 \xe2\x94\x82\n\xe2\x94\x82 5 \xe2\x94\x82 5 \xe2\x94\x82 5 \xe2\x94\x82 5 \xe2\x94\x82\n\xe2\x94\x82 6 \xe2\x94\x82 6 \xe2\x94\x82 6 \xe2\x94\x82 6 \xe2\x94\x82\n\xe2\x94\x82 7 \xe2\x94\x82 7 \xe2\x94\x82 7 \xe2\x94\x82 7 \xe2\x94\x82\n\xe2\x94\x82 8 \xe2\x94\x82 8 \xe2\x94\x82 8 \xe2\x94\x82 8 \xe2\x94\x82\n\xe2\x94\x82 9 \xe2\x94\x82 9 \xe2\x94\x82 9 \xe2\x94\x82 9 \xe2\x94\x82\n\xe2\x94\x82 10 \xe2\x94\x82 10 \xe2\x94\x82 10 \xe2\x94\x82 10 \xe2\x94\x82\n\nprintln("y1 is: $y1")\ny1 is:\n10-element Array{Int64,1}:\n 1\n 2\n 3\n 4\n 5\n 6\n 7\n 8\n 9\n 10\n\n# but x2 is printed as \n(0\xc3\x973 SubDataFrame, Float64[]) \n\n# while y2 as \n0-element view(::Array{Float64,1}, Int64[]) with eltype Float64)\n
Run Code Online (Sandbox Code Playgroud)\n但是,我希望将此数据集分为两部分,其中 70% 的数据在训练中,30% 的数据在测试中。\n请建议一种更好的方法在 julia 中执行此操作。\n提前致谢。
\n也许 MLJ.jl 开发人员可以向您展示如何使用通用生态系统来做到这一点。这是仅使用 DataFrames.jl 的解决方案:
\njulia> using DataFrames, Random\n\njulia> a = DataFrame(A = [1, 2, 3, 4,5, 6, 7, 8, 9, 10],\n B = [1, 2, 3, 4,5, 6, 7, 8, 9, 10],\n C = [1, 2, 3, 4,5, 6, 7, 8, 9, 10]\n )\n10\xc3\x973 DataFrame\n Row \xe2\x94\x82 A B C \n \xe2\x94\x82 Int64 Int64 Int64 \n\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\n 1 \xe2\x94\x82 1 1 1\n 2 \xe2\x94\x82 2 2 2\n 3 \xe2\x94\x82 3 3 3\n 4 \xe2\x94\x82 4 4 4\n 5 \xe2\x94\x82 5 5 5\n 6 \xe2\x94\x82 6 6 6\n 7 \xe2\x94\x82 7 7 7\n 8 \xe2\x94\x82 8 8 8\n 9 \xe2\x94\x82 9 9 9\n 10 \xe2\x94\x82 10 10 10\n\njulia> function splitdf(df, pct)\n @assert 0 <= pct <= 1\n ids = collect(axes(df, 1))\n shuffle!(ids)\n sel = ids .<= nrow(df) .* pct\n return view(df, sel, :), view(df, .!sel, :)\n end\nsplitdf (generic function with 1 method)\n\njulia> splitdf(a, 0.7)\n(7\xc3\x973 SubDataFrame\n Row \xe2\x94\x82 A B C \n \xe2\x94\x82 Int64 Int64 Int64 \n\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\n 1 \xe2\x94\x82 3 3 3\n 2 \xe2\x94\x82 4 4 4\n 3 \xe2\x94\x82 6 6 6\n 4 \xe2\x94\x82 7 7 7\n 5 \xe2\x94\x82 8 8 8\n 6 \xe2\x94\x82 9 9 9\n 7 \xe2\x94\x82 10 10 10, 3\xc3\x973 SubDataFrame\n Row \xe2\x94\x82 A B C \n \xe2\x94\x82 Int64 Int64 Int64 \n\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\n 1 \xe2\x94\x82 1 1 1\n 2 \xe2\x94\x82 2 2 2\n 3 \xe2\x94\x82 5 5 5)\n
Run Code Online (Sandbox Code Playgroud)\n我使用视图来节省内存,但如果您愿意,您也可以具体化训练和测试数据帧。
\n 归档时间: |
|
查看次数: |
3054 次 |
最近记录: |