最小二乘幂拟合:为何变量a的计算结果与预期值不符?
幂函数拟合中系数a计算错误的原因及修正方法
你计算出的a=2.1是对数转换后的截距,并非原幂函数y = A * x^b中的系数A。
问题根源
幂函数拟合的核心是通过对数转换将非线性问题转为线性回归:
原公式:y = A * x^b
取自然对数后:ln(y) = ln(A) + b * ln(x)
你当前代码中计算的a对应的是ln(A),而非直接是A。要得到原公式中预期的约8的系数,需要对这个a取自然指数还原。
修正代码
修改代码中计算a的部分,添加指数转换步骤:
# 计算对数空间的截距(对应ln(A)) a_log = (sumLog_y - sumLog_x * b) / n # 转换为原空间的系数A A = math.exp(a_log) print("modeling: y = A * x^b") print("指数 b = ", format(b, "0.6f")) print("系数 A = ", format(A, "0.6f"))
修正后结果
运行修正后的代码,会得到:
[1, 2, 3, 4, 5, 6] [8, 11, 19, 20, 18, 22] modeling: y = A * x^b 指数 b = 0.573009 系数 A = 8.210034
这个结果符合你预期的约8的数值。
内容的提问来源于stack exchange,提问作者silver-fang87
相关产品推荐
相关产品推荐

