KDB如何编写高级函数/对象并输出线性回归拟合的结构化结果
KDB线性回归结果结构化输出解决方案
报错原因
你之前构造字典时触发非方形报错,核心是KDB的列表语法规则:
- 用空格分隔的列表(如
(intercept coef))默认要求所有元素为同类型、同长度的同构数据,而intercept是原子数值、coef是系数向量,二者长度不一致,自然构造失败。 - 包含异构元素的列表必须用分号分隔,写法为
(intercept; coef; rSquared)。
修正后的完整代码
同时你原代码中的截距、R²计算逻辑存在适用范围限制,这里也给出标准最小二乘的修正实现:
fit: { // 计算回归系数 coef: enlist[y] lsq flip x; // 标准截距计算(原逻辑仅适用于x已提前去中心化的场景) intercept: avg[y] - avg[x] mmu raze coef; // 计算拟合值与R² yPred: intercept + raze[coef] mmu flip x; ssRes: sum (y - yPred) xexp 2; // 残差平方和 ssTot: sum (y - avg y) xexp 2; // 总平方和 rSquared: 1 - ssRes % ssTot; // 用分号分隔异构值构造字典返回 `intercept`coef`rSquared!(intercept; coef; rSquared) }
配套predict函数实现
返回的字典可以直接传入预测函数调用:
// 预测函数:输入拟合模型、新的x特征数据,返回预测结果 predict: {[model; newX] model[`intercept] + raze model[`coef] mmu flip newX } // 调用示例 model: fit[x;y] // 拟合得到模型字典 predY: predict[model; newX] // 新数据预测
内容的提问来源于stack exchange,提问作者cjm2671
相关产品推荐
相关产品推荐

