【发布时间】:2021-02-06 17:36:02
【问题描述】:
我将我的代码从 octave 传递给 julia,在这种情况下是逻辑回归。除了初始 theta 之外,梯度函数还需要 X 和我的特征,Y 和寻找的值。
在 Octave 作品中
function [J, grad] = costFunction(theta, X, y)options = optimset('GradObj', 'on', 'MaxIter', 400);[theta, cost] = fminunc(@(t)(costFunction(t, X, y)), initial_theta, options);
关于 Julia 的第一次尝试
optimize(t->CostFunction(t, X1, y), initial_theta, BFGS())
MethodError: 没有方法匹配 -(::Tuple{Float64,Array{Float64,2}}, ::Tuple{Float64,Array{Float64,2}})
所以我将函数分为两部分:成本和梯度
function CostFunction2(theta, X, 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, X1, y), initial_theta, BFGS())
我试过了,但没有用,我找不到任何说明如何或提供示例的参考
optimize(t->CostFunction2(t, X1, y), Gradient2(X, y, t), initial_theta, BFGS())
UndefVarError: t 未定义
如何获得获得的 theta 值?以及如何将我自己的梯度函数包含在各种参数中?
希望你能帮帮我,非常感谢
【问题讨论】:
-
您能否一次性发布您的整个代码。似乎存在一些简单的问题(很可能是您以不正确的方式混合了标量和向量)。特别注意,在对
optimize的调用中,initial_theta变量应该是向量而不是标量。 -
data = load('data.txt');987654331[m, n] = size(X);987654333initial_theta = zeros(n + 1, 1);987654335J = 0;987654337grad = zeros(size(theta));987654339grad = (1/m) * (sum((sigmoid(X*theta)-y) .* X))';987654341options = optimset('GradObj', 'on', 'MaxIter', 400);987654343 @fprintf('Cost:%f theta:%f \n',cost,theta); -
` 使用 DelimitedFiles;数据 = readdlm("ex2data1.txt", ',', Float64); X = 数据[:,1:2]; y = 数据[:,3]; m = 长度(y); `` m,n = 大小(X); X = [个(m,1) X]; initial_theta = zeros(n + 1, 1); `` 函数 CostFunction2(theta, X, y) J = 0; #m = 长度(y); m = 大小(y,1);毕业=零(大小(θ)); J = 1/m * sum( (-y .* log.(sigmoid(Xtheta))) - ((1.0 .- y) . log.(1.0 .- sigmoid(Xθ))));返回 J;结束函数 Gradient2(X, y, theta) grad = zeros(size(theta)); grad = (1/m) . (sum((sigmoid(Xtheta).-y) . X, dims=1))';返回毕业生;结束`
-
` 使用 Optim;优化(t->CostFunction2(t, X1, y), Gradient2(X, y, t), initial_theta, BFGS()); `
-
对不起代码格式。第一部分是我在 Octave 中是如何做到的,另外两个是我在 Julia 中是如何做到的。谢谢
标签: matlab optimization julia octave gradient