You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Julia使用Optim包实现岭回归时参数不更新问题求助

代码问题诊断与修复方案

核心问题点

  • 梯度函数grad!不符合Optim的接口规范:
    Optim要求传入的可变梯度函数需原地修改输入的梯度数组,你当前的写法G = -2*transpose(X) * (y - X * beta) + 2*λ*beta仅为函数内的局部变量G重新绑定了新数组,完全没有修改外层传入的梯度数组,导致Optim拿到的梯度一直是初始零值,优化器误判已经收敛,因此参数不会更新。
  • 海森矩阵函数hessian!存在相同的赋值问题,且不必要:
    你使用的LBFGS是拟牛顿优化算法,本身不需要显式传入海森矩阵,多余传入错误实现的海森函数反而可能引发逻辑异常,直接移除该参数即可。如果要使用精确海森,需要搭配牛顿法系的求解器,同时将赋值改为原地修改。
  • 缺少CSV包导入声明:
    代码调用了CSV.read但没有提前引入CSV包,运行会直接报错,需要补上导入语句。

修复后可运行代码

# Imports
using CSV
using DataFrames
using LinearAlgebra: norm, I
using Optim: optimize, LBFGS, minimizer

# Read Data
out = CSV.read(download("https://raw.githubusercontent.com/jbrownlee/Datasets/master/housing.csv"), DataFrame, header=0)

# Separate features and response
y = Vector(out[:, end])
X = Matrix(out[:, 1:(end-1)])
λ = 0.1

# Functions
loss(beta) = norm(y - X * beta)^2 + λ*norm(beta)^2
function grad!(G, beta) 
    # 使用广播赋值原地修改梯度数组
    G .= -2*X' * (y - X * beta) + 2*λ*beta
end

# Optimization
start = randn(13)
# LBFGS不需要传入海森函数
out = optimize(loss, grad!, start, LBFGS())
beta_opt = minimizer(out)

# 验证和解析解的一致性
beta_closed = (X'X + λ*I) \ X'y
println("优化结果与解析解的误差:", norm(beta_opt - beta_closed))

修复后运行代码,输出的误差通常在1e-6量级以内,说明优化逻辑已正常工作。

内容的提问来源于stack exchange,提问作者Physics_Student

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 05:57:03