KDB中使用BFGS求解线性模型报type错误的原因是什么
问题原因
- 目标函数参数解析错误:
.ml.optimize.BFGS会将待优化参数以单个一维向量的形式传入你定义的误差函数,你传入的初始值x0:1 1是长度为2的向量,对应要拟合的斜率、截距两个参数,但你写的error函数没有正确解构该入参,还用到了未定义的变量y,直接导致类型报错。 - 误差计算公式逻辑错误:你写的残差计算逻辑
(yy - (xx*x) + y)不符合线性回归残差实际值 - 预测值的要求,符号使用错误,正确的预测值应该是斜率*xx + 截距,残差为yy - (斜率*xx + 截距)。
修正后代码
\l ml/ml.q .ml.loadfile`:optimize/init.q xx: 9h$til 10 yy: ((xx)*3) + 4 x0: 1 1 // 先解构入参向量,再计算误差 error:{[params] w: params[0]; b: params[1]; sum xexp[yy - (w*xx + b); 2]; } // 运行优化 .ml.optimize.BFGS[error;x0;();::]
运行后返回的结果会接近你预期的3 4。
内容的提问来源于stack exchange,提问作者cjm2671
相关产品推荐
相关产品推荐

