В настоящее время я застрял, пытаясь использовать пакет Optim в Julia, чтобы минимизировать функцию затрат. Функция затрат - это функция затрат для регуляризованной регрессии L2 c. Он построен следующим образом:
using Optim
function regularised_cost(X, y, θ, λ)
m = length(y)
# Sigmoid predictions
h = sigmoid(X * θ)
# left side of the cost function
positive_class_cost = ((-y)' * log.(h))
# right side of the cost function
negative_class_cost = ((1 .- y)' * log.(1 .- h))
# lambda effect
lambda_regularization = (λ/(2*m) * sum(θ[2 : end] .^ 2))
# Current batch cost
? = (1/m) * (positive_class_cost - negative_class_cost) + lambda_regularization
# Gradients for all the theta members with regularization except the constant
∇? = (1/m) * (X') * (h-y) + ((1/m) * (λ * θ))
∇?[1] = (1/m) * (X[:, 1])' * (h-y) # Exclude the constant
return (?, ∇?)
end
Я хотел бы использовать алгоритм LBFGS в качестве решателя, чтобы найти лучшие веса, которые минимизируют эту функцию, на основе моих обучающих примеров и меток, которые определены как:
opt_train = [ones(size(X_train_scaled, 1)) X_train_scaled] # added intercept
initial_theta = zeros(size(opt_train, 2))
Прочитав документацию, вот моя текущая реализация, которая в настоящее время не работает:
cost, gradient! = regularised_cost(opt_train, y_train, initial_theta, 0.01)
res = optimize(regularised_cost,
gradient!,
initial_theta,
LBFGS(),
Optim.Options(g_tol = 1e-12,
iterations = 1000,
store_trace = true,
show_trace = true))
Как передать обучающие примеры и метки вместе с градиентами, чтобы решатель (LBFGS) мог найти мне лучшие веса для тета?