gpt4 book ai didi

Julia on Float 与 Octave on Float

转载 作者:行者123 更新时间:2023-12-02 08:24:10 26 4
gpt4 key购买 nike

版本:v"0.5.0-dev+1259"

上下文:目标是根据 VC 维度 dvc 和概率计算给定数据点 n 上的 Rademacher 惩罚边界用delta

表示

请考虑 Julia 代码:

#Growth function on any n points with respect to VC-dimmension 
function mh(n, dvc)
if n <= dvc
2^n #A
else
n^dvc #B
end
end

#Rademacher penalty bound
function rademacher_penalty_bound(n::Int, dvc::Int, delta::Float64)
sqrt((2.0*log(2.0*n*mh(n,dvc)))/n) + sqrt((2.0/n)*log(1.0/delta)) + 1.0/n
end

以及 Octave/Matlab 中的等效代码:

%Growth function on n points for a give VC dimmension (dvc)
function md = mh(n, dvc)
if n <= dvc
md= 2^n;
else
md = n^dvc;
end
end

%Rademacher penalty bound
function epsilon = rademacher_penalty_bound (n, dvc, delta)
epsilon = sqrt ((2*log(2*n*mh(n,dvc)))/n) + sqrt((2/n)*log(1/delta)) + 1/n;
end

问题:当我开始测试它时,我收到以下结果:

首先是 Julia :

julia> rademacher_penalty_bound(50, 50, 0.05) #50 points
1.619360057204432

julia> rademacher_penalty_bound(500, 50, 0.05) #500 points
ERROR: DomainError:
[inlined code] from math.jl:137
in rademacher_penalty_bound at none:2
in eval at ./boot.jl:264

现在 Octave :

octave:17> rademacher_penalty_bound(50, 50, 0.05)
ans = 1.6194
octave:18> rademacher_penalty_bound(500, 50, 0.05)
ans = 1.2387

问题:根据Noteworthy differences from MATLAB我想我遵循了经验法则(“没有小数点的文字数字(例如 42)创建整数而不是 float ......”)。当点数超过 51 时代码崩溃(mh 中的#B 行)。有经验的人可以看看代码并说出我应该改进/更改的地方吗?

最佳答案

虽然 BigIntBigFloat 可以在这里工作,但它们严重矫枉过正。真正的问题是您在 Julia 中进行整数取幂,在 Octave/Matlab 中进行浮点取幂。所以你只需要改变 mh 来使用 float 而不是整数作为指数:

mh(n, dvc) = n <= dvc ? 2^float(n) : n^float(dvc)

rademacher_penalty_bound(n, dvc, δ) =
√((2log(2n*mh(n,dvc)))/n) + √(2log(1/δ)/n) + 1/n

使用这些定义,您将获得与 Octave/Matlab 相同的结果:

julia> rademacher_penalty_bound(50, 50, 0.05)
1.619360057204432

julia> rademacher_penalty_bound(500, 50, 0.05)
1.2386545010981596

在 Octave/Matlab 中,即使您输入一个没有小数点的文字,您仍然会得到一个 float ——您必须显式转换为 int 类型。此外,Octave/Matlab 中的求幂总是首先转换为 float 。在 Julia 中,x^2 等同于 x*x,它禁止转换为 float 。

关于Julia on Float 与 Octave on Float,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33752406/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com