给定以下一组 xs 和 ys:
xs = [8294400, 2073600, 921600, 409920]
ys = [124, 433, 853, 1449]
用 Excel 中的幂律拟合它会产生一个很好的近似值:
Excel 找到了表格的功能a(x^b)
。在 C# 中如何确定a
和?b
我尝试使用 Math.Net 数字,但我没有看到任何适用于这种形式的函数的方法。线性回归模块中的所有函数都只是找到各种形式函数的线性系数,但似乎没有一个能够确定指数。
给定以下一组 xs 和 ys:
xs = [8294400, 2073600, 921600, 409920]
ys = [124, 433, 853, 1449]
用 Excel 中的幂律拟合它会产生一个很好的近似值:
Excel 找到了表格的功能a(x^b)
。在 C# 中如何确定a
和?b
我尝试使用 Math.Net 数字,但我没有看到任何适用于这种形式的函数的方法。线性回归模块中的所有函数都只是找到各种形式函数的线性系数,但似乎没有一个能够确定指数。
您想要的方程式如下所示:
y = a*x^b
取两边的自然对数:
ln(y) = ln(a*x^b) = ln(a) + b*ln(x)
现在您可以对新转换的变量使用线性回归(ln(x), ln(y))
并计算您想要的两个参数:ln(a)
和b
。
在指数系统中,进行回归的最佳方法可能是在对数尺度上进行线性回归。澄清一下,即使你的函数不是线性的,取等式两边的自然对数也会得到一个更线性的系统
非线性函数:y = a x^b
这然后变成ln(y) = ln(a x^b) = ln(a) b ln(x)
在 Math.NET Numerics 中,编写代码的好方法可能是:
var y = y.Select(r => Math.Log(r)).ToArray(); // transform y = ln(z)
double[] w = Fit.LinearCombination(xy, z_hat,
d => 1.0,
d => Math.Log(d[0]),
d => Math.Log(d[1]))
或者如果你想让它返回一个你可以使用的函数LinearCombinationFunc()
资料来源: http: //numerics.mathdotnet.com/Regression.html和http://numerics.mathdotnet.com/api/MathNet.Numerics/Fit.htm