微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从Octave的fminunc到Julia的参数优化梯度函数

如何解决从Octave的fminunc到Julia的参数优化梯度函数

我正在将我的代码从八度传递给julia,在这种情况下是逻辑回归。梯度函数除初始theta之外,还包含X代表我的特征,Y代表所寻求的值。

在八度音阶中

function [J,grad] = costFunction(theta,X,y)
options = optimset('Gradobj','on','MaxIter',400);
[theta,cost] = fminunc(@(t)(costFunction(t,y)),initial_theta,options);

朱莉娅先尝试

optimize(t->CostFunction(t,X1,y),BFGS())

MethodError:没有方法匹配-(:: Tuple {Float64,Array {Float64,2}},:: Tuple {Float64,Array {Float64,2}})

所以我将函数分为两个:成本和梯度

function CostFunction2(theta,y)
J = 0;
#m = length(y);
m = size(y,1);
grad = zeros(size(theta));
J = 1/m * sum( (-y .* log.(sigmoid(X*theta))) - ((1.0 .- y) .* log.(1.0 .- sigmoid(X*theta))) );
return J;
end


function Gradient2(X,y,theta)
grad = zeros(size(theta));
grad = (1/m) .* (sum((sigmoid(X*theta).-y) .* X,dims=1))';
return grad;
end

我只放了成本函数,它起作用了,但是我没有theta的最后一个值。我不知道怎么得到

optimize(t->CostFunction2(t,BFGS())

我尝试了此方法,但是它没有用,而且找不到任何说明如何或带来示例的参考文献

optimize(t->CostFunction2(t,Gradient2(X,t),BFGS())

undefvarerror:未定义

如何获取获得的theta值?以及如何将自己的渐变函数包含在各种参数中?

希望您能帮助我,非常感谢

解决方法

我已经清除了代码中的错别字,添加了缺少的定义,并删除了不必要的操作。

进行这些更改后,将完成以下工作:

using DelimitedFiles

Data = readdlm("ex2data1.txt",',Float64)
X = Data[:,1:2]
y = Data[:,3]
m,n = size(X)
X = [ones(m) X]
initial_theta = zeros(n + 1)

sigmoid(x) = 1 / (1 + exp(-x))

function CostFunction2(theta,X,y)
    Xt = X*theta # do this step outside as it is repeated twice otherwise
    return sum(-y .* log.(sigmoid.(Xt)) .- (1.0 .- y) .* log.(1.0 .- sigmoid.(Xt)))
end

using Optim
optimize(t->CostFunction2(t,Y),initial_theta,BFGS())

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。