Optim.jl 简单逻辑回归
Optim.jl on simple logistic regression
我知道以前有人问过这个问题,但 中提供的答案不再有效。我的代码看起来像这样....
sigmoid(x) = 1 ./ (1 .+ exp.(-x));
function costfunction(θ,X,y)
m = length(y);
J = 0;
grad = zeros(size(θ));
c(X,i,θ)=sigmoid(θ[1]+X[i,2]*θ[2]+X[i,3]*θ[3]);
for i in 1:m
d = c(X,i,θ);
J += y[i]==0 ? (-log(1-d)) : (-log(d));
end
J/=m;
for i in 1 : length(θ)
for j in 1:m
grad[i] += (c(X,j,θ) - y[j])*X[j,i];
end
grad[i]/=m;
end
return J,grad;
end
cost, grad! = costfunction(initial_theta,X,y);
res = optimize(cost, grad!, , method = ConjugateGradient(), iterations = 1000); `
initial_theta 是 [0,0,0]
X是一个99x3的DataFrame(第一列是1s),y是一个有99个元素的向量
如何使用 Optim.jl 找到最小化函数的 theta?
cost(θ)=costfunction(θ,X,y)[1];
grad!(θ)=costfunction(θ,X,y)[2];
res = optimize(cost, grad!, initial_theta, LBFGS();inplace = false);
θ = Optim.minimizer(res);
inplace = false 参数在 optim.jl 文档中
https://julianlsolvers.github.io/Optim.jl/stable/#user/minimization/
我知道以前有人问过这个问题,但
sigmoid(x) = 1 ./ (1 .+ exp.(-x));
function costfunction(θ,X,y)
m = length(y);
J = 0;
grad = zeros(size(θ));
c(X,i,θ)=sigmoid(θ[1]+X[i,2]*θ[2]+X[i,3]*θ[3]);
for i in 1:m
d = c(X,i,θ);
J += y[i]==0 ? (-log(1-d)) : (-log(d));
end
J/=m;
for i in 1 : length(θ)
for j in 1:m
grad[i] += (c(X,j,θ) - y[j])*X[j,i];
end
grad[i]/=m;
end
return J,grad;
end
cost, grad! = costfunction(initial_theta,X,y);
res = optimize(cost, grad!, , method = ConjugateGradient(), iterations = 1000); `
initial_theta 是 [0,0,0]
X是一个99x3的DataFrame(第一列是1s),y是一个有99个元素的向量
如何使用 Optim.jl 找到最小化函数的 theta?
cost(θ)=costfunction(θ,X,y)[1];
grad!(θ)=costfunction(θ,X,y)[2];
res = optimize(cost, grad!, initial_theta, LBFGS();inplace = false);
θ = Optim.minimizer(res);
inplace = false 参数在 optim.jl 文档中 https://julianlsolvers.github.io/Optim.jl/stable/#user/minimization/