如何解决从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 举报,一经查实,本站将立刻删除。