R语言optim函数优化系数未达预期,求数据动态捕捉方案
针对R语言optim函数优化的解决方案
问题核心
当前优化的目标函数是对10的多项式次方做RSS最小化,存在两个关键问题:
- 160w+样本中低CCI值(接近0)占比过高,掩盖了高值的动态变化信号
- 指数形式的目标函数非线性极强,容易导致通用优化算法陷入局部最优或收敛困难
具体解决方法
1. 转换目标函数,降低优化难度
对原模型取以10为底的对数,将指数模型转化为线性模型,大幅提升优化稳定性:
原模型:CCI = 10^(par₁ + par₂×Landsat + par₃×Landsat² + par₄×Landsat³ + par₅×Landsat⁴)
取对数后:log₁₀(CCI) = par₁ + par₂×Landsat + par₃×Landsat² + par₄×Landsat³ + par₅×Landsat⁴
转换后的目标函数代码:
min.logRSS = function(data, par){ pred_log = par[1] + par[2]*data$Landsat + par[3]*data$Landsat^2 + par[4]*data$Landsat^3 + par[5]*data$Landsat^4 obs_log = log10(data$CCI) sum((obs_log - pred_log)^2, na.rm=TRUE) }
注意:提前过滤CCI <= 0的无效样本,避免对数计算报错
2. 加权优化,聚焦高动态样本
直接给高CCI值或Landsat变化区间的样本赋予更高权重,压制低浓度样本的干扰:
min.weightedRSS = function(data, par){ pred = 10^(par[1]+par[2]*data$Landsat + par[3]*data$Landsat^2 + par[4]*data$Landsat^3 + par[5]*data$Landsat^4) # 高CCI样本用自身值加权,低CCI样本赋予极小权重 weights = ifelse(data$CCI >= 2, data$CCI, 0.1) sum(weights * ((data$CCI - pred)^2), na.rm=TRUE) }
3. 定向筛选样本,替代随机抽样
放弃随机抽样,针对性保留高动态区间的样本:
# 筛选CCI≥2的高浓度样本 + Landsat两端变化大的区间样本 quant_L = quantile(data$Landsat, c(0.1, 0.9), na.rm=TRUE) df_filtered = data[(data$CCI >= 2) | (data$Landsat <= quant_L[1]) | (data$Landsat >= quant_L[2]), ]
这种筛选方式既保留了核心的高CCI样本,又覆盖了Landsat的极端变化区间,比随机抽样更精准。
4. 优化初始参数与算法选择
- 先通过对数转换后的线性回归获取初始参数,避免optim从随机值开始收敛困难:
data_sub = data[data$CCI > 0, ] # 用多项式线性回归得到初始参数 lm_fit = lm(log10(CCI) ~ poly(Landsat, 4, raw=TRUE), data=data_sub) init_par = coef(lm_fit) # 优先使用L-BFGS-B方法,适合带约束的非线性优化 optim_result = optim(par=init_par, fn=min.logRSS, data=data_sub, method="L-BFGS-B")
- 若数据量过大,可对高动态样本分块优化后合并结果,提升运行效率。
5. 使用专用非线性最小二乘工具
如果optim效率仍不理想,改用minpack.lm包的nlsLM函数,专门针对非线性最小二乘优化,效率远高于通用optim:
library(minpack.lm) # 定义模型公式 model_formula = CCI ~ 10^(a + b*Landsat + c*Landsat^2 + d*Landsat^3 + e*Landsat^4) # 用线性回归结果作为初始参数 init_nls = list(a=init_par[1], b=init_par[2], c=init_par[3], d=init_par[4], e=init_par[5]) # 拟合模型 nls_fit = nlsLM(model_formula, data=data_sub, start=init_nls) # 提取优化后的系数 coef(nls_fit)
内容的提问来源于stack exchange,提问作者Aurélien Lengrand
相关产品推荐
相关产品推荐

